if (m_addon->Type() == ADDON_SERVICE)
{
+ CAddonDatabase database;
+ database.Open();
+ bool running = !database.IsAddonDisabled(m_addon->ID()); //grab a current state
+ database.DisableAddon(m_addon->ID(),false); // enable it so we can remove it??
+ // regrab from manager to have the correct path set
AddonPtr addon;
ADDON::CAddonMgr::Get().GetAddon(m_addon->ID(), addon);
boost::shared_ptr<CService> service = boost::dynamic_pointer_cast<CService>(addon);
if (service)
service->Stop();
- return true;
+ CAddonMgr::Get().RemoveAddon(m_addon->ID()); // remove it
+ return running;
}
if (m_addon->Type() == ADDON_PVRDLL)
if (m_addon->Type() == ADDON_SERVICE)
{
- // regrab from manager to have the correct path set
- AddonPtr addon;
- CAddonMgr::Get().GetAddon(m_addon->ID(), addon);
- boost::shared_ptr<CService> service = boost::dynamic_pointer_cast<CService>(addon);
- if (service)
- service->Start();
+ CAddonDatabase database;
+ database.Open();
+ database.DisableAddon(m_addon->ID(),!reloadAddon); //return it into state it was before OnPreInstall()
+ if (reloadAddon) // reload/start it if it was running
+ {
+ // regrab from manager to have the correct path set
+ AddonPtr addon;
+ CAddonMgr::Get().GetAddon(m_addon->ID(), addon);
+ boost::shared_ptr<CService> service = boost::dynamic_pointer_cast<CService>(addon);
+ if (service)
+ service->Start();
+ }
}
if (m_addon->Type() == ADDON_REPOSITORY)
CStdString path = "special://home/addons/packages/";
path += m_localAddon->ID()+"-"+m_rollbackVersions[choice]+".zip";
// needed as cpluff won't downgrade
- CAddonMgr::Get().RemoveAddon(m_localAddon->ID());
+ if (!m_localAddon->IsType(ADDON_SERVICE))
+ //we will handle this for service addons in CAddonInstallJob::OnPostInstall
+ CAddonMgr::Get().RemoveAddon(m_localAddon->ID());
CAddonInstaller::Get().InstallFromZip(path);
database.RemoveAddonFromBlacklist(m_localAddon->ID(),m_rollbackVersions[choice]);
Close();