From 55a0cef4d13a7cda5a7a0fdd484d841a754008d6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 24 Jun 2021 23:29:03 +0200 Subject: [PATCH] The scripts and themes directories are now created during startup. Also cleaned up some startup messages which now also refer to ~/.emulationstation as the base directory. --- es-app/src/SystemData.cpp | 2 +- es-app/src/main.cpp | 58 +++++++++++++++++++++++++-------------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index ce99d2801..118981b67 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -573,7 +573,7 @@ std::string SystemData::getConfigPath(bool legacyWarning) Utils::FileSystem::getHomePath() + "/.emulationstation/custom_systems"; if (!Utils::FileSystem::exists(customSystemsDirectory)) { - LOG(LogInfo) << "Creating custom systems directory \"" << customSystemsDirectory << "\""; + LOG(LogInfo) << "Creating custom systems directory \"" << customSystemsDirectory << "\"..."; Utils::FileSystem::createDirectory(customSystemsDirectory); if (!Utils::FileSystem::exists(customSystemsDirectory)) { LOG(LogError) << "Couldn't create directory, permission problems?"; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index ac8bf3cef..017b3c85e 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -141,7 +141,7 @@ bool parseArgs(int argc, char* argv[]) for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "--home") == 0) { if (i >= argc - 1) { - std::cerr << "Error: No home path supplied with \'--home'.\n"; + std::cerr << "Error: No home path supplied with \'--home'\n"; return false; } #if defined(_WIN64) @@ -150,12 +150,12 @@ bool parseArgs(int argc, char* argv[]) #else if (!Utils::FileSystem::exists(argv[i + 1])) { #endif - std::cerr << "Error: Home path \'" << argv[i + 1] << "\' does not exist.\n"; + std::cerr << "Error: Home path \'" << argv[i + 1] << "\' does not exist\n"; return false; } if (Utils::FileSystem::isRegularFile(argv[i + 1])) { std::cerr << "Error: Home path \'" << argv[i + 1] << - "\' is a file and not a directory.\n"; + "\' is a file and not a directory\n"; return false; } Utils::FileSystem::setHomePath(argv[i + 1]); @@ -353,16 +353,16 @@ bool parseArgs(int argc, char* argv[]) return true; } -bool verifyHomeFolderExists() +bool checkApplicationBaseDirectory() { - // Make sure the config directory exists. + // Check that the application base directory exists, otherwise create it. std::string home = Utils::FileSystem::getHomePath(); - std::string configDir = home + "/.emulationstation"; - if (!Utils::FileSystem::exists(configDir)) { - std::cout << "Creating config directory \"" << configDir << "\"\n"; - Utils::FileSystem::createDirectory(configDir); - if (!Utils::FileSystem::exists(configDir)) { - std::cerr << "Config directory could not be created!\n"; + std::string applicationBase = home + "/.emulationstation"; + if (!Utils::FileSystem::exists(applicationBase)) { + std::cout << "First startup, creating base directory \"" << applicationBase << "\"\n"; + Utils::FileSystem::createDirectory(applicationBase); + if (!Utils::FileSystem::exists(applicationBase)) { + std::cerr << "Fatal error: Couldn't create directory, permission problems?\n"; return false; } } @@ -451,7 +451,7 @@ int main(int argc, char* argv[]) #endif // If ~/.emulationstation doesn't exist and cannot be created, bail. - if (!verifyHomeFolderExists()) + if (!checkApplicationBaseDirectory()) return 1; // Start the logger. @@ -484,10 +484,36 @@ int main(int argc, char* argv[]) LOG(LogInfo) << "Application version changed from previous startup, from \"" << applicationVersion << "\" to \"" << PROGRAM_VERSION_STRING << "\""; } + else { + LOG(LogInfo) << "Application version setting is blank, changing it to \"" << + PROGRAM_VERSION_STRING << "\""; + } Settings::getInstance()->setString("ApplicationVersion", PROGRAM_VERSION_STRING); Settings::getInstance()->saveFile(); } + // Create the themes directory in the application home folder. This is not required but + // is rather a convenience in case the user wants to add additional themes. + std::string themesDir = Utils::FileSystem::getHomePath() + "/.emulationstation/themes"; + if (!Utils::FileSystem::exists(themesDir)) { + LOG(LogInfo) << "Creating themes directory \"" << themesDir << "\"..."; + Utils::FileSystem::createDirectory(themesDir); + if (!Utils::FileSystem::exists(themesDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?\n"; + } + } + + // Create the scripts directory in the application home folder. This is only required + // for custom event scripts so it's also created as a convenience. + std::string scriptsDir = Utils::FileSystem::getHomePath() + "/.emulationstation/scripts"; + if (!Utils::FileSystem::exists(scriptsDir)) { + LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir << "\"..."; + Utils::FileSystem::createDirectory(scriptsDir); + if (!Utils::FileSystem::exists(scriptsDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?\n"; + } + } + Window window; SystemScreensaver screensaver(&window); MediaViewer mediaViewer(&window); @@ -560,14 +586,6 @@ int main(int argc, char* argv[]) } } - // Check if the media directory exists, otherwise log an information entry. - if (!Utils::FileSystem::isDirectory(FileData::getMediaDirectory()) || - Utils::FileSystem::isSymlink(FileData::getMediaDirectory())) { - LOG(LogInfo) << "Game media directory does not exist " - "(or is not a directory or a symlink):"; - LOG(LogInfo) << FileData::getMediaDirectory(); - } - // Generate controller events since we're done loading. SDL_GameControllerEventState(SDL_ENABLE);