void AddonManager::check_for_langpack_updates() { const std::string& language = g_dictionary_manager->get_language().get_language(); if(language == "en") return; try { check_online(); try { const std::string& addon_id = "langpack-" + language; log_debug << "Looking for language addon with ID " << addon_id << "..." << std::endl; Addon& langpack = get_repository_addon(addon_id); try { auto& installed_langpack = get_installed_addon(addon_id); if (installed_langpack.get_md5() == langpack.get_md5() || installed_langpack.get_version() > langpack.get_version()) { log_debug << "Language addon " << addon_id << " is already the latest version." << std::endl; return; } // Langpack update available. Let's install it! install_addon(addon_id); enable_addon(addon_id); } catch(const std::exception& err) { log_debug << "Language addon " << addon_id << " is not installed. Installing..." << std::endl; install_addon(addon_id); enable_addon(addon_id); } } catch(std::exception& err) { log_debug << "Language addon for current locale not found." << std::endl; } } catch(...) { // If anything fails here, just silently ignore. } }
AddonManager::AddonManager(const std::string& addon_directory, std::vector<Config::Addon>& addon_config) : m_downloader(), m_addon_directory(addon_directory), m_repository_url("https://raw.githubusercontent.com/SuperTux/addons/master/index-0_5.nfo"), m_addon_config(addon_config), m_installed_addons(), m_repository_addons(), m_has_been_updated(false), m_transfer_status() { if(!PHYSFS_mkdir(m_addon_directory.c_str())) { std::ostringstream msg; msg << "Couldn't create directory for addons '" << m_addon_directory << "': " << PHYSFS_getLastError(); throw std::runtime_error(msg.str()); } add_installed_addons(); // FIXME: We should also restore the order here for(auto& addon : m_addon_config) { if (addon.enabled) { try { enable_addon(addon.id); } catch(const std::exception& err) { log_warning << "failed to enable addon from config: " << err.what() << std::endl; } } } if(PHYSFS_exists(ADDON_INFO_PATH)) { try { m_repository_addons = parse_addon_infos(ADDON_INFO_PATH); } catch(const std::exception& err) { log_warning << "parsing repository.nfo failed: " << err.what() << std::endl; } } else { log_info << "repository.nfo doesn't exist, not loading" << std::endl; } if (!g_config->repository_url.empty() && g_config->repository_url != m_repository_url) { m_repository_url = g_config->repository_url; } }
AddonManager::AddonManager(const std::string& addon_directory, std::vector<Config::Addon>& addon_config) : m_downloader(), m_addon_directory(addon_directory), m_repository_url("https://raw.githubusercontent.com/SuperTux/addons/master/index-0_4_0.nfo"), m_addon_config(addon_config), m_installed_addons(), m_repository_addons(), m_has_been_updated(false), m_transfer_status() { PHYSFS_mkdir(m_addon_directory.c_str()); add_installed_addons(); // FIXME: We should also restore the order here for(auto& addon : m_addon_config) { if (addon.enabled) { try { enable_addon(addon.id); } catch(const std::exception& err) { log_warning << "failed to enable addon from config: " << err.what() << std::endl; } } } if(PHYSFS_exists(ADDON_INFO_PATH)) { try { m_repository_addons = parse_addon_infos(ADDON_INFO_PATH); } catch(const std::exception& err) { log_warning << "parsing repository.nfo failed: " << err.what() << std::endl; } } else { log_info << "repository.nfo doesn't exist, not loading" << std::endl; } }