aboutsummaryrefslogtreecommitdiff
path: root/path_functions.cpp
blob: f066102d988430ea03c306a4be4fccb2f5b7f5ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#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

//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 = QDir::currentPath() + "/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
}

//assume that the capitalization of the theme in config is correct
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_character, QString p_file)
{
  QString char_path = get_base_path() + "characters/" + p_character;
#ifndef CASE_SENSITIVE_FILESYSTEM
  return char_path + "/" + p_file;
#else
  //need two calls to get_case_sensitive_path because character folder name may be wrong as well as the filename
  return get_case_sensitive_path(
         get_case_sensitive_path(char_path) + "/" + p_file);
#endif
}

QString AOApplication::get_character_emotions_path(QString p_character, QString p_file)
{
  QString char_path = get_base_path() + "characters/" + p_character;
#ifndef CASE_SENSITIVE_FILESYSTEM
  return char_path + "/emotions/" + p_file;
#else
  return get_case_sensitive_path(
         get_case_sensitive_path(char_path) + "/emotions/" + p_file);
#endif
}

QString AOApplication::get_sounds_path()
{
  QString path = get_base_path() + "sounds/general/";
#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 bg_path = get_base_path() + "background/" + w_courtroom->get_current_background();
  if (courtroom_constructed) {
#ifndef CASE_SENSITIVE_FILESYSTEM
    return bg_path + "/" + p_file;
#else
    return get_case_sensitive_path(
           get_case_sensitive_path(bg_path) + "/" + p_file);
#endif
  }
  //this function being called when the courtroom isn't constructed makes no sense
  return "";
}

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) {
  QFileInfo file(p_file);

  //quick check to see if it's actually there first
  if (file.exists()) return p_file;

  QString file_name = file.fileName();
  QString file_path = file.absolutePath();

  QRegExp file_rx = QRegExp(file_name, Qt::CaseInsensitive);
  QStringList files = QDir(file_path).entryList();
  int result = files.indexOf(file_rx);

  if (result != -1)
    return file_path + "/" + files.at(result);

  //if nothing is found, let the caller handle the missing file
  return p_file;
}