getOpenFileName fix for Android

This commit is contained in:
pokamest 2023-04-05 01:43:42 +01:00
parent 15c33014e7
commit 7e717754a3
4 changed files with 29 additions and 4 deletions

View file

@ -8,6 +8,7 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QFileDialog> #include <QFileDialog>
#include <QStandardPaths> #include <QStandardPaths>
#include <utilities.h>
using namespace amnezia; using namespace amnezia;
using namespace PageEnumNS; using namespace PageEnumNS;
@ -82,7 +83,7 @@ void AppSettingsLogic::onPushButtonBackupAppConfigClicked()
void AppSettingsLogic::onPushButtonRestoreAppConfigClicked() void AppSettingsLogic::onPushButtonRestoreAppConfigClicked()
{ {
QString fileName = QFileDialog::getOpenFileName(Q_NULLPTR, tr("Open backup"), QString fileName = Utils::getOpenFileName(Q_NULLPTR, tr("Open backup"),
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.backup"); QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.backup");
if (fileName.isEmpty()) return; if (fileName.isEmpty()) return;
@ -98,6 +99,5 @@ void AppSettingsLogic::onPushButtonRestoreAppConfigClicked()
} else { } else {
emit uiLogic()->showWarningMessage(tr("Can't import config, file is corrupted.")); emit uiLogic()->showWarningMessage(tr("Can't import config, file is corrupted."));
} }
} }

View file

@ -167,7 +167,7 @@ void StartPageLogic::onPushButtonImport()
void StartPageLogic::onPushButtonImportOpenFile() void StartPageLogic::onPushButtonImportOpenFile()
{ {
QString fileName = QFileDialog::getOpenFileName(Q_NULLPTR, tr("Open config file"), QString fileName = Utils::getOpenFileName(Q_NULLPTR, tr("Open config file"),
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.vpn *.ovpn *.conf"); QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.vpn *.ovpn *.conf");
if (fileName.isEmpty()) return; if (fileName.isEmpty()) return;

View file

@ -247,6 +247,23 @@ QString Utils::certUtilPath()
#endif #endif
} }
QString Utils::getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
{
QString fileName = QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options);
#ifdef Q_OS_ANDROID
// patch for files containing spaces etc
const QString sep {"raw%3A%2F"};
if (fileName.startsWith("content://") && fileName.contains(sep)) {
QString contentUrl = fileName.split(sep).at(0);
QString rawUrl = fileName.split(sep).at(1);
rawUrl.replace(" ", "%20");
fileName = contentUrl + sep + rawUrl;
}
#endif
return fileName;
}
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
// Inspired from http://stackoverflow.com/a/15281070/1529139 // Inspired from http://stackoverflow.com/a/15281070/1529139
// and http://stackoverflow.com/q/40059902/1529139 // and http://stackoverflow.com/q/40059902/1529139

View file

@ -1,6 +1,7 @@
#ifndef UTILITIES_H #ifndef UTILITIES_H
#define UTILITIES_H #define UTILITIES_H
#include <QFileDialog>
#include <QRegExp> #include <QRegExp>
#include <QString> #include <QString>
#include <QRegularExpression> #include <QRegularExpression>
@ -50,6 +51,13 @@ public:
static QString wireguardExecPath(); static QString wireguardExecPath();
static QString certUtilPath(); static QString certUtilPath();
static QString getOpenFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
QFileDialog::Options options = QFileDialog::Options());
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
static bool signalCtrl(DWORD dwProcessId, DWORD dwCtrlEvent); static bool signalCtrl(DWORD dwProcessId, DWORD dwCtrlEvent);