Skip to content

Commit

Permalink
Merge pull request #207 from TheMorc/macosplatform
Browse files Browse the repository at this point in the history
add hackish macOS detection for home folder, resources and cache
  • Loading branch information
ouwou authored Aug 25, 2023
2 parents eb62406 + 52e6167 commit 2378c78
Showing 1 changed file with 71 additions and 6 deletions.
77 changes: 71 additions & 6 deletions src/platform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ std::string Platform::FindResourceFolder() {
}
}

puts("cant find a resources folder, will try to load from cwd");
spdlog::get("discord")->warn("cant find a resources folder, will try to load from cwd");
found_path = ".";
found = true;
return found_path;
Expand Down Expand Up @@ -133,7 +133,7 @@ std::string Platform::FindConfigFile() {
}

// fallback to cwd if cant find + cant make in ~/.config
puts("can't find configuration file!");
spdlog::get("discord")->warn("can't find configuration file!");
return "./abaddon.ini";
}

Expand All @@ -147,26 +147,91 @@ std::string Platform::FindStateCacheFolder() {
if (util::IsFolder(home_path))
return home_path;
}
puts("can't find cache folder!");
spdlog::get("discord")->warn("can't find cache folder!");
return ".";
}

#elif defined(__APPLE__)
#include <CoreFoundation/CoreFoundation.h>
#include <pwd.h>
#include <sys/param.h>
#include <sys/stat.h>
std::string Platform::FindResourceFolder() {
static std::string found_path;
static bool found = false;
if (found) return found_path;

CFURLRef resourceURL = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
char resourcePath[PATH_MAX];
if (CFURLGetFileSystemRepresentation(resourceURL, true, (UInt8 *)resourcePath, PATH_MAX)) {
if (resourceURL != NULL) {
CFRelease(resourceURL);
}
found_path = resourcePath;
found = true;
return found_path;
}

spdlog::get("discord")->warn("cant find a resources folder, will try to load from cwd");
found_path = ".";
found = true;
return found_path;
}

std::string Platform::FindConfigFile() {
const auto cfg = std::getenv("ABADDON_CONFIG");
if (cfg != nullptr) return cfg;

passwd *home = getpwuid(getuid());
const char *homeDir = home->pw_dir;

char appSupportPath[PATH_MAX];
snprintf(appSupportPath, sizeof(appSupportPath), "%s/Library/Application Support", homeDir);

char homefolder_path[PATH_MAX];
snprintf(homefolder_path, sizeof(homefolder_path), "%s/%s", appSupportPath, "com.github.uowuo.abaddon");

if (mkdir(homefolder_path, 0755) == 0) {
spdlog::get("discord")->warn("created Application Support dir");
}

char home_path[PATH_MAX];
snprintf(home_path, sizeof(home_path), "%s/%s", homefolder_path, "/abaddon.ini");

return home_path;
}

std::string Platform::FindStateCacheFolder() {

passwd *home = getpwuid(getuid());
const char *homeDir = home->pw_dir;

char appSupportPath[PATH_MAX];
snprintf(appSupportPath, sizeof(appSupportPath), "%s/Library/Application Support", homeDir);

char home_path[PATH_MAX];
snprintf(home_path, sizeof(home_path), "%s/%s", appSupportPath, "com.github.uowuo.abaddon");

return home_path;
}


#else
std::string Platform::FindResourceFolder() {
puts("unknown OS, trying to load resources from cwd");
spdlog::get("discord")->warn("unknown OS, trying to load resources from cwd");
return ".";
}

std::string Platform::FindConfigFile() {
const auto x = std::getenv("ABADDON_CONFIG");
if (x != nullptr)
return x;
puts("unknown OS, trying to load config from cwd");
spdlog::get("discord")->warn("unknown OS, trying to load config from cwd");
return "./abaddon.ini";
}

std::string Platform::FindStateCacheFolder() {
puts("unknown OS, setting state cache folder to cwd");
spdlog::get("discord")->warn("unknown OS, setting state cache folder to cwd");
return ".";
}
#endif

0 comments on commit 2378c78

Please sign in to comment.