diff options
| author | oldmud0 <oldmud0@users.noreply.github.com> | 2018-12-15 11:02:12 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-15 11:02:12 -0600 |
| commit | de6877409714417c8fb29d66d1ae1ef098b82644 (patch) | |
| tree | db79ef284b2223daa1bee48056a96a81310945bf /path_functions.cpp | |
| parent | 3ef743da7b8071e0dc4b1189cbe131f65f11b5de (diff) | |
| parent | 6d1ea9d81fc02fbc481d93af549003db954aa1f7 (diff) | |
Merge pull request #33 from AttorneyOnline/mega-merge
AOV/Case Cafe feature parity
Diffstat (limited to 'path_functions.cpp')
| -rw-r--r-- | path_functions.cpp | 169 |
1 files changed, 112 insertions, 57 deletions
diff --git a/path_functions.cpp b/path_functions.cpp index 820c05a6..7d40054f 100644 --- a/path_functions.cpp +++ b/path_functions.cpp @@ -1,34 +1,40 @@ #include "aoapplication.h" #include "courtroom.h" #include "file_functions.h" + #include <QDir> -#include <QDebug> #include <QStandardPaths> +#include <QRegExp> #ifdef BASE_OVERRIDE #include "base_override.h" #endif -QString base_path = ""; + +//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() { - if (base_path == "") - { -#ifdef BASE_OVERRIDE - base_path = base_override; -#elif defined(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/"; - } + 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 = QDir::currentPath() + "/base/"; #endif -} - return base_path; + + return base_path; } QString AOApplication::get_data_path() @@ -36,72 +42,121 @@ QString AOApplication::get_data_path() return get_base_path() + "data/"; } -QString AOApplication::get_theme_path() +QString AOApplication::get_default_theme_path(QString p_file) { - return get_base_path() + "themes/" + current_theme.toLower() + "/"; + 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_default_theme_path() +QString AOApplication::get_custom_theme_path(QString p_theme, QString p_file) { - return get_base_path() + "themes/default/"; + 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_character_path(QString p_character) +QString AOApplication::get_theme_path(QString p_file) { - return get_base_path() + "characters/" + p_character.toLower() + "/"; + 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_demothings_path() +QString AOApplication::get_character_path(QString p_char, QString p_file) { - QString default_path = "misc/demothings/"; - QString alt_path = "misc/RosterImages"; - if (dir_exists(default_path)) - return get_base_path() + default_path; - else if (dir_exists(alt_path)) - return get_base_path() + alt_path; - else - return get_base_path() + default_path; + 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 AOApplication::get_sounds_path(QString p_file) { - return get_base_path() + "sounds/general/"; + 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) { - return get_base_path() + "sounds/music/" + p_song.toLower(); + 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 AOApplication::get_background_path(QString p_file) { - if (courtroom_constructed) - return w_courtroom->get_background_path(); - //this function being called when the courtroom isn't constructed makes no sense - return ""; + 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 AOApplication::get_default_background_path(QString p_file) { - return get_base_path() + "background/default/"; + 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 AOApplication::get_evidence_path(QString p_file) { - QString default_path = "evidence/"; - QString alt_path = "items/"; - if (dir_exists(default_path)) - return get_base_path() + default_path; - else if (dir_exists(alt_path)) - return get_base_path() + alt_path; - else - return get_base_path() + default_path; + QString path = get_base_path() + "evidence/" + p_file; +#ifndef CASE_SENSITIVE_FILESYSTEM + return path; +#else + return get_case_sensitive_path(path); +#endif } -QString Courtroom::get_background_path() -{ - return ao_app->get_base_path() + "background/" + current_background.toLower() + "/"; -} +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; -QString Courtroom::get_default_background_path() -{ - return ao_app->get_base_path() + "background/default/"; + 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; } |
