From a92d514b4eda6e7d0db7b66c0af8c6b37e11ec4b Mon Sep 17 00:00:00 2001 From: Sascha Volkenandt Date: Thu, 25 Jan 2007 19:25:02 +0000 Subject: - added helper class for epgsearch services --- epgsearch.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 epgsearch.cpp (limited to 'epgsearch.cpp') diff --git a/epgsearch.cpp b/epgsearch.cpp new file mode 100644 index 0000000..1816574 --- /dev/null +++ b/epgsearch.cpp @@ -0,0 +1,97 @@ +#include +#include +#include "epgsearch/services.h" +#include "epgsearch.h" +#include "exception.h" +#include "tools.h" + +namespace vdrlive { + +using namespace std; + +bool operator<( SearchTimer const& left, SearchTimer const& right ) +{ + return left.m_id < right.m_id; +} + +SearchTimer::SearchTimer( string const& data ): + m_id( 0 ), + m_useTime( false ), + m_startTime( 0 ), + m_stopTime( 0 ), + m_useChannel( NoChannel ), + m_useCase( false ), + m_mode( 0 ), + m_useTitle( false ), + m_useSubtitle( false ), + m_useDescription( false ), + m_useDuration( false ), + m_minDuration( 0 ), + m_maxDuration( 0 ), + m_useAsSearchTimer( false ), + m_useDayOfWeek( false ), + m_dayOfWeek( 0 ), + m_useEpisode( false ), + m_priority( 0 ), + m_lifetime( 0 ) +{ + vector< string > parts = StringSplit( data, ':' ); + try { + vector< string >::const_iterator part = parts.begin(); + for ( int i = 0; part != parts.end(); ++i, ++part ) { + switch ( i ) { + case 0: m_id = lexical_cast< int >( *part ); break; + case 1: m_search = StringReplace( StringReplace( *part, "|", ":" ), "!^pipe^!", "|" ); break; + case 2: m_useTime = lexical_cast< bool >( *part ); break; + case 3: if ( m_useTime ) m_startTime = lexical_cast< int >( *part ); break; + case 4: if ( m_useTime ) m_stopTime = lexical_cast< int >( *part ); break; + case 5: m_useChannel = lexical_cast< int >( *part ); break; + case 6: ParseChannel( *part ); break; + case 7: m_useCase = lexical_cast< int >( *part ); break; + case 8: m_mode = lexical_cast< int >( *part ); break; + case 9: m_useTitle = lexical_cast< bool >( *part ); break; + case 10: m_useSubtitle = lexical_cast< bool >( *part ); break; + case 11: m_useDescription = lexical_cast< bool >( *part ); break; + case 12: m_useDuration = lexical_cast< bool >( *part ); break; + case 13: if ( m_useDuration ) m_minDuration = lexical_cast< int >( *part ); break; + case 14: if ( m_useDuration ) m_maxDuration = lexical_cast< int >( *part ); break; + case 15: m_useAsSearchTimer = lexical_cast< bool >( *part ); break; + case 16: m_useDayOfWeek = lexical_cast< bool >( *part ); break; + case 17: m_dayOfWeek = lexical_cast< int >( *part ); break; + case 18: m_useEpisode = lexical_cast< bool >( *part ); break; + case 19: m_directory = *part; break; + case 20: m_priority = lexical_cast< int >( *part ); break; + case 21: m_lifetime = lexical_cast< int >( *part ); break; + } + } + } catch ( bad_lexical_cast const& ex ) { + } +} + +void SearchTimer::ParseChannel( string const& data ) +{ + switch ( m_useChannel ) { + case Interval: ParseChannelIDs( data ); break; + case Group: m_channelGroup = data; break; + } +} + +void SearchTimer::ParseChannelIDs( string const& data ) +{ + vector< string > parts = StringSplit( data, '|' ); + m_channelMin = lexical_cast< tChannelID >( parts[ 0 ] ); + if ( parts.size() == 2 ) + m_channelMax = lexical_cast< tChannelID >( parts[ 1 ] ); +} + +SearchTimers::SearchTimers() +{ + Epgsearch_services_v1_0 service; + if ( cPluginManager::CallFirstService("Epgsearch-services-v1.0", &service) == 0 ) + throw HtmlError( tr("No searchtimers available") ); + + list< string > timers = service.handler->SearchTimerList(); + m_timers.assign( timers.begin(), timers.end() ); +} + +} // namespace vdrlive -- cgit v1.2.3