Move XDP file dialog to glibmm mime type & regex methods

This commit is contained in:
Ilya Fedin 2021-04-04 00:51:17 +04:00 committed by John Preston
parent 13a497cf5d
commit 9a6e571154
1 changed files with 16 additions and 16 deletions

View File

@ -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((