aboutsummaryrefslogtreecommitdiff
path: root/src/path_functions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/path_functions.cpp')
-rw-r--r--src/path_functions.cpp291
1 files changed, 163 insertions, 128 deletions
diff --git a/src/path_functions.cpp b/src/path_functions.cpp
index df76383d..7953d921 100644
--- a/src/path_functions.cpp
+++ b/src/path_functions.cpp
@@ -20,9 +20,11 @@
#define CASE_SENSITIVE_FILESYSTEM
#endif
-static bool is_power_2(unsigned int n) {
+static bool is_power_2(unsigned int n)
+{
unsigned int r = 0;
- while (n) {
+ while (n)
+ {
r += n & 1;
n >>= 1;
}
@@ -32,7 +34,9 @@ static bool is_power_2(unsigned int n) {
VPath AOApplication::get_theme_path(QString p_file, QString p_theme)
{
if (p_theme == "")
- p_theme = Options::getInstance().theme();
+ {
+ p_theme = Options::getInstance().theme();
+ }
return VPath("themes/" + p_theme + "/" + p_file);
}
@@ -53,7 +57,8 @@ VPath AOApplication::get_sounds_path(QString p_file)
VPath AOApplication::get_music_path(QString p_song)
{
- if (p_song.startsWith("http")) {
+ if (p_song.startsWith("http"))
+ {
return VPath(p_song); // url
}
return VPath("sounds/music/" + p_song);
@@ -61,7 +66,8 @@ VPath AOApplication::get_music_path(QString p_song)
VPath AOApplication::get_background_path(QString p_file)
{
- if (courtroom_constructed) {
+ if (courtroom_constructed)
+ {
return VPath("background/" + w_courtroom->get_current_background() + "/" + p_file);
}
return get_default_background_path(p_file);
@@ -72,72 +78,71 @@ VPath AOApplication::get_default_background_path(QString p_file)
return VPath("background/default/" + p_file);
}
-QString AOApplication::get_pos_path(const QString& pos, const bool desk)
+QString AOApplication::get_pos_path(const QString &pos, const bool desk)
{
// witness is default if pos is invalid
QString f_background;
QString f_desk_image;
- if (file_exists(get_image_suffix(get_background_path("witnessempty")))) {
+ if (file_exists(get_image_suffix(get_background_path("witnessempty"))))
+ {
f_background = "witnessempty";
f_desk_image = "stand";
}
- else {
+ else
+ {
f_background = "wit";
f_desk_image = "wit_overlay";
}
- if (pos == "def" && file_exists(get_image_suffix(
- get_background_path("defenseempty")))) {
+ if (pos == "def" && file_exists(get_image_suffix(get_background_path("defenseempty"))))
+ {
f_background = "defenseempty";
f_desk_image = "defensedesk";
}
- else if (pos == "pro" &&
- file_exists(get_image_suffix(
- get_background_path("prosecutorempty")))) {
+ else if (pos == "pro" && file_exists(get_image_suffix(get_background_path("prosecutorempty"))))
+ {
f_background = "prosecutorempty";
f_desk_image = "prosecutiondesk";
}
- else if (pos == "jud" && file_exists(get_image_suffix(
- get_background_path("judgestand")))) {
+ else if (pos == "jud" && file_exists(get_image_suffix(get_background_path("judgestand"))))
+ {
f_background = "judgestand";
f_desk_image = "judgedesk";
}
- else if (pos == "hld" &&
- file_exists(get_image_suffix(
- get_background_path("helperstand")))) {
+ else if (pos == "hld" && file_exists(get_image_suffix(get_background_path("helperstand"))))
+ {
f_background = "helperstand";
f_desk_image = "helperdesk";
}
- else if (pos == "hlp" &&
- file_exists(get_image_suffix(
- get_background_path("prohelperstand")))) {
+ else if (pos == "hlp" && file_exists(get_image_suffix(get_background_path("prohelperstand"))))
+ {
f_background = "prohelperstand";
f_desk_image = "prohelperdesk";
}
- else if (pos == "jur" && file_exists(get_image_suffix(
- get_background_path("jurystand")))) {
+ else if (pos == "jur" && file_exists(get_image_suffix(get_background_path("jurystand"))))
+ {
f_background = "jurystand";
f_desk_image = "jurydesk";
}
- else if (pos == "sea" &&
- file_exists(get_image_suffix(
- get_background_path("seancestand")))) {
+ else if (pos == "sea" && file_exists(get_image_suffix(get_background_path("seancestand"))))
+ {
f_background = "seancestand";
f_desk_image = "seancedesk";
}
- if (file_exists(get_image_suffix(
- get_background_path(pos)))) // Unique pos path
+ if (file_exists(get_image_suffix(get_background_path(pos)))) // Unique pos path
{
f_background = pos;
f_desk_image = pos + "_overlay";
}
QString desk_override = read_design_ini("overlays/" + f_background, get_background_path("design.ini"));
- if (desk_override != "") {
+ if (desk_override != "")
+ {
f_desk_image = desk_override;
-}
- if (desk) {
+ }
+ if (desk)
+ {
return f_desk_image;
}
return f_background;
@@ -150,108 +155,130 @@ VPath AOApplication::get_evidence_path(QString p_file)
QVector<VPath> AOApplication::get_asset_paths(QString p_element, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc, QString p_character, QString p_placeholder)
{
- QVector<VPath> pathlist;
- if (p_character != "")
- pathlist += get_character_path(p_character, p_element); // Character folder
- if (p_misc != "" && p_theme != "" && p_subtheme != "")
- pathlist += get_theme_path("misc/" + p_misc + "/" + p_element, p_theme + "/" + p_subtheme); // Subtheme misc path
- if (p_misc != "" && p_theme != "")
- pathlist += get_theme_path("misc/" + p_misc + "/" + p_element, p_theme); // Theme misc path
- if (p_theme != "" && p_subtheme != "")
- pathlist += get_theme_path(p_element, p_theme + "/" + p_subtheme); // Subtheme path
- if (p_misc != "")
- pathlist += get_misc_path(p_misc, p_element); // Base misc path
- if (p_theme != "")
- pathlist += get_theme_path(p_element, p_theme); // Theme path
- if (p_default_theme != "")
- pathlist += get_theme_path(p_element, p_default_theme); // Default theme path
- pathlist += VPath(p_element); // The path by itself
- if (p_placeholder != "" && p_theme != "")
- pathlist += get_theme_path(p_placeholder, p_theme); // Placeholder path
- if (p_placeholder != "" && p_default_theme != "")
- pathlist += get_theme_path(p_placeholder, p_default_theme); // Default placeholder path
- return pathlist;
+ QVector<VPath> pathlist;
+ if (p_character != "")
+ {
+ pathlist += get_character_path(p_character, p_element); // Character folder
+ }
+ if (p_misc != "" && p_theme != "" && p_subtheme != "")
+ {
+ pathlist += get_theme_path("misc/" + p_misc + "/" + p_element, p_theme + "/" + p_subtheme); // Subtheme misc path
+ }
+ if (p_misc != "" && p_theme != "")
+ {
+ pathlist += get_theme_path("misc/" + p_misc + "/" + p_element, p_theme); // Theme misc path
+ }
+ if (p_theme != "" && p_subtheme != "")
+ {
+ pathlist += get_theme_path(p_element, p_theme + "/" + p_subtheme); // Subtheme path
+ }
+ if (p_misc != "")
+ {
+ pathlist += get_misc_path(p_misc, p_element); // Base misc path
+ }
+ if (p_theme != "")
+ {
+ pathlist += get_theme_path(p_element, p_theme); // Theme path
+ }
+ if (p_default_theme != "")
+ {
+ pathlist += get_theme_path(p_element, p_default_theme); // Default theme path
+ }
+ pathlist += VPath(p_element); // The path by itself
+ if (p_placeholder != "" && p_theme != "")
+ {
+ pathlist += get_theme_path(p_placeholder, p_theme); // Placeholder path
+ }
+ if (p_placeholder != "" && p_default_theme != "")
+ {
+ pathlist += get_theme_path(p_placeholder, p_default_theme); // Default placeholder path
+ }
+ return pathlist;
}
QString AOApplication::get_asset_path(QVector<VPath> pathlist)
{
- for (const VPath &p : pathlist) {
- QString path = get_real_path(p);
- if (!path.isEmpty()) {
- return path;
- }
+ for (const VPath &p : pathlist)
+ {
+ QString path = get_real_path(p);
+ if (!path.isEmpty())
+ {
+ return path;
+ }
}
return QString();
}
QString AOApplication::get_image_path(QVector<VPath> pathlist, bool static_image)
{
- for (const VPath &p : pathlist) {
- QString path = get_image_suffix(p, static_image);
- if (!path.isEmpty()) {
- return path;
- }
+ for (const VPath &p : pathlist)
+ {
+ QString path = get_image_suffix(p, static_image);
+ if (!path.isEmpty())
+ {
+ return path;
+ }
}
return QString();
}
QString AOApplication::get_sfx_path(QVector<VPath> pathlist)
{
- for (const VPath &p : pathlist) {
- QString path = get_sfx_suffix(p);
- if (!path.isEmpty()) {
- return path;
- }
+ for (const VPath &p : pathlist)
+ {
+ QString path = get_sfx_suffix(p);
+ if (!path.isEmpty())
+ {
+ return path;
+ }
}
return QString();
}
QString AOApplication::get_config_value(QString p_identifier, QString p_config, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc)
{
- QString path;
-// qDebug() << "got request for" << p_identifier << "in" << p_config;
- const auto paths = get_asset_paths(p_config, p_theme, p_subtheme, p_default_theme, p_misc);
- for (const VPath &p : paths) {
- path = get_real_path(p);
- if (!path.isEmpty()) {
- QSettings settings(path, QSettings::IniFormat);
+ QString path;
+ // qDebug() << "got request for" << p_identifier << "in" << p_config;
+ const auto paths = get_asset_paths(p_config, p_theme, p_subtheme, p_default_theme, p_misc);
+ for (const VPath &p : paths)
+ {
+ path = get_real_path(p);
+ if (!path.isEmpty())
+ {
+ QSettings settings(path, QSettings::IniFormat);
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- settings.setIniCodec("UTF-8");
+ settings.setIniCodec("UTF-8");
#endif
- QVariant value = settings.value(p_identifier);
- if (value.type() == QVariant::StringList) {
- return value.toStringList().join(",");
- }
- else if (!value.isNull()){
- return value.toString();
- }
- }
+ QVariant value = settings.value(p_identifier);
+ if (value.type() == QVariant::StringList)
+ {
+ return value.toStringList().join(",");
+ }
+ else if (!value.isNull())
+ {
+ return value.toString();
+ }
}
- return "";
+ }
+ return "";
}
QString AOApplication::get_asset(QString p_element, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc, QString p_character, QString p_placeholder)
{
QString ret = get_asset_path(get_asset_paths(p_element, p_theme, p_subtheme, p_default_theme, p_misc, p_character, p_placeholder));
- if (ret.isEmpty()) {
- qWarning().nospace() << "could not find asset " << p_element
- << " (theme = " << p_theme
- << ", misc = " << p_misc
- << ", char = " << p_character << ")";
+ if (ret.isEmpty())
+ {
+ qWarning().nospace() << "could not find asset " << p_element << " (theme = " << p_theme << ", misc = " << p_misc << ", char = " << p_character << ")";
}
return ret;
}
-QString AOApplication::get_image(QString p_element, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc, QString p_character, QString p_placeholder,
- bool static_image)
+QString AOApplication::get_image(QString p_element, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc, QString p_character, QString p_placeholder, bool static_image)
{
QString ret = get_image_path(get_asset_paths(p_element, p_theme, p_subtheme, p_default_theme, p_misc, p_character, p_placeholder), static_image);
- if (ret.isEmpty()) {
- qWarning().nospace() << "could not find image " << p_element
- << " (theme = " << p_theme
- << ", misc = " << p_misc
- << ", char = " << p_character
- << ", static = " << static_image << ")";
+ if (ret.isEmpty())
+ {
+ qWarning().nospace() << "could not find image " << p_element << " (theme = " << p_theme << ", misc = " << p_misc << ", char = " << p_character << ", static = " << static_image << ")";
}
return ret;
}
@@ -266,62 +293,69 @@ QString AOApplication::get_sfx(QString p_sfx, QString p_misc, QString p_characte
// If SFX not found, search base/sounds/general/ folder
pathlist += get_sounds_path(p_sfx);
QString ret = get_sfx_path(pathlist);
- if (ret.isEmpty()) {
- qWarning().nospace() << "could not find sfx " << p_sfx
- << " (char = " << p_character
- << ", misc = " << p_misc << ")";
+ if (ret.isEmpty())
+ {
+ qWarning().nospace() << "could not find sfx " << p_sfx << " (char = " << p_character << ", misc = " << p_misc << ")";
}
return ret;
}
QString AOApplication::get_case_sensitive_path(QString p_file)
{
-#ifdef CASE_SENSITIVE_FILESYSTEM
+#ifndef CASE_SENSITIVE_FILESYSTEM
+ return p_file;
+#endif
+
// first, check to see if it's actually there (also serves as base case for
// recursion)
QFileInfo file(p_file);
QString file_basename = file.fileName();
if (exists(p_file))
+ {
return p_file;
-
+ }
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
-
- if (!dir_listing_exist_cache.contains(qHash(file_parent_dir))) {
+ if (!dir_listing_exist_cache.contains(qHash(file_parent_dir)))
+ {
QStringList files = QDir(file_parent_dir).entryList();
- for (const QString &file : files) {
+ for (const QString &file : files)
+ {
dir_listing_cache.insert(qHash(file_parent_dir % QChar('/') % file.toLower()), file);
}
dir_listing_exist_cache.insert(qHash(file_parent_dir));
}
- QString found_file = dir_listing_cache.value(
- qHash(file_parent_dir % QChar('/') % file_basename.toLower()));
+ QString found_file = dir_listing_cache.value(qHash(file_parent_dir % QChar('/') % file_basename.toLower()));
- if (!found_file.isEmpty()) {
+ if (!found_file.isEmpty())
+ {
return file_parent_dir + "/" + found_file;
}
// if nothing is found, let the caller handle the missing file
return file_parent_dir + "/" + file_basename;
-#else
- return p_file;
-#endif
}
-QString AOApplication::get_real_path(const VPath &vpath,
- const QStringList &suffixes) {
+QString AOApplication::get_real_path(const VPath &vpath, const QStringList &suffixes)
+{
// Try cache first
QString phys_path = asset_lookup_cache.value(qHash(vpath));
- if (!phys_path.isEmpty() && exists(phys_path)) {
- for (const QString &suffix : suffixes) { // make sure cached asset is the right type
+ if (!phys_path.isEmpty() && exists(phys_path))
+ {
+ for (const QString &suffix : suffixes)
+ { // make sure cached asset is the right type
if (phys_path.endsWith(suffix, Qt::CaseInsensitive))
+ {
return phys_path;
+ }
}
}
@@ -338,20 +372,26 @@ QString AOApplication::get_real_path(const VPath &vpath,
// content 2
// content 1
// base
- for (const QString &base : bases) {
- for (const QString &suffix : suffixes) {
+ for (const QString &base : bases)
+ {
+ for (const QString &suffix : suffixes)
+ {
QDir baseDir(base);
QString path = baseDir.absoluteFilePath(vpath.toQString() + suffix);
- if (!path.startsWith(baseDir.absolutePath())) {
+ if (!path.startsWith(baseDir.absolutePath()))
+ {
qWarning() << "invalid path" << path << "(path is outside vfs)";
break;
}
path = get_case_sensitive_path(path);
- if (exists(path)) {
+ if (exists(path))
+ {
asset_lookup_cache.insert(qHash(vpath), path);
unsigned int cache_size = asset_lookup_cache.size();
if (is_power_2(cache_size))
+ {
qDebug() << "lookup cache has reached" << cache_size << "entries";
+ }
return path;
}
}
@@ -359,16 +399,11 @@ QString AOApplication::get_real_path(const VPath &vpath,
// Not found in mount paths; check if the file is remote
QString remotePath = vpath.toQString();
- if (remotePath.startsWith("http:") || remotePath.startsWith("https:")) {
- return remotePath;
+ if (remotePath.startsWith("http:") || remotePath.startsWith("https:"))
+ {
+ return remotePath;
}
// File or directory not found
return QString();
}
-
-void AOApplication::invalidate_lookup_cache() {
- asset_lookup_cache.clear();
- dir_listing_cache.clear();
- dir_listing_exist_cache.clear();
-}