diff options
author | Jasmin Jessich <jasmin@anw.at> | 2017-06-09 23:36:48 +0200 |
---|---|---|
committer | Jasmin Jessich <jasmin@anw.at> | 2017-06-09 23:36:48 +0200 |
commit | 5e9bd5cf83b8a7312e3c6543f757bf723e342e8e (patch) | |
tree | b26304aa0bd5bf135cdc279550a3c0a40a30fbd5 | |
parent | c430d84a28a320ad91fd42d6d108d30812fd5c8c (diff) | |
download | vdr-plugin-live-5e9bd5cf83b8a7312e3c6543f757bf723e342e8e.tar.gz vdr-plugin-live-5e9bd5cf83b8a7312e3c6543f757bf723e342e8e.tar.bz2 |
Update internal timer list if VDR timers have been changed
- New function StatusMonitor::TimerChange.
- New function TimerManager::SetReloadTimers.
- VDR will execute TimerChange which will use SetReloadTimers to
store a timer update needs to be done. Later TimerManager::DoPendingWork
will reload the actual timers from VDR.
- Added missing locking to StatusMonitor functions.
-rw-r--r-- | status.cpp | 9 | ||||
-rw-r--r-- | status.h | 3 | ||||
-rw-r--r-- | timers.cpp | 2 | ||||
-rw-r--r-- | timers.h | 4 |
4 files changed, 14 insertions, 4 deletions
@@ -8,9 +8,16 @@ namespace vdrlive { StatusMonitor::StatusMonitor() { } - + +void StatusMonitor::TimerChange(const cTimer *Timer, eTimerChange Change) +{ + cMutexLock timersLock( &LiveTimerManager() ); + LiveTimerManager().SetReloadTimers(); +} + void StatusMonitor::Recording( cDevice const*, char const*, char const*, bool ) { + cMutexLock timersLock( &LiveTimerManager() ); LiveTimerManager().DoReloadTimers(); } @@ -12,7 +12,8 @@ class StatusMonitor: public cStatus private: StatusMonitor(); StatusMonitor( StatusMonitor const& ); - + + virtual void TimerChange(const cTimer *Timer, eTimerChange Change); virtual void Recording( cDevice const* Device, char const* Name, char const* FileName, bool On ); }; @@ -249,7 +249,7 @@ namespace vdrlive { void TimerManager::DoPendingWork() { - if ( m_updateTimers.size() == 0 && !m_timers.Modified() ) + if ( m_updateTimers.size() == 0 && !m_timers.Modified() && !m_reloadTimers ) return; cMutexLock lock( this ); @@ -53,8 +53,9 @@ namespace vdrlive { void ToggleTimerActive( cTimer* timer); // may only be called from Plugin::MainThreadHook void DoPendingWork(); - void DoReloadTimers() { m_timers.ReloadTimers(); } + void DoReloadTimers() { m_timers.ReloadTimers(); m_reloadTimers = false; } const cTimer* GetTimer(tEventID eventid, tChannelID channelid); + void SetReloadTimers() { m_reloadTimers = true; } private: typedef std::pair< cTimer*, std::string > TimerPair; @@ -69,6 +70,7 @@ namespace vdrlive { TimerList m_updateTimers; ErrorList m_failedUpdates; cCondVar m_updateWait; + bool m_reloadTimers; void DoUpdateTimers(); void DoInsertTimer( TimerPair& timerData ); |