bool CAddonUnInstallJob::DoWork() { if (m_addon->Type() == ADDON_PVRDLL) { // stop the pvr manager, so running pvr add-ons are stopped and closed PVR::CPVRManager::Get().Stop(); } if (m_addon->Type() == ADDON_SERVICE) { boost::shared_ptr<CService> service = boost::dynamic_pointer_cast<CService>(m_addon); if (service) service->Stop(); } AddonPtr repoPtr = CAddonInstallJob::GetRepoForAddon(m_addon); RepositoryPtr therepo = boost::dynamic_pointer_cast<CRepository>(repoPtr); if (therepo && !therepo->Props().libname.empty()) { CFileItemList dummy; CStdString s = StringUtils::Format("plugin://%s/?action=uninstall" "&package=%s", therepo->ID().c_str(), m_addon->ID().c_str()); if (!CDirectory::GetDirectory(s, dummy)) return false; } else { if (!CAddonInstallJob::DeleteAddon(m_addon->Path())) return false; } OnPostUnInstall(); return true; }
bool CAddonUnInstallJob::DoWork() { ADDON::OnPreUnInstall(m_addon); //TODO: looks broken. it just calls the repo with the most recent version, not the owner RepositoryPtr repoPtr; CAddonInstaller::GetRepoForAddon(m_addon->ID(), repoPtr); if (repoPtr != NULL && !repoPtr->Props().libname.empty()) { CFileItemList dummy; std::string s = StringUtils::Format("plugin://%s/?action=uninstall&package=%s", repoPtr->ID().c_str(), m_addon->ID().c_str()); if (!CDirectory::GetDirectory(s, dummy)) return false; } else { //Unregister addon with the manager to ensure nothing tries //to interact with it while we are uninstalling. CAddonMgr::GetInstance().UnregisterAddon(m_addon->ID()); if (!DeleteAddon(m_addon->Path())) { CLog::Log(LOGERROR, "CAddonUnInstallJob[%s]: could not delete addon data.", m_addon->ID().c_str()); return false; } } ClearFavourites(); AddonPtr addon; CAddonDatabase database; // try to get the addon object from the repository as the local one does not exist anymore // if that doesn't work fall back to the local one if (!database.Open() || !database.GetAddon(m_addon->ID(), addon) || addon == NULL) addon = m_addon; CEventLog::GetInstance().Add(EventPtr(new CAddonManagementEvent(addon, 24144))); CAddonMgr::GetInstance().OnPostUnInstall(m_addon->ID()); database.OnPostUnInstall(m_addon->ID()); ADDON::OnPostUnInstall(m_addon); return true; }
bool CAddonUnInstallJob::DoWork() { m_addon->OnPreUnInstall(); AddonPtr repoPtr = CAddonInstallJob::GetRepoForAddon(m_addon); RepositoryPtr therepo = boost::dynamic_pointer_cast<CRepository>(repoPtr); if (therepo && !therepo->Props().libname.empty()) { CFileItemList dummy; std::string s = StringUtils::Format("plugin://%s/?action=uninstall" "&package=%s", therepo->ID().c_str(), m_addon->ID().c_str()); if (!CDirectory::GetDirectory(s, dummy)) return false; } else { if (!CAddonInstallJob::DeleteAddon(m_addon->Path())) return false; } OnPostUnInstall(); return true; }