if (URIUtils::IsInternetStream(addons[i]->Path()))
referer.Format("Referer=%s-%s.zip",addon->ID().c_str(),addon->Version().c_str());
- if (addons[i]->Type() != ADDON_PVRDLL ||
- PVR::CPVRManager::Get().InstallAddonAllowed(addons[i]->ID()))
+ if (addons[i]->Type() == ADDON_PVRDLL &&
+ !PVR::CPVRManager::Get().InstallAddonAllowed(addons[i]->ID()))
+ PVR::CPVRManager::Get().MarkAsOutdated(addon->ID(), referer);
+ else
CAddonInstaller::Get().Install(addon->ID(), true, referer);
}
else if (g_settings.m_bAddonNotifications)
(!g_windowManager.IsWindowActive(WINDOW_PVR) && !IsPlaying());
}
+void CPVRManager::MarkAsOutdated(const std::string& strAddonId, const std::string& strReferer)
+{
+ if (IsStarted() && g_settings.m_bAddonAutoUpdate)
+ {
+ CSingleLock lock(m_critSection);
+ m_outdatedAddons.insert(make_pair<string, string>(strAddonId, strReferer));
+ }
+}
+
void CPVRManager::Cleanup(void)
{
CSingleLock lock(m_critSection);
m_currentFile = NULL;
m_bIsSwitchingChannels = false;
+ m_outdatedAddons.clear();
+ m_bOpenPVRWindow = false;
for (unsigned int iJobPtr = 0; iJobPtr < m_pendingUpdates.size(); iJobPtr++)
delete m_pendingUpdates.at(iJobPtr);
#include "utils/JobManager.h"
#include "threads/Event.h"
#include "addons/include/xbmc_pvr_types.h"
+#include <map>
class CGUIDialogProgressBarHandle;
class CStopWatch;
bool InstallAddonAllowed(const std::string& strAddonId) const;
/*!
+ * @brief Mark an add-on as outdated so it will be upgrade when it's possible again
+ * @param strAddonId The add-on to mark as outdated
+ * @param strReferer The referer to use when downloading
+ */
+ void MarkAsOutdated(const std::string& strAddonId, const std::string& strReferer);
+
+ /*!
* @brief Get the TV database.
* @return The TV database.
*/
ManagerState m_managerState;
CStopWatch *m_parentalTimer;
bool m_bOpenPVRWindow;
+ std::map<std::string, std::string> m_outdatedAddons;
};
class CPVRRecordingsUpdateJob : public CJob