Mercurial > minori
comparison src/core/filesystem.cpp @ 61:327568ad9be9
core/fs: finish class-ification of paths
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Fri, 29 Sep 2023 15:52:31 -0400 |
parents | d417e9381ca5 |
children | 4c6dd5999b39 |
comparison
equal
deleted
inserted
replaced
60:d417e9381ca5 | 61:327568ad9be9 |
---|---|
20 #include "core/config.h" | 20 #include "core/config.h" |
21 #include <limits.h> | 21 #include <limits.h> |
22 | 22 |
23 namespace Filesystem { | 23 namespace Filesystem { |
24 | 24 |
25 /* FIXME: This is a very C-like way of doing this. | 25 Path::Path() { _path = ""; } |
26 Make a path class. */ | 26 Path::Path(const std::string& path) { _path = path; } |
27 class Path { | 27 Path::Path(const Path& path) { _path = path.GetPath(); } |
28 public: | |
29 Path(); | |
30 Path(std::string path); | |
31 Path(const Path& path); | |
32 bool CreateDirectories() const; | |
33 bool Exists() const; | |
34 std::string Basename(); | |
35 std::string Stem(); | |
36 std::string Extension(); | |
37 Path GetParent(); | |
38 void SetPath(); | |
39 | |
40 private: | |
41 std::string _path; | |
42 } | |
43 | 28 |
44 bool Path::CreateDirectories() const { | 29 bool Path::CreateDirectories() const { |
45 std::string temp = ""; | 30 std::string temp = ""; |
46 size_t start; | 31 size_t start; |
47 size_t end = 0; | 32 size_t end = 0; |
72 return stat(_path.c_str(), &st) == 0; | 57 return stat(_path.c_str(), &st) == 0; |
73 #endif | 58 #endif |
74 } | 59 } |
75 | 60 |
76 std::string Path::Basename() const { | 61 std::string Path::Basename() const { |
77 return _path.substr(0, path.find_last_of(DELIM)); | 62 return _path.substr(0, _path.find_last_of(DELIM)); |
78 } | 63 } |
79 | 64 |
80 std::string Path::Stem() const { | 65 std::string Path::Stem() const { |
81 std::string basename = Basename(); | 66 std::string basename = Basename(); |
82 return basename.substr(0, basename.find_last_of(".")); | 67 return basename.substr(0, basename.find_last_of(".")); |
83 } | 68 } |
84 | 69 |
85 std::string Path::Extension() const { | 70 std::string Path::Extension() const { |
86 std::string basename = Basename(_path); | 71 std::string basename = Basename(); |
87 return basename.substr(basename.find_last_of("."), basename.end()); | 72 return basename.substr(basename.find_last_of("."), basename.length()); |
88 } | 73 } |
89 | 74 |
90 std::string Path::GetParent() const { | 75 Path Path::GetParent() const { |
91 return _path.substr(0, _path.find_last_of(DELIM)); | 76 return _path.substr(0, _path.find_last_of(DELIM)); |
92 } | 77 } |
93 | 78 |
94 std::string GetDotPath(void) { | 79 void Path::SetPath(const std::string& path) { |
80 _path = path; | |
81 } | |
82 | |
83 std::string Path::GetPath() const { | |
84 return _path; | |
85 } | |
86 | |
87 Path GetDotPath(void) { | |
95 std::string ret = ""; | 88 std::string ret = ""; |
96 #ifdef WIN32 | 89 #ifdef WIN32 |
97 char buf[PATH_MAX + 1]; | 90 char buf[PATH_MAX + 1]; |
98 if (SHGetFolderPathAndSubDir(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, CONFIG_DIR, buf) == S_OK) { | 91 if (SHGetFolderPathAndSubDir(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, CONFIG_DIR, buf) == S_OK) { |
99 ret += buf; | 92 ret += buf; |
112 ret += DELIM ".config" DELIM CONFIG_DIR; | 105 ret += DELIM ".config" DELIM CONFIG_DIR; |
113 #endif // !WIN32 && !MACOSX | 106 #endif // !WIN32 && !MACOSX |
114 return ret; | 107 return ret; |
115 } | 108 } |
116 | 109 |
117 std::string GetConfigPath(void) { | 110 Path GetConfigPath(void) { |
118 std::string ret = ""; | 111 std::string ret = ""; |
119 ret += GetDotPath(); | 112 ret += GetDotPath().GetPath(); |
120 if (!ret.empty()) | 113 if (!ret.empty()) |
121 ret += DELIM CONFIG_NAME; | 114 ret += DELIM CONFIG_NAME; |
122 return ret; | 115 return ret; |
123 } | 116 } |
124 | 117 |
125 std::string GetAnimeDBPath(void) { | 118 Path GetAnimeDBPath(void) { |
126 std::string ret = ""; | 119 std::string ret = ""; |
127 ret += GetDotPath(); | 120 ret += GetDotPath().GetPath(); |
128 if (!ret.empty()) | 121 if (!ret.empty()) |
129 ret += DELIM "anime" DELIM "db.json"; | 122 ret += DELIM "anime" DELIM "db.json"; |
130 return ret; | 123 return ret; |
131 } | 124 } |
132 | 125 |