[pvr] mark add-ons that are not allowed to be updated as outdated in the pvrmanager
authorLars Op den Kamp <lars@opdenkamp.eu>
Wed, 19 Dec 2012 01:59:52 +0000 (02:59 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Wed, 19 Dec 2012 02:05:18 +0000 (03:05 +0100)
xbmc/addons/Repository.cpp
xbmc/pvr/PVRManager.cpp
xbmc/pvr/PVRManager.h

index 6bfcd1d..930fafd 100644 (file)
@@ -228,8 +228,10 @@ bool CRepositoryUpdateJob::DoWork()
         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)
index 2892953..32f3636 100644 (file)
@@ -95,6 +95,15 @@ bool CPVRManager::InstallAddonAllowed(const std::string& strAddonId) const
       (!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);
@@ -110,6 +119,8 @@ void CPVRManager::Cleanup(void)
 
   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);
index d325087..734beb7 100644 (file)
@@ -23,6 +23,7 @@
 #include "utils/JobManager.h"
 #include "threads/Event.h"
 #include "addons/include/xbmc_pvr_types.h"
+#include <map>
 
 class CGUIDialogProgressBarHandle;
 class CStopWatch;
@@ -135,6 +136,13 @@ namespace PVR
     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.
      */
@@ -561,6 +569,7 @@ namespace PVR
     ManagerState                    m_managerState;
     CStopWatch                     *m_parentalTimer;
     bool                            m_bOpenPVRWindow;
+    std::map<std::string, std::string> m_outdatedAddons;
   };
 
   class CPVRRecordingsUpdateJob : public CJob