1 #pragma once
2 
3 #include <QString>
4 #include <boost/optional.hpp>
5 
6 namespace chatterino {
7 
8 class Paths
9 {
10 public:
11     static Paths *instance;
12 
13     Paths();
14 
15     // Root directory for the configuration files. %APPDATA%/chatterino or
16     // ExecutablePath for portable mode
17     QString rootAppDataDirectory;
18 
19     // Directory for settings files. Same as <appDataDirectory>/Settings
20     QString settingsDirectory;
21 
22     // Directory for message log files. Same as <appDataDirectory>/Misc
23     QString messageLogDirectory;
24 
25     // Directory for miscellaneous files. Same as <appDataDirectory>/Misc
26     QString miscDirectory;
27 
28     // Hash of QCoreApplication::applicationFilePath()
29     QString applicationFilePathHash;
30 
31     // Profile avatars for twitch <appDataDirectory>/cache/twitch
32     QString twitchProfileAvatars;
33 
34     bool createFolder(const QString &folderPath);
35     bool isPortable();
36 
37     QString cacheDirectory();
38 
39 private:
40     void initAppFilePathHash();
41     void initCheckPortable();
42     void initRootDirectory();
43     void initSubDirectories();
44 
45     boost::optional<bool> portable_;
46 
47     // Directory for cache files. Same as <appDataDirectory>/Misc
48     QString cacheDirectory_;
49 };
50 
51 Paths *getPaths();
52 
53 }  // namespace chatterino
54