Improve OS detection and add APPIMAGE support to pathing code (#1003)

* Added get_app_path, tweaked pathing to adjust itself for Linux, ...

* Added get_app_path
  * This should be used instead of QCoreApplication::applicationDirPath()
* Tweaked pathing to adjust itself for Linux

* Append separator to base path

* Moved headers where they are needed. (Dunno why they were here.)

* Proper pathing for AppImage
This commit is contained in:
Leifa 2024-07-06 18:05:48 +02:00 committed by GitHub
parent a1e13f62fd
commit 03025119c4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 46 additions and 20 deletions

View File

@ -1,5 +1,9 @@
#include "file_functions.h" #include "file_functions.h"
#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
bool file_exists(QString file_path) bool file_exists(QString file_path)
{ {
if (file_path.isEmpty()) if (file_path.isEmpty())
@ -31,24 +35,47 @@ bool exists(QString p_path)
return file.exists(); return file.exists();
} }
QString get_base_path() QString get_app_path()
{ {
QString base_path; QString path = QCoreApplication::applicationDirPath();
#ifdef ANDROID
QString sdcard_storage = getenv("SECONDARY_STORAGE"); #ifdef Q_OS_ANDROID
if (dir_exists(sdcard_storage + "/base/")) QString storage_path = qgetenv("SECONDARY_STORAGE");
if (dir_exists(storage_path))
{ {
base_path = sdcard_storage + "/base/"; path = storage_path;
} }
else else
{ {
QString external_storage = getenv("EXTERNAL_STORAGE"); QString external_path = qgetenv("EXTERNAL_STORAGE");
base_path = external_storage + "/base/"; if (dir_exists(external_path))
{
path = external_path;
}
} }
#elif defined(__APPLE__)
base_path = QCoreApplication::applicationDirPath() + "/../../../base/";
#else
base_path = QCoreApplication::applicationDirPath() + "/base/";
#endif #endif
return base_path;
#ifdef Q_OS_LINUX
QString app_path = qgetenv("APPIMAGE");
if (!app_path.isEmpty())
{
path = QFileInfo(app_path).absoluteDir().path();
}
#endif
#ifdef Q_OS_MAC
path += "/../../..";
#endif
if (path.endsWith(QDir::separator()))
{
path.chop(1);
}
return path;
}
QString get_base_path()
{
return QDir(get_app_path()).absoluteFilePath("base") + "/";
} }

View File

@ -1,11 +1,10 @@
#pragma once #pragma once
#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
#include <QString> #include <QString>
bool file_exists(QString file_path); bool file_exists(QString file_path);
bool dir_exists(QString file_path); bool dir_exists(QString file_path);
bool exists(QString p_path); bool exists(QString p_path);
QString get_app_path();
QString get_base_path(); QString get_base_path();

View File

@ -425,7 +425,7 @@ void Lobby::on_demo_clicked(QTreeWidgetItem *item, int column)
return; return;
} }
QString l_filepath = (QApplication::applicationDirPath() + "/logs/%1/%2").arg(item->data(0, Qt::DisplayRole).toString(), item->data(1, Qt::DisplayRole).toString()); QString l_filepath = (get_app_path() + "/logs/%1/%2").arg(item->data(0, Qt::DisplayRole).toString(), item->data(1, Qt::DisplayRole).toString());
ao_app->demo_server->start_server(); ao_app->demo_server->start_server();
ServerInfo demo_server; ServerInfo demo_server;
demo_server.ip = "127.0.0.1"; demo_server.ip = "127.0.0.1";

View File

@ -133,7 +133,7 @@ bool AOApplication::append_to_file(QString p_text, QString p_file, bool make_dir
QMultiMap<QString, QString> AOApplication::load_demo_logs_list() const QMultiMap<QString, QString> AOApplication::load_demo_logs_list() const
{ {
QString l_log_path = applicationDirPath() + "/logs/"; QString l_log_path = get_app_path() + "/logs/";
QDir l_log_folder(l_log_path); QDir l_log_folder(l_log_path);
l_log_folder.setFilter(QDir::NoDotAndDotDot | QDir::Dirs); l_log_folder.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);

View File

@ -436,12 +436,12 @@ void AOOptionsDialog::setupUI()
FROM_UI(QPushButton, mount_add); FROM_UI(QPushButton, mount_add);
connect(ui_mount_add, &QPushButton::clicked, this, [this] { connect(ui_mount_add, &QPushButton::clicked, this, [this] {
QString path = QFileDialog::getExistingDirectory(this, tr("Select a base folder"), QApplication::applicationDirPath(), QFileDialog::ShowDirsOnly); QString path = QFileDialog::getExistingDirectory(this, tr("Select a base folder"), get_app_path(), QFileDialog::ShowDirsOnly);
if (path.isEmpty()) if (path.isEmpty())
{ {
return; return;
} }
QDir dir(QApplication::applicationDirPath()); QDir dir(get_app_path());
QString relative = dir.relativeFilePath(path); QString relative = dir.relativeFilePath(path);
if (!relative.contains("../")) if (!relative.contains("../"))
{ {