Mercurial > minori
comparison src/core/filesystem.cc @ 250:c130f47f6f48
*: many many changes
e.g. the search page is actually implemented now!
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Sun, 04 Feb 2024 21:17:17 -0500 |
parents | 2f5a9247e501 |
children | 862d0d8619f6 |
comparison
equal
deleted
inserted
replaced
249:6b2441c776dd | 250:c130f47f6f48 |
---|---|
1 #ifdef WIN32 | |
2 # include <shlobj.h> | |
3 #elif defined(MACOSX) | |
4 # include "sys/osx/filesystem.h" | |
5 #elif defined(__linux__) | |
6 # include <pwd.h> | |
7 # include <sys/types.h> | |
8 #endif | |
9 | |
10 #ifndef WIN32 | |
11 # include <errno.h> | |
12 # include <unistd.h> | |
13 # include <sys/stat.h> | |
14 #endif | |
15 | |
16 #include "core/filesystem.h" | 1 #include "core/filesystem.h" |
17 #include "core/config.h" | 2 #include "core/config.h" |
18 #include "core/strings.h" | 3 #include "core/strings.h" |
4 | |
5 #include <QStandardPaths> | |
6 | |
19 #include <filesystem> | 7 #include <filesystem> |
20 #include <limits.h> | |
21 | 8 |
22 namespace Filesystem { | 9 namespace Filesystem { |
23 | 10 |
24 /* this runs fs::create_directories() on the | 11 /* this runs fs::create_directories() on the |
25 PARENT directory. */ | 12 PARENT directory. */ |
31 if (!std::filesystem::exists(parent)) | 18 if (!std::filesystem::exists(parent)) |
32 std::filesystem::create_directories(parent); | 19 std::filesystem::create_directories(parent); |
33 } | 20 } |
34 | 21 |
35 std::filesystem::path GetDotPath() { | 22 std::filesystem::path GetDotPath() { |
23 /* | |
24 * Windows: ~/AppData/Roaming/Minori | |
25 * macOS: ~/Library/Application Support/Minori | |
26 * ...: ~/.config/minori | |
27 * | |
28 * FIXME: are windows and mac properly cased? | |
29 */ | |
36 #ifdef WIN32 | 30 #ifdef WIN32 |
37 std::filesystem::path path; | 31 return Strings::ToUtf8String(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); |
38 wchar_t* buf; | 32 #else |
39 | 33 return Strings::ToUtf8String(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation)); |
40 if (SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, NULL, &buf) == S_OK) | 34 #endif |
41 path = buf; | |
42 else | |
43 return std::filesystem::path(); | |
44 | |
45 CoTaskMemFree(buf); | |
46 | |
47 return path / CONFIG_DIR; | |
48 #elif defined(MACOSX) | |
49 std::string appsupport; | |
50 if (!osx::GetApplicationSupportDirectory(appsupport)) | |
51 return ""; | |
52 | |
53 return std::filesystem::path(appsupport) / CONFIG_DIR; | |
54 #else // just assume POSIX | |
55 std::filesystem::path path; | |
56 const char* home = getenv("HOME"); | |
57 | |
58 # ifdef __linux__ | |
59 if (!home) | |
60 home = getpwuid(getuid())->pw_dir; | |
61 # endif // __linux__ | |
62 | |
63 /* only do this if the home directory was really found */ | |
64 if (home) | |
65 return std::filesystem::path(home) / ".config" / CONFIG_DIR; | |
66 else | |
67 return std::filesystem::path(); | |
68 #endif // !WIN32 && !MACOSX | |
69 } | 35 } |
70 | 36 |
71 std::filesystem::path GetConfigPath() { | 37 std::filesystem::path GetConfigPath() { |
72 return GetDotPath() / CONFIG_NAME; | 38 return GetDotPath() / CONFIG_NAME; |
73 } | 39 } |