bool CAddonDatabase::GetAddon(const std::string& addonID, const AddonVersion& version, const std::string& repoId, AddonPtr& addon) { try { if (NULL == m_pDB.get()) return false; if (NULL == m_pDS.get()) return false; std::string sql = PrepareSQL( "SELECT addons.id FROM addons " "JOIN addonlinkrepo ON addonlinkrepo.idAddon=addons.id " "JOIN repo ON repo.id=addonlinkrepo.idRepo " "WHERE addons.addonID='%s' AND addons.version='%s' AND repo.addonID='%s'", addonID.c_str(), version.asString().c_str(), repoId.c_str()); m_pDS->query(sql.c_str()); if (m_pDS->eof()) return false; return GetAddon(m_pDS->fv(0).get_asInt(), addon); } catch (...) { CLog::Log(LOGERROR, "%s failed on addon %s", __FUNCTION__, addonID.c_str()); } return false; }
int CAddonDatabase::AddRepository(const std::string& id, const VECADDONS& addons, const std::string& checksum, const AddonVersion& version) { try { if (NULL == m_pDB.get()) return -1; if (NULL == m_pDS.get()) return -1; std::string sql; int idRepo = GetRepoChecksum(id,sql); if (idRepo > -1) DeleteRepository(idRepo); BeginTransaction(); CDateTime time = CDateTime::GetCurrentDateTime(); sql = PrepareSQL("insert into repo (id,addonID,checksum,lastcheck,version) values (NULL,'%s','%s','%s','%s')", id.c_str(), checksum.c_str(), time.GetAsDBDateTime().c_str(), version.asString().c_str()); m_pDS->exec(sql.c_str()); idRepo = (int)m_pDS->lastinsertid(); for (unsigned int i=0;i<addons.size();++i) AddAddon(addons[i],idRepo); CommitTransaction(); return idRepo; } catch (...) { CLog::Log(LOGERROR, "%s failed on repo '%s'", __FUNCTION__, id.c_str()); RollbackTransaction(); } return -1; }
void CAddonInstaller::Install(const std::string& addonId, const AddonVersion& version, const std::string& repoId) { CLog::Log(LOGDEBUG, "CAddonInstaller: installing '%s' version '%s' from repository '%s'", addonId.c_str(), version.asString().c_str(), repoId.c_str()); AddonPtr addon; CAddonDatabase database; if (!database.Open() || !database.GetAddon(addonId, version, repoId, addon)) return; AddonPtr repo; if (!CAddonMgr::GetInstance().GetAddon(repoId, repo, ADDON_REPOSITORY)) return; std::string hash = std::static_pointer_cast<CRepository>(repo)->GetAddonHash(addon); DoInstall(addon, std::static_pointer_cast<CRepository>(repo), hash, true, false); }
bool CActiveAEDSPAddon::CheckAPIVersion(void) { /* check the API version */ AddonVersion minVersion = AddonVersion(KODI_AE_DSP_MIN_API_VERSION); try { m_apiVersion = AddonVersion(m_pStruct->GetAudioDSPAPIVersion()); } XBMCCOMMONS_HANDLE_UNCHECKED catch (...) { LogUnhandledException("GetAudioDSPAPIVersion()"); return false; } if (!IsCompatibleAPIVersion(minVersion, m_apiVersion)) { CLog::Log(LOGERROR, "ActiveAE DSP - Add-on '%s' is using an incompatible API version. KODI minimum API version = '%s', add-on API version '%s'", Name().c_str(), minVersion.asString().c_str(), m_apiVersion.asString().c_str()); return false; } /* check the GUI API version */ AddonVersion guiVersion = AddonVersion("0.0.0"); minVersion = AddonVersion(KODI_GUILIB_MIN_API_VERSION); try { guiVersion = AddonVersion(m_pStruct->GetGUIAPIVersion()); } XBMCCOMMONS_HANDLE_UNCHECKED catch (...) { LogUnhandledException("GetGUIAPIVersion()"); return false; } if (!IsCompatibleGUIAPIVersion(minVersion, guiVersion)) { CLog::Log(LOGERROR, "ActiveAE DSP - Add-on '%s' is using an incompatible GUI API version. KODI minimum GUI API version = '%s', add-on GUI API version '%s'", Name().c_str(), minVersion.asString().c_str(), guiVersion.asString().c_str()); return false; } return true; }
bool CPVRClient::CheckAPIVersion(void) { /* check the API version */ AddonVersion minVersion = AddonVersion(XBMC_PVR_MIN_API_VERSION); try { m_apiVersion = AddonVersion(m_pStruct->GetPVRAPIVersion()); } catch (std::exception &e) { LogException(e, "GetPVRAPIVersion()"); return false; } if (!IsCompatibleAPIVersion(minVersion, m_apiVersion)) { CLog::Log(LOGERROR, "PVR - Add-on '%s' is using an incompatible API version. XBMC minimum API version = '%s', add-on API version '%s'", Name().c_str(), minVersion.asString().c_str(), m_apiVersion.asString().c_str()); return false; } /* check the GUI API version */ AddonVersion guiVersion = AddonVersion("0.0.0"); minVersion = AddonVersion(XBMC_GUI_MIN_API_VERSION); try { guiVersion = AddonVersion(m_pStruct->GetGUIAPIVersion()); } catch (std::exception &e) { LogException(e, "GetGUIAPIVersion()"); return false; } if (!IsCompatibleGUIAPIVersion(minVersion, guiVersion)) { CLog::Log(LOGERROR, "PVR - Add-on '%s' is using an incompatible GUI API version. XBMC minimum GUI API version = '%s', add-on GUI API version '%s'", Name().c_str(), minVersion.asString().c_str(), guiVersion.asString().c_str()); return false; } return true; }
bool CActiveAEDSPAddon::CheckAPIVersion(void) { /* check the API version */ AddonVersion minVersion = AddonVersion(KODI_AE_DSP_MIN_API_VERSION); m_apiVersion = AddonVersion(m_pStruct->GetAudioDSPAPIVersion()); if (!IsCompatibleAPIVersion(minVersion, m_apiVersion)) { CLog::Log(LOGERROR, "ActiveAE DSP - Add-on '%s' is using an incompatible API version. KODI minimum API version = '%s', add-on API version '%s'", Name().c_str(), minVersion.asString().c_str(), m_apiVersion.asString().c_str()); return false; } /* check the GUI API version */ AddonVersion guiVersion = AddonVersion(m_pStruct->GetGUIAPIVersion()); minVersion = AddonVersion(KODI_GUILIB_MIN_API_VERSION); if (!IsCompatibleGUIAPIVersion(minVersion, guiVersion)) { CLog::Log(LOGERROR, "ActiveAE DSP - Add-on '%s' is using an incompatible GUI API version. KODI minimum GUI API version = '%s', add-on GUI API version '%s'", Name().c_str(), minVersion.asString().c_str(), guiVersion.asString().c_str()); return false; } return true; }
bool CPVRClient::CheckAPIVersion(void) { /* check the API version */ AddonVersion minVersion = AddonVersion(XBMC_PVR_MIN_API_VERSION); m_apiVersion = AddonVersion(m_struct.GetPVRAPIVersion()); if (!IsCompatibleAPIVersion(minVersion, m_apiVersion)) { CLog::Log(LOGERROR, "PVR - Add-on '%s' is using an incompatible API version. XBMC minimum API version = '%s', add-on API version '%s'", Name().c_str(), minVersion.asString().c_str(), m_apiVersion.asString().c_str()); return false; } /* check the GUI API version */ AddonVersion guiVersion = AddonVersion("0.0.0"); minVersion = AddonVersion(KODI_GUILIB_MIN_API_VERSION); guiVersion = AddonVersion(m_struct.GetGUIAPIVersion()); /* Only do the check, if add-on depends on GUI API. */ if (!guiVersion.empty() && !IsCompatibleGUIAPIVersion(minVersion, guiVersion)) { CLog::Log(LOGERROR, "PVR - Add-on '%s' is using an incompatible GUI API version. XBMC minimum GUI API version = '%s', add-on GUI API version '%s'", Name().c_str(), minVersion.asString().c_str(), guiVersion.asString().c_str()); return false; } return true; }