summaryrefslogtreecommitdiff
path: root/epgsearch.cpp
blob: 18165745dcf1ee1be2bc8f8a8ac0ab3904bd3a54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <vector>
#include <vdr/plugin.h>
#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