diff options
Diffstat (limited to 'xbmc/addons/AddonSystemSettings.cpp')
-rw-r--r-- | xbmc/addons/AddonSystemSettings.cpp | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/xbmc/addons/AddonSystemSettings.cpp b/xbmc/addons/AddonSystemSettings.cpp new file mode 100644 index 0000000..30f3aaf --- /dev/null +++ b/xbmc/addons/AddonSystemSettings.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2015-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "AddonSystemSettings.h" + +#include "ServiceBroker.h" +#include "addons/AddonInstaller.h" +#include "addons/AddonManager.h" +#include "addons/IAddon.h" +#include "addons/addoninfo/AddonInfo.h" +#include "addons/addoninfo/AddonType.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "guilib/LocalizeStrings.h" +#include "messaging/helpers/DialogHelper.h" +#include "messaging/helpers/DialogOKHelper.h" +#include "settings/Settings.h" +#include "settings/SettingsComponent.h" +#include "settings/lib/Setting.h" +#include "utils/StringUtils.h" +#include "utils/log.h" + +namespace ADDON +{ + +CAddonSystemSettings::CAddonSystemSettings() + : m_activeSettings{ + {AddonType::AUDIOENCODER, CSettings::SETTING_AUDIOCDS_ENCODER}, + {AddonType::RESOURCE_LANGUAGE, CSettings::SETTING_LOCALE_LANGUAGE}, + {AddonType::RESOURCE_UISOUNDS, CSettings::SETTING_LOOKANDFEEL_SOUNDSKIN}, + {AddonType::SCRAPER_ALBUMS, CSettings::SETTING_MUSICLIBRARY_ALBUMSSCRAPER}, + {AddonType::SCRAPER_ARTISTS, CSettings::SETTING_MUSICLIBRARY_ARTISTSSCRAPER}, + {AddonType::SCRAPER_MOVIES, CSettings::SETTING_SCRAPERS_MOVIESDEFAULT}, + {AddonType::SCRAPER_MUSICVIDEOS, CSettings::SETTING_SCRAPERS_MUSICVIDEOSDEFAULT}, + {AddonType::SCRAPER_TVSHOWS, CSettings::SETTING_SCRAPERS_TVSHOWSDEFAULT}, + {AddonType::SCREENSAVER, CSettings::SETTING_SCREENSAVER_MODE}, + {AddonType::SCRIPT_WEATHER, CSettings::SETTING_WEATHER_ADDON}, + {AddonType::SKIN, CSettings::SETTING_LOOKANDFEEL_SKIN}, + {AddonType::WEB_INTERFACE, CSettings::SETTING_SERVICES_WEBSKIN}, + {AddonType::VISUALIZATION, CSettings::SETTING_MUSICPLAYER_VISUALISATION}, + } +{} + +CAddonSystemSettings& CAddonSystemSettings::GetInstance() +{ + static CAddonSystemSettings inst; + return inst; +} + +void CAddonSystemSettings::OnSettingAction(const std::shared_ptr<const CSetting>& setting) +{ + if (setting->GetId() == CSettings::SETTING_ADDONS_MANAGE_DEPENDENCIES) + { + std::vector<std::string> params{"addons://dependencies/", "return"}; + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(WINDOW_ADDON_BROWSER, params); + } + else if (setting->GetId() == CSettings::SETTING_ADDONS_SHOW_RUNNING) + { + std::vector<std::string> params{"addons://running/", "return"}; + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(WINDOW_ADDON_BROWSER, params); + } + else if (setting->GetId() == CSettings::SETTING_ADDONS_REMOVE_ORPHANED_DEPENDENCIES) + { + using namespace KODI::MESSAGING::HELPERS; + + const auto removedItems = CAddonInstaller::GetInstance().RemoveOrphanedDepsRecursively(); + if (removedItems.size() > 0) + { + const auto message = + StringUtils::Format(g_localizeStrings.Get(36641), StringUtils::Join(removedItems, ", ")); + + ShowOKDialogText(CVariant{36640}, CVariant{message}); // "following orphaned were removed..." + } + else + { + ShowOKDialogText(CVariant{36640}, CVariant{36642}); // "no orphaned found / removed" + } + } +} + +void CAddonSystemSettings::OnSettingChanged(const std::shared_ptr<const CSetting>& setting) +{ + using namespace KODI::MESSAGING::HELPERS; + + if (setting->GetId() == CSettings::SETTING_ADDONS_ALLOW_UNKNOWN_SOURCES && + CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool( + CSettings::SETTING_ADDONS_ALLOW_UNKNOWN_SOURCES) && + ShowYesNoDialogText(19098, 36618) != DialogResponse::CHOICE_YES) + { + CServiceBroker::GetSettingsComponent()->GetSettings()->SetBool(CSettings::SETTING_ADDONS_ALLOW_UNKNOWN_SOURCES, false); + } +} + +bool CAddonSystemSettings::GetActive(AddonType type, AddonPtr& addon) +{ + auto it = m_activeSettings.find(type); + if (it != m_activeSettings.end()) + { + auto settingValue = CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(it->second); + return CServiceBroker::GetAddonMgr().GetAddon(settingValue, addon, type, + OnlyEnabled::CHOICE_YES); + } + return false; +} + +bool CAddonSystemSettings::SetActive(AddonType type, const std::string& addonID) +{ + auto it = m_activeSettings.find(type); + if (it != m_activeSettings.end()) + { + CServiceBroker::GetSettingsComponent()->GetSettings()->SetString(it->second, addonID); + return true; + } + return false; +} + +bool CAddonSystemSettings::IsActive(const IAddon& addon) +{ + AddonPtr active; + return GetActive(addon.Type(), active) && active->ID() == addon.ID(); +} + +bool CAddonSystemSettings::UnsetActive(const AddonInfoPtr& addon) +{ + auto it = m_activeSettings.find(addon->MainType()); + if (it == m_activeSettings.end()) + return true; + + auto setting = std::static_pointer_cast<CSettingString>(CServiceBroker::GetSettingsComponent()->GetSettings()->GetSetting(it->second)); + if (setting->GetValue() != addon->ID()) + return true; + + if (setting->GetDefault() == addon->ID()) + return false; // Cant unset defaults + + setting->Reset(); + return true; +} + +int CAddonSystemSettings::GetAddonAutoUpdateMode() const +{ + return CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt( + CSettings::SETTING_ADDONS_AUTOUPDATES); +} + +AddonRepoUpdateMode CAddonSystemSettings::GetAddonRepoUpdateMode() const +{ + const int updateMode = CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt( + CSettings::SETTING_ADDONS_UPDATEMODE); + return static_cast<AddonRepoUpdateMode>(updateMode); +} +} |