summaryrefslogtreecommitdiff
path: root/timerconflict.cpp
diff options
context:
space:
mode:
authorChristian Wieninger <cwieninger (at) gmx (dot) de>2008-02-21 19:38:34 +0100
committerChristian Wieninger <cwieninger (at) gmx (dot) de>2008-02-21 19:38:34 +0100
commit5ce71e1affd32470b2d8b6c46f18a1f9751289af (patch)
tree29ea7bdb8b086cd7ae3b4640ba27568494150364 /timerconflict.cpp
parentea408d448aa65350c686a75d445450979fc8cd9e (diff)
downloadvdr-plugin-live-5ce71e1affd32470b2d8b6c46f18a1f9751289af.tar.gz
vdr-plugin-live-5ce71e1affd32470b2d8b6c46f18a1f9751289af.tar.bz2
timer conflict implementation moved to timerconflict.cpp/h
Diffstat (limited to 'timerconflict.cpp')
-rw-r--r--timerconflict.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/timerconflict.cpp b/timerconflict.cpp
new file mode 100644
index 0000000..9f0f8af
--- /dev/null
+++ b/timerconflict.cpp
@@ -0,0 +1,84 @@
+#include <vector>
+#include "timerconflict.h"
+#include "tools.h"
+#include "epgsearch/services.h"
+#include "exception.h"
+#include "epgsearch.h"
+#include <vdr/plugin.h>
+
+namespace vdrlive {
+
+bool CheckEpgsearchVersion();
+
+using namespace std;
+
+static char ServiceInterface[] = "Epgsearch-services-v1.0";
+
+bool operator<( TimerConflict const& left, TimerConflict const& right )
+{
+ return left.conflictTime < right.conflictTime;
+}
+
+TimerConflict::TimerConflict()
+{
+ Init();
+}
+
+void TimerConflict::Init()
+{
+ conflictTime = 0;
+}
+
+TimerConflict::TimerConflict( string const& data )
+{
+ Init();
+ vector< string > parts = StringSplit( data, ':' );
+ try {
+ vector< string >::const_iterator part = parts.begin();
+ if (parts.size() > 0) {
+ conflictTime = lexical_cast< time_t >( *part++ );
+ for ( int i = 1; part != parts.end(); ++i, ++part ) {
+ vector< string > timerparts = StringSplit( *part, '|' );
+ vector< string >::const_iterator timerpart = timerparts.begin();
+ TimerInConflict timer;
+ for ( int j = 0; timerpart != timerparts.end(); ++j, ++timerpart )
+ switch(j) {
+ case 0: timer.timerIndex = lexical_cast< int >( *timerpart ); break;
+ case 1: timer.percentage = lexical_cast< int >( *timerpart ); break;
+ case 2:
+ {
+ vector< string > conctimerparts = StringSplit( *timerpart, '#' );
+ vector< string >::const_iterator conctimerpart = conctimerparts.begin();
+ for ( int k = 0; conctimerpart != conctimerparts.end(); ++k, ++conctimerpart )
+ timer.concurrentTimerIndices.push_back(lexical_cast< int >( *conctimerpart ));
+ break;
+ }
+ }
+ conflictingTimers.push_back(timer);
+ }
+ }
+ }
+ catch ( bad_lexical_cast const& ex ) {
+ }
+}
+
+TimerConflicts::TimerConflicts()
+{
+ Epgsearch_services_v1_0 service;
+ if ( !CheckEpgsearchVersion() || cPluginManager::CallFirstService(ServiceInterface, &service) == 0 )
+ throw HtmlError( tr("EPGSearch version outdated! Please update.") );
+
+ list< string > conflicts = service.handler->TimerConflictList();
+ m_conflicts.assign( conflicts.begin(), conflicts.end() );
+ m_conflicts.sort();
+}
+
+bool TimerConflicts::CheckAdvised()
+{
+ Epgsearch_services_v1_0 service;
+ if ( !CheckEpgsearchVersion() || cPluginManager::CallFirstService(ServiceInterface, &service) == 0 )
+ throw HtmlError( tr("EPGSearch version outdated! Please update.") );
+ return service.handler->IsConflictCheckAdvised();
+}
+
+} // namespace vdrlive