aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeifa <26681464+TrickyLeifa@users.noreply.github.com>2024-07-06 18:05:48 +0200
committerGitHub <noreply@github.com>2024-07-06 18:05:48 +0200
commit03025119c4a7316e83f5336756d3afc9d1ff82b1 (patch)
tree72661dd1ec0c1149e3fcf5641bc92c14cd2fae71
parenta1e13f62fd47f09dc973e7c36987e161ecb19cdf (diff)
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
-rw-r--r--src/file_functions.cpp53
-rw-r--r--src/file_functions.h5
-rw-r--r--src/lobby.cpp2
-rw-r--r--src/text_file_functions.cpp2
-rw-r--r--src/widgets/aooptionsdialog.cpp4
5 files changed, 46 insertions, 20 deletions
diff --git a/src/file_functions.cpp b/src/file_functions.cpp
index fef34f54..cbdd640d 100644
--- a/src/file_functions.cpp
+++ b/src/file_functions.cpp
@@ -1,5 +1,9 @@
#include "file_functions.h"
+#include <QCoreApplication>
+#include <QDir>
+#include <QFileInfo>
+
bool file_exists(QString file_path)
{
if (file_path.isEmpty())
@@ -31,24 +35,47 @@ bool exists(QString p_path)
return file.exists();
}
-QString get_base_path()
+QString get_app_path()
{
- QString base_path;
-#ifdef ANDROID
- QString sdcard_storage = getenv("SECONDARY_STORAGE");
- if (dir_exists(sdcard_storage + "/base/"))
+ QString path = QCoreApplication::applicationDirPath();
+
+#ifdef Q_OS_ANDROID
+ QString storage_path = qgetenv("SECONDARY_STORAGE");
+ if (dir_exists(storage_path))
{
- base_path = sdcard_storage + "/base/";
+ path = storage_path;
}
else
{
- QString external_storage = getenv("EXTERNAL_STORAGE");
- base_path = external_storage + "/base/";
+ QString external_path = qgetenv("EXTERNAL_STORAGE");
+ if (dir_exists(external_path))
+ {
+ path = external_path;
+ }
}
-#elif defined(__APPLE__)
- base_path = QCoreApplication::applicationDirPath() + "/../../../base/";
-#else
- base_path = QCoreApplication::applicationDirPath() + "/base/";
#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") + "/";
}
diff --git a/src/file_functions.h b/src/file_functions.h
index ca1eeb5e..252148fd 100644
--- a/src/file_functions.h
+++ b/src/file_functions.h
@@ -1,11 +1,10 @@
#pragma once
-#include <QCoreApplication>
-#include <QDir>
-#include <QFileInfo>
#include <QString>
bool file_exists(QString file_path);
bool dir_exists(QString file_path);
bool exists(QString p_path);
+
+QString get_app_path();
QString get_base_path();
diff --git a/src/lobby.cpp b/src/lobby.cpp
index f853380f..aba9f606 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -425,7 +425,7 @@ void Lobby::on_demo_clicked(QTreeWidgetItem *item, int column)
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();
ServerInfo demo_server;
demo_server.ip = "127.0.0.1";
diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp
index 418de47c..35efe20c 100644
--- a/src/text_file_functions.cpp
+++ b/src/text_file_functions.cpp
@@ -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
{
- QString l_log_path = applicationDirPath() + "/logs/";
+ QString l_log_path = get_app_path() + "/logs/";
QDir l_log_folder(l_log_path);
l_log_folder.setFilter(QDir::NoDotAndDotDot | QDir::Dirs);
diff --git a/src/widgets/aooptionsdialog.cpp b/src/widgets/aooptionsdialog.cpp
index a0b7d7ce..4d55652e 100644
--- a/src/widgets/aooptionsdialog.cpp
+++ b/src/widgets/aooptionsdialog.cpp
@@ -436,12 +436,12 @@ void AOOptionsDialog::setupUI()
FROM_UI(QPushButton, mount_add);
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())
{
return;
}
- QDir dir(QApplication::applicationDirPath());
+ QDir dir(get_app_path());
QString relative = dir.relativeFilePath(path);
if (!relative.contains("../"))
{