
- The `base/` folder's path is now determined based on where the executable was executed, not where its workspace is. - Showing custom shownames is now assumed to be `true` by default, unless the `config.ini` says otherwise. - The Lobby's listing of servers has now been moved into its constructor (previously only specifically called by the "Back to Lobby" button). This makes it list servers even if the user was kicked, banned, or left due to timeout.
163 lines
4.1 KiB
C++
163 lines
4.1 KiB
C++
#include "aoapplication.h"
|
|
#include "courtroom.h"
|
|
#include "file_functions.h"
|
|
|
|
#include <QDir>
|
|
#include <QStandardPaths>
|
|
#include <QRegExp>
|
|
|
|
#ifdef BASE_OVERRIDE
|
|
#include "base_override.h"
|
|
#endif
|
|
|
|
//this is a quite broad generalization
|
|
//the most common OSes(mac and windows) are _usually_ case insensitive
|
|
//however, there do exist mac installations with case sensitive filesystems
|
|
//in that case, define CASE_SENSITIVE_FILESYSTEM and compile on a mac
|
|
#if (defined (LINUX) || defined (__linux__))
|
|
#define CASE_SENSITIVE_FILESYSTEM
|
|
#endif
|
|
|
|
QString AOApplication::get_base_path()
|
|
{
|
|
QString base_path = "";
|
|
#ifdef ANDROID
|
|
QString sdcard_storage = getenv("SECONDARY_STORAGE");
|
|
if (dir_exists(sdcard_storage + "/AO2/")){
|
|
base_path = sdcard_storage + "/AO2/";
|
|
}
|
|
else {
|
|
QString external_storage = getenv("EXTERNAL_STORAGE");
|
|
base_path = external_storage + "/AO2/";
|
|
}
|
|
#else
|
|
base_path = applicationDirPath() + "/base/";
|
|
#endif
|
|
|
|
return base_path;
|
|
}
|
|
|
|
QString AOApplication::get_data_path()
|
|
{
|
|
return get_base_path() + "data/";
|
|
}
|
|
|
|
QString AOApplication::get_default_theme_path(QString p_file)
|
|
{
|
|
QString path = get_base_path() + "themes/default/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_custom_theme_path(QString p_theme, QString p_file)
|
|
{
|
|
QString path = get_base_path() + "themes/" + p_theme + "/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_theme_path(QString p_file)
|
|
{
|
|
QString path = get_base_path() + "themes/" + current_theme + "/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_character_path(QString p_char, QString p_file)
|
|
{
|
|
QString path = get_base_path() + "characters/" + p_char + "/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_sounds_path(QString p_file)
|
|
{
|
|
QString path = get_base_path() + "sounds/general/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_music_path(QString p_song)
|
|
{
|
|
QString path = get_base_path() + "sounds/music/" + p_song;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_background_path(QString p_file)
|
|
{
|
|
QString path = get_base_path() + "background/" + w_courtroom->get_current_background() + "/" + p_file;
|
|
if (courtroom_constructed) {
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
return get_default_background_path(p_file);
|
|
}
|
|
|
|
QString AOApplication::get_default_background_path(QString p_file)
|
|
{
|
|
QString path = get_base_path() + "background/default/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_evidence_path(QString p_file)
|
|
{
|
|
QString path = get_base_path() + "evidence/" + p_file;
|
|
#ifndef CASE_SENSITIVE_FILESYSTEM
|
|
return path;
|
|
#else
|
|
return get_case_sensitive_path(path);
|
|
#endif
|
|
}
|
|
|
|
QString AOApplication::get_case_sensitive_path(QString p_file) {
|
|
//first, check to see if it's actually there (also serves as base case for recursion)
|
|
if (exists(p_file)) return p_file;
|
|
|
|
QFileInfo file(p_file);
|
|
|
|
QString file_basename = file.fileName();
|
|
QString file_parent_dir = get_case_sensitive_path(file.absolutePath());
|
|
|
|
//second, does it exist in the new parent dir?
|
|
if (exists(file_parent_dir + "/" + file_basename))
|
|
return file_parent_dir + "/" + file_basename;
|
|
|
|
//last resort, dirlist parent dir and find case insensitive match
|
|
QRegExp file_rx = QRegExp(file_basename, Qt::CaseInsensitive);
|
|
QStringList files = QDir(file_parent_dir).entryList();
|
|
|
|
int result = files.indexOf(file_rx);
|
|
|
|
if (result != -1)
|
|
return file_parent_dir + "/" + files.at(result);
|
|
|
|
//if nothing is found, let the caller handle the missing file
|
|
return file_parent_dir + "/" + file_basename;
|
|
}
|