[pvr] observe PVRManager state to trigger epg create
authorxhaggi <sascha.woo@gmail.com>
Mon, 9 Dec 2013 14:25:11 +0000 (15:25 +0100)
committerxhaggi <sascha.woo@gmail.com>
Tue, 10 Dec 2013 18:07:39 +0000 (19:07 +0100)
xbmc/pvr/PVRManager.cpp
xbmc/pvr/PVRManager.h
xbmc/pvr/channels/PVRChannelGroupInternal.cpp
xbmc/pvr/channels/PVRChannelGroupInternal.h
xbmc/utils/Observer.h

index 81d81c2..d35df1c 100644 (file)
@@ -393,8 +393,13 @@ ManagerState CPVRManager::GetState(void) const
 
 void CPVRManager::SetState(ManagerState state) 
 {
-  CSingleLock lock(m_managerStateMutex);
-  m_managerState = state;
+  {
+    CSingleLock lock(m_managerStateMutex);
+    m_managerState = state;
+    SetChanged();
+  }
+
+  NotifyObservers(ObservableMessageManagerStateChanged);
 }
 
 void CPVRManager::Process(void)
index 7038410..5359c05 100644 (file)
@@ -26,6 +26,7 @@
 #include "threads/Event.h"
 #include "threads/Thread.h"
 #include "utils/JobManager.h"
+#include "utils/Observer.h"
 
 class CGUIDialogProgressBarHandle;
 class CStopWatch;
@@ -83,7 +84,7 @@ namespace PVR
 
   typedef boost::shared_ptr<PVR::CPVRChannelGroup> CPVRChannelGroupPtr;
 
-  class CPVRManager : public ISettingCallback, private CThread
+  class CPVRManager : public ISettingCallback, private CThread, public Observable
   {
     friend class CPVRClients;
 
index 0bb07d2..ff06d48 100644 (file)
@@ -53,6 +53,7 @@ CPVRChannelGroupInternal::CPVRChannelGroupInternal(const CPVRChannelGroup &group
 CPVRChannelGroupInternal::~CPVRChannelGroupInternal(void)
 {
   Unload();
+  g_PVRManager.UnregisterObserver(this);
 }
 
 bool CPVRChannelGroupInternal::Load(void)
@@ -60,7 +61,8 @@ bool CPVRChannelGroupInternal::Load(void)
   if (CPVRChannelGroup::Load())
   {
     UpdateChannelPaths();
-    g_PVRManager.TriggerEpgsCreate();
+    g_PVRManager.RegisterObserver(this);
+      
     return true;
   }
 
@@ -385,3 +387,11 @@ bool CPVRChannelGroupInternal::CreateChannelEpgs(bool bForce /* = false */)
 
   return true;
 }
+
+void CPVRChannelGroupInternal::Notify(const Observable &obs, const ObservableMessage msg)
+{
+  if (msg == ObservableMessageManagerStateChanged)
+  {
+    g_PVRManager.TriggerEpgsCreate();
+  }
+}
index cba4180..10f728a 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include "PVRChannelGroup.h"
+#include "utils/Observer.h"
 
 namespace PVR
 {
@@ -29,7 +30,7 @@ namespace PVR
 
   /** XBMC's internal group, the group containing all channels */
 
-  class CPVRChannelGroupInternal : public CPVRChannelGroup
+  class CPVRChannelGroupInternal : public CPVRChannelGroup, public Observer
   {
     friend class CPVRChannelGroups;
     friend class CPVRDatabase;
@@ -45,6 +46,8 @@ namespace PVR
 
     virtual ~CPVRChannelGroupInternal(void);
 
+    virtual void Notify(const Observable &obs, const ObservableMessage msg);
+
     /**
      * @brief The amount of channels in this container.
      * @return The amount of channels in this container.
index 291d86b..3ac032a 100644 (file)
@@ -40,6 +40,7 @@ typedef enum
   ObservableMessageTimersReset,
   ObservableMessageRecordings,
   ObservableMessagePeripheralsChanged,
+  ObservableMessageManagerStateChanged
 } ObservableMessage;
 
 class Observer