void CAddonsDirectory::GenerateListing(CURL &path, VECADDONS& addons, CFileItemList &items, bool reposAsFolders) { CStdString xbmcPath = CSpecialProtocol::TranslatePath("special://xbmc/addons"); items.ClearItems(); CAddonDatabase db; db.Open(); for (unsigned i=0; i < addons.size(); i++) { AddonPtr addon = addons[i]; CFileItemPtr pItem; if (reposAsFolders && addon->Type() == ADDON_REPOSITORY) pItem = FileItemFromAddon(addon, "addons://", true); else pItem = FileItemFromAddon(addon, path.Get(), false); AddonPtr addon2; if (CAddonMgr::Get().GetAddon(addon->ID(),addon2)) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(305)); else if (db.IsOpen() && db.IsAddonDisabled(addon->ID())) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24023)); if (!addon->Props().broken.IsEmpty()) pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24098)); if (addon2 && addon2->Version() < addon->Version()) { pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24068)); pItem->SetProperty("Addon.UpdateAvail", true); } CAddonDatabase::SetPropertiesFromAddon(addon,pItem); items.Add(pItem); } db.Close(); }
bool CAddonInstallJob::OnPreInstall() { // check whether this is an active skin - we need to unload it if so if (g_guiSettings.GetString("lookandfeel.skin") == m_addon->ID()) { CApplicationMessenger::Get().ExecBuiltIn("UnloadSkin", true); return true; } 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(); CAddonMgr::Get().RemoveAddon(m_addon->ID()); // remove it return running; } if (m_addon->Type() == ADDON_PVRDLL) { // stop the pvr manager, so running pvr add-ons are stopped and closed PVR::CPVRManager::Get().Stop(); } return false; }