Move XDP file dialog to glibmm mime type & regex methods
This commit is contained in:
parent
13a497cf5d
commit
9a6e571154
|
@ -16,8 +16,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "base/openssl_help.h"
|
#include "base/openssl_help.h"
|
||||||
#include "base/qt_adapters.h"
|
#include "base/qt_adapters.h"
|
||||||
|
|
||||||
#include <QtCore/QMimeType>
|
|
||||||
#include <QtCore/QMimeDatabase>
|
|
||||||
#include <QtGui/QWindow>
|
#include <QtGui/QWindow>
|
||||||
#include <QtWidgets/QFileDialog>
|
#include <QtWidgets/QFileDialog>
|
||||||
|
|
||||||
|
@ -282,7 +280,7 @@ void XDPFileDialog::openPortal() {
|
||||||
if (_acceptMode == QFileDialog::AcceptSave) {
|
if (_acceptMode == QFileDialog::AcceptSave) {
|
||||||
if (!_directory.empty()) {
|
if (!_directory.empty()) {
|
||||||
options["current_folder"] = Glib::Variant<std::string>::create(
|
options["current_folder"] = Glib::Variant<std::string>::create(
|
||||||
_directory +'\0');
|
_directory + '\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_selectedFiles.empty()) {
|
if (!_selectedFiles.empty()) {
|
||||||
|
@ -302,8 +300,12 @@ void XDPFileDialog::openPortal() {
|
||||||
|
|
||||||
if (!_mimeTypesFilters.empty()) {
|
if (!_mimeTypesFilters.empty()) {
|
||||||
for (const auto &mimeTypeFilter : _mimeTypesFilters) {
|
for (const auto &mimeTypeFilter : _mimeTypesFilters) {
|
||||||
const auto mimeType = QMimeDatabase().mimeTypeForName(
|
auto mimeTypeUncertain = false;
|
||||||
QString::fromStdString(mimeTypeFilter));
|
const auto mimeType = Gio::content_type_guess(
|
||||||
|
mimeTypeFilter,
|
||||||
|
nullptr,
|
||||||
|
0,
|
||||||
|
mimeTypeUncertain);
|
||||||
|
|
||||||
// Creates e.g. (1, "image/png")
|
// Creates e.g. (1, "image/png")
|
||||||
const auto filterCondition = FilterCondition{
|
const auto filterCondition = FilterCondition{
|
||||||
|
@ -313,7 +315,7 @@ void XDPFileDialog::openPortal() {
|
||||||
|
|
||||||
// Creates e.g. [("Images", [((1, "image/png"))])]
|
// Creates e.g. [("Images", [((1, "image/png"))])]
|
||||||
filterList.push_back({
|
filterList.push_back({
|
||||||
mimeType.comment().toStdString(),
|
Gio::content_type_get_description(mimeType),
|
||||||
FilterConditionList{filterCondition},
|
FilterConditionList{filterCondition},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -326,18 +328,16 @@ void XDPFileDialog::openPortal() {
|
||||||
for (const auto &nameFilter : _nameFilters) {
|
for (const auto &nameFilter : _nameFilters) {
|
||||||
// Do parsing:
|
// Do parsing:
|
||||||
// Supported format is ("Images (*.png *.jpg)")
|
// Supported format is ("Images (*.png *.jpg)")
|
||||||
const QRegularExpression regexp(
|
const auto regexp = Glib::Regex::create(filterRegExp);
|
||||||
QString::fromLatin1(filterRegExp));
|
|
||||||
|
|
||||||
const QRegularExpressionMatch match = regexp.match(
|
Glib::MatchInfo match;
|
||||||
QString::fromStdString(nameFilter));
|
regexp->match(nameFilter, match);
|
||||||
|
|
||||||
if (match.hasMatch()) {
|
if (match.matches()) {
|
||||||
const auto userVisibleName = match.captured(1).toStdString();
|
const auto userVisibleName = match.fetch(1);
|
||||||
const auto filterStrings = QStringListToStd(
|
const auto filterStrings = Glib::Regex::create(" ")->split(
|
||||||
match.captured(2).split(
|
match.fetch(2),
|
||||||
QLatin1Char(' '),
|
Glib::RegexMatchFlags::REGEX_MATCH_NOTEMPTY);
|
||||||
base::QStringSkipEmptyParts));
|
|
||||||
|
|
||||||
if (filterStrings.empty()) {
|
if (filterStrings.empty()) {
|
||||||
LOG((
|
LOG((
|
||||||
|
|
Loading…
Reference in New Issue