diff options
-rw-r--r-- | pagelib/sortedtimers.cpp | 28 | ||||
-rw-r--r-- | pagelib/sortedtimers.h | 26 | ||||
-rw-r--r-- | timers.cpp | 42 | ||||
-rw-r--r-- | timers.h | 37 |
4 files changed, 77 insertions, 56 deletions
diff --git a/pagelib/sortedtimers.cpp b/pagelib/sortedtimers.cpp deleted file mode 100644 index 547c482..0000000 --- a/pagelib/sortedtimers.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "sortedtimers.h" - -static bool operator<( cTimer const& left, cTimer const& right ) -{ - return left.Compare( right ) < 0; -} - -/* -static bool operator==( cTimer const& left, cTimer const& right ) -{ - return left.Channel() == right.Channel() && - (left.WeekDays() && left.WeekDays() == right.WeekDays() || !left.WeekDays() && left.Day() == right.Day()) && - left.Start() == right.Start() && - left.Stop() == right.Stop(); -} -*/ - -namespace vdrlive { - -SortedTimers::SortedTimers() -{ - for ( cTimer* timer = Timers.First(); timer != 0; timer = Timers.Next( timer ) ) { - m_timers.push_back( *timer ); - } - m_timers.sort(); -} - -} // namespace vdrlive diff --git a/pagelib/sortedtimers.h b/pagelib/sortedtimers.h deleted file mode 100644 index ffe9150..0000000 --- a/pagelib/sortedtimers.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef VDR_LIVE_SORTEDTIMERS_H -#define VDR_LIVE_SORTEDTIMERS_H - -#include <list> -#include <vdr/timers.h> - -namespace vdrlive { - -class SortedTimers -{ -public: - typedef std::list< cTimer > List; - typedef List::iterator iterator; - - SortedTimers(); - - iterator begin() { return m_timers.begin(); } - iterator end() { return m_timers.end(); } - -private: - List m_timers; -}; - -} // namespace vdrlive - -#endif // VDR_LIVE_SORTEDTIMERS_H @@ -1,9 +1,51 @@ +#include <sstream> #include "timers.h" +static bool operator<( cTimer const& left, cTimer const& right ) +{ + return left.Compare( right ) < 0; +} + namespace vdrlive { +using namespace std; + +SortedTimers::SortedTimers(): + m_state( 0 ) +{ + ReloadTimers( true ); +} + +string SortedTimers::GetTimerId( cTimer const& timer ) +{ + ostringstream builder; + builder << *timer.Channel()->GetChannelID().ToString() << ":" << timer.WeekDays() << ":" + << timer.Day() << ":" << timer.Start() << ":" << timer.Stop(); + return builder.str(); +} + +void SortedTimers::ReloadTimers( bool initial ) +{ + if ( !Timers.Modified( m_state ) && !initial ) + return; + + dsyslog("reloading timers"); + + clear(); + for ( cTimer* timer = Timers.First(); timer != 0; timer = Timers.Next( timer ) ) { + push_back( *timer ); + } + sort(); +} + TimerManager::TimerManager() { } +void TimerManager::DoPendingWork() +{ + cMutexLock lock( this ); + m_timers.ReloadTimers(); +} + } // namespace vdrlive @@ -2,22 +2,55 @@ #define VDR_LIVE_TIMERS_H #include <list> +#include <string> #include <vdr/timers.h> +#include <vdr/thread.h> #include "live.h" namespace vdrlive { class Plugin; -class TimerManager +class SortedTimersInterface: public std::list< cTimer > +{ +public: + virtual ~SortedTimersInterface() {} + + virtual std::string GetTimerId( cTimer const& timer ) = 0; +}; + +class SortedTimers: public SortedTimersInterface +{ + friend class TimerManager; + +public: + virtual std::string GetTimerId( cTimer const& timer ); + +private: + SortedTimers(); + SortedTimers( SortedTimers const& ); + + int m_state; + int m_refs; + + void ReloadTimers( bool initial = false ); +}; + +class TimerManager: public cMutex { friend TimerManager& Plugin::GetLiveTimerManager(); +public: + SortedTimersInterface& GetTimers() { return m_timers; } + + // may only be called from Plugin::MainThreadHook + void DoPendingWork(); + private: TimerManager(); TimerManager( TimerManager const& ); - + SortedTimers m_timers; }; inline TimerManager& LiveTimerManager() |