bool ResourceManager::setupWriteDir(const std::string& product, const std::string& app) {
#ifdef ANDROID
const char* localDir = g_androidState->activity->internalDataPath;
#else
const char* localDir = PHYSFS_getPrefDir(product.c_str(), app.c_str());
#endif
if (!localDir) {
g_logger.fatal(stdext::format("Unable to get local dir, error: %s", PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())));
return false;
}
if (!PHYSFS_mount(localDir, NULL, 0)) {
g_logger.fatal(stdext::format("Unable to mount local directory '%s': %s", localDir, PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())));
return false;
}
if (!PHYSFS_setWriteDir(localDir)) {
g_logger.fatal(stdext::format("Unable to set write dir '%s': %s", localDir, PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())));
return false;
}
#ifndef ANDROID
m_writeDir = std::filesystem::path(std::filesystem::u8path(localDir));
#endif
return true;
}