From ebfce57cc11bf99e1fe4083fc6c5dfaf6141eafe Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke Date: Sat, 23 Aug 2014 21:03:44 +0200 Subject: [PATCH] Make sure that duplicate Addon install requests don't lead to duplicates in the installed_addon list --- src/addon/addon_manager.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/addon/addon_manager.cpp b/src/addon/addon_manager.cpp index 49ce4e42e2a..515359244c4 100644 --- a/src/addon/addon_manager.cpp +++ b/src/addon/addon_manager.cpp @@ -181,7 +181,27 @@ AddonManager::check_online() void AddonManager::install_addon(const AddonId& addon_id) { - log_debug << "installing addon " << addon_id << std::endl; + { // remove addon if it already exists + auto it = std::find_if(m_installed_addons.begin(), m_installed_addons.end(), + [&addon_id](const std::unique_ptr& addon) + { + return addon->get_id() == addon_id; + }); + if (it != m_installed_addons.end()) + { + log_debug << "reinstalling addon " << addon_id << std::endl; + if ((*it)->is_enabled()) + { + disable_addon((*it)->get_id()); + } + m_installed_addons.erase(it); + } + else + { + log_debug << "installing addon " << addon_id << std::endl; + } + } + Addon& repository_addon = get_repository_addon(addon_id); std::string install_filename = FileSystem::join(m_addon_directory, repository_addon.get_filename());