annotate src/core/filesystem.cc @ 198:bc1ae1810855

dep/animia: switch from using classes to global functions the old idea was ok, but sort of hackish; this method doesn't use classes at all, and this way (especially important!) we can do wayland stuff AND x11 at the same time, which wasn't really possible without stupid workarounds in the other method
author Paper <mrpapersonic@gmail.com>
date Sun, 24 Dec 2023 02:59:42 -0500
parents 8548dc425697
children 53211cb1e7f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 7
diff changeset
1 #ifdef WIN32
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
2 # include <shlobj.h>
5
51ae25154b70 Fix OS X support code
Paper <mrpapersonic@gmail.com>
parents: 2
diff changeset
3 #elif defined(MACOSX)
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
4 # include "sys/osx/filesystem.h"
7
Paper <mrpapersonic@gmail.com>
parents: 5
diff changeset
5 #elif defined(__linux__)
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
6 # include <pwd.h>
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
7 # include <sys/types.h>
2
Paper <mrpapersonic@gmail.com>
parents: 1
diff changeset
8 #endif
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
9
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
10 #ifdef WIN32
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
11 # define DELIM "\\"
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
12 #else
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
13 # define DELIM "/"
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
14 # include <errno.h>
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
15 # include <unistd.h>
18
28d8f4c0ae12 *nix: add missing header file for stat
Paper <mrpapersonic@gmail.com>
parents: 15
diff changeset
16 # include <sys/stat.h>
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
17 #endif
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
18
36
2743011a6042 *: mass update
Paper <mrpapersonic@gmail.com>
parents: 18
diff changeset
19 #include "core/filesystem.h"
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
20 #include "core/config.h"
62
4c6dd5999b39 *: update
Paper <mrpapersonic@gmail.com>
parents: 61
diff changeset
21 #include "core/strings.h"
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
22 #include <filesystem>
2
Paper <mrpapersonic@gmail.com>
parents: 1
diff changeset
23 #include <limits.h>
Paper <mrpapersonic@gmail.com>
parents: 1
diff changeset
24
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
25 namespace Filesystem {
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
26
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
27 /* this runs fs::create_directories() on the
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
28 PARENT directory. */
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
29 void CreateDirectories(const std::filesystem::path& path) {
158
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
30 if (path.empty())
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
31 return;
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
32
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
33 const auto& parent = path.parent_path();
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
34 if (!std::filesystem::exists(parent))
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
35 std::filesystem::create_directories(parent);
11
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
36 }
fc1bf97c528b *: use C++11 standard
Paper <mrpapersonic@gmail.com>
parents: 9
diff changeset
37
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
38 std::filesystem::path GetDotPath() {
9
5c0397762b53 INCOMPLETE: megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 7
diff changeset
39 #ifdef WIN32
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
40 std::filesystem::path path;
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
41 wchar_t* buf;
176
121c2d5b321f anime/db: finalize anime db cache
Paper <mrpapersonic@gmail.com>
parents: 158
diff changeset
42
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
43 if (SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, NULL, &buf) == S_OK)
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
44 path = buf;
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
45 else
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
46 return std::filesystem::path();
176
121c2d5b321f anime/db: finalize anime db cache
Paper <mrpapersonic@gmail.com>
parents: 158
diff changeset
47
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
48 CoTaskMemFree(buf);
176
121c2d5b321f anime/db: finalize anime db cache
Paper <mrpapersonic@gmail.com>
parents: 158
diff changeset
49
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
50 return path / CONFIG_DIR;
2
Paper <mrpapersonic@gmail.com>
parents: 1
diff changeset
51 #elif defined(MACOSX)
194
8548dc425697 sys/osx: remove all objective-c++ stuff
Paper <mrpapersonic@gmail.com>
parents: 176
diff changeset
52 std::string appsupport;
8548dc425697 sys/osx: remove all objective-c++ stuff
Paper <mrpapersonic@gmail.com>
parents: 176
diff changeset
53 if (!osx::GetApplicationSupportDirectory(appsupport))
8548dc425697 sys/osx: remove all objective-c++ stuff
Paper <mrpapersonic@gmail.com>
parents: 176
diff changeset
54 return "";
8548dc425697 sys/osx: remove all objective-c++ stuff
Paper <mrpapersonic@gmail.com>
parents: 176
diff changeset
55
8548dc425697 sys/osx: remove all objective-c++ stuff
Paper <mrpapersonic@gmail.com>
parents: 176
diff changeset
56 return std::filesystem::path(appsupport) / CONFIG_DIR;
2
Paper <mrpapersonic@gmail.com>
parents: 1
diff changeset
57 #else // just assume POSIX
138
28842a8d0c6b dep/animia: huge refactor (again...)
Paper <mrpapersonic@gmail.com>
parents: 136
diff changeset
58 std::filesystem::path path;
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
59 const char* home = getenv("HOME");
176
121c2d5b321f anime/db: finalize anime db cache
Paper <mrpapersonic@gmail.com>
parents: 158
diff changeset
60
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
61 # ifdef __linux__
138
28842a8d0c6b dep/animia: huge refactor (again...)
Paper <mrpapersonic@gmail.com>
parents: 136
diff changeset
62 if (!home)
28842a8d0c6b dep/animia: huge refactor (again...)
Paper <mrpapersonic@gmail.com>
parents: 136
diff changeset
63 home = getpwuid(getuid())->pw_dir;
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
64 # endif // __linux__
176
121c2d5b321f anime/db: finalize anime db cache
Paper <mrpapersonic@gmail.com>
parents: 158
diff changeset
65
121c2d5b321f anime/db: finalize anime db cache
Paper <mrpapersonic@gmail.com>
parents: 158
diff changeset
66 /* only do this if the home directory was really found */
158
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
67 if (home)
80d6b28eb29f dep/animia: fix most X11 stuff
Paper <mrpapersonic@gmail.com>
parents: 138
diff changeset
68 return std::filesystem::path(home) / ".config" / CONFIG_DIR;
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
69 else
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
70 return std::filesystem::path();
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
71 #endif // !WIN32 && !MACOSX
45
4b05bc7668eb filesystem: split config path into dotpath and config, add anime db path
Paper <mrpapersonic@gmail.com>
parents: 44
diff changeset
72 }
4b05bc7668eb filesystem: split config path into dotpath and config, add anime db path
Paper <mrpapersonic@gmail.com>
parents: 44
diff changeset
73
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
74 std::filesystem::path GetConfigPath() {
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
75 return GetDotPath() / CONFIG_NAME;
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 106
diff changeset
76 }
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 106
diff changeset
77
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
78 std::filesystem::path GetPlayersPath() {
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
79 return GetDotPath() / "recognition" / "players.json";
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 106
diff changeset
80 }
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 106
diff changeset
81
135
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
82 std::filesystem::path GetExtensionsPath() {
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
83 return GetDotPath() / "recognition" / "extensions.json";
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
84 }
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
85
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
86 std::filesystem::path GetAnimeDBPath() {
0a458cb26ff4 filesystem: move to using std::filesystem after C++17 switch
Paper <mrpapersonic@gmail.com>
parents: 134
diff changeset
87 return GetDotPath() / "anime" / "db.json";
45
4b05bc7668eb filesystem: split config path into dotpath and config, add anime db path
Paper <mrpapersonic@gmail.com>
parents: 44
diff changeset
88 }
4b05bc7668eb filesystem: split config path into dotpath and config, add anime db path
Paper <mrpapersonic@gmail.com>
parents: 44
diff changeset
89
15
cde8f67a7c7d *: update, megacommit :)
Paper <mrpapersonic@gmail.com>
parents: 11
diff changeset
90 } // namespace Filesystem