[pvr] reuse some code by adding a QueueJob() method
authorSam Stenvall <neggelandia@gmail.com>
Tue, 19 Nov 2013 13:32:50 +0000 (15:32 +0200)
committerSam Stenvall <neggelandia@gmail.com>
Tue, 3 Dec 2013 09:43:25 +0000 (11:43 +0200)
xbmc/pvr/PVRManager.cpp
xbmc/pvr/PVRManager.h

index bd6b262..6fec991 100644 (file)
@@ -1400,76 +1400,46 @@ bool CPVRManager::IsJobPending(const char *strJobName) const
   return bReturn;
 }
 
-void CPVRManager::TriggerEpgsCreate(void)
+void CPVRManager::QueueJob(const char *strJobName, CJob *job, bool bIgnorePending /* = false */)
 {
   CSingleLock lock(m_critSectionTriggers);
-  if (IsJobPending("pvr-create-epgs"))
+  if (!bIgnorePending && IsJobPending(strJobName))
     return;
 
-  m_pendingUpdates.push_back(new CPVREpgsCreateJob());
+  m_pendingUpdates.push_back(job);
 
   lock.Leave();
   m_triggerEvent.Set();
 }
 
-void CPVRManager::TriggerRecordingsUpdate(void)
+void CPVRManager::TriggerEpgsCreate(void)
 {
-  CSingleLock lock(m_critSectionTriggers);
-  if (!IsStarted() || IsJobPending("pvr-update-recordings"))
-    return;
-
-  m_pendingUpdates.push_back(new CPVRRecordingsUpdateJob());
+  QueueJob("pvr-create-epgs", new CPVREpgsCreateJob());
+}
 
-  lock.Leave();
-  m_triggerEvent.Set();
+void CPVRManager::TriggerRecordingsUpdate(void)
+{
+  QueueJob("pvr-update-recordings", new CPVRRecordingsUpdateJob());
 }
 
 void CPVRManager::TriggerTimersUpdate(void)
 {
-  CSingleLock lock(m_critSectionTriggers);
-  if (!IsStarted() || IsJobPending("pvr-update-timers"))
-    return;
-
-  m_pendingUpdates.push_back(new CPVRTimersUpdateJob());
-
-  lock.Leave();
-  m_triggerEvent.Set();
+  QueueJob("pvr-update-timers", new CPVRTimersUpdateJob());
 }
 
 void CPVRManager::TriggerChannelsUpdate(void)
 {
-  CSingleLock lock(m_critSectionTriggers);
-  if (!IsStarted() || IsJobPending("pvr-update-channels"))
-    return;
-
-  m_pendingUpdates.push_back(new CPVRChannelsUpdateJob());
-
-  lock.Leave();
-  m_triggerEvent.Set();
+  QueueJob("pvr-update-channels", new CPVRChannelsUpdateJob());
 }
 
 void CPVRManager::TriggerChannelGroupsUpdate(void)
 {
-  CSingleLock lock(m_critSectionTriggers);
-  if (!IsStarted() || IsJobPending("pvr-update-channelgroups"))
-    return;
-
-  m_pendingUpdates.push_back(new CPVRChannelGroupsUpdateJob());
-
-  lock.Leave();
-  m_triggerEvent.Set();
+  QueueJob("pvr-update-channelgroups", new CPVRChannelGroupsUpdateJob());
 }
 
 void CPVRManager::TriggerSaveChannelSettings(void)
 {
-  CSingleLock lock(m_critSectionTriggers);
-  if (!IsStarted() || IsJobPending("pvr-save-channelsettings"))
-    return;
-
-  m_pendingUpdates.push_back(new CPVRChannelSettingsSaveJob());
-
-  lock.Leave();
-  m_triggerEvent.Set();
+  QueueJob("pvr-save-channelsettings", new CPVRChannelSettingsSaveJob());
 }
 
 void CPVRManager::ExecutePendingJobs(void)
index 5eb3195..b4f466f 100644 (file)
@@ -607,6 +607,16 @@ namespace PVR
 
     bool IsJobPending(const char *strJobName) const;
 
+    /*!
+     * @brief Adds the job to the list of pending jobs. If bIgnorePending is set
+     * to true the job will be added even if there's an identical job already
+     * queued
+     * @param strJobName the name of the job
+     * @param bIgnorePending whether to ignore previously queued identical jobs
+     * @param job the job
+     */
+    void QueueJob(const char *strJobName, CJob *job, bool bIgnorePending = false);
+
     ManagerState GetState(void) const;
 
     void SetState(ManagerState state);