aboutsummaryrefslogtreecommitdiff
path: root/path_functions.cpp
diff options
context:
space:
mode:
authoroldmud0 <oldmud0@users.noreply.github.com>2018-12-15 11:02:12 -0600
committerGitHub <noreply@github.com>2018-12-15 11:02:12 -0600
commitde6877409714417c8fb29d66d1ae1ef098b82644 (patch)
treedb79ef284b2223daa1bee48056a96a81310945bf /path_functions.cpp
parent3ef743da7b8071e0dc4b1189cbe131f65f11b5de (diff)
parent6d1ea9d81fc02fbc481d93af549003db954aa1f7 (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.cpp169
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;
}