From 93f1c156edfd067627cd969ca275f38d3b319069 Mon Sep 17 00:00:00 2001 From: Sascha Volkenandt Date: Fri, 5 Jan 2007 17:52:00 +0000 Subject: - moved SortedTimers to plugin and added methods to interface from website - added function to update internal timers from main thread --- pagelib/sortedtimers.cpp | 28 ---------------------------- pagelib/sortedtimers.h | 26 -------------------------- timers.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ timers.h | 37 +++++++++++++++++++++++++++++++++++-- 4 files changed, 77 insertions(+), 56 deletions(-) delete mode 100644 pagelib/sortedtimers.cpp delete mode 100644 pagelib/sortedtimers.h 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 -#include - -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 diff --git a/timers.cpp b/timers.cpp index ea3d6d1..e1689ce 100644 --- a/timers.cpp +++ b/timers.cpp @@ -1,9 +1,51 @@ +#include #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 diff --git a/timers.h b/timers.h index b6c53b8..339ead4 100644 --- a/timers.h +++ b/timers.h @@ -2,22 +2,55 @@ #define VDR_LIVE_TIMERS_H #include +#include #include +#include #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() -- cgit v1.2.3