~ubuntu-branches/ubuntu/hardy/vdr-plugin-live/hardy

« back to all changes in this revision

Viewing changes to debian/patches/91_timer-delete-fix.dpatch

  • Committer: Bazaar Package Importer
  • Author(s): Thomas Schmidt
  • Date: 2007-07-02 21:02:17 UTC
  • Revision ID: james.westby@ubuntu.com-20070702210217-jm77uheo6rbcc2po
Tags: 0.1.0-4
Added Thomas Günther and myself to Uploaders and debian/copyright

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh /usr/share/dpatch/dpatch-run
 
2
## 91_timer-delete-fix.dpath.dpatch by Tobias Grimm <tg@e-tobi.net>
 
3
##
 
4
## All lines beginning with `## DP:' are a description of the patch.
 
5
## DP: Fixes crashes when deleting timers (taken from upstream SVN)
 
6
 
 
7
@DPATCH@
 
8
diff -urNad vdr-plugin-live-0.1.0~/timers.cpp vdr-plugin-live-0.1.0/timers.cpp
 
9
--- vdr-plugin-live-0.1.0~/timers.cpp   2007-05-03 20:17:16.000000000 +0200
 
10
+++ vdr-plugin-live-0.1.0/timers.cpp    2007-06-21 23:24:12.000000000 +0200
 
11
@@ -15,6 +15,9 @@
 
12
 using namespace std;
 
13
 using namespace vdrlive;
 
14
 
 
15
+static char const* const TIMER_DELETE = "DELETE";
 
16
+static char const* const TIMER_TOGGLE = "TOGGLE";
 
17
+
 
18
 SortedTimers::SortedTimers():
 
19
                m_state( 0 )
 
20
 {
 
21
@@ -79,6 +82,8 @@
 
22
 void TimerManager::UpdateTimer( cTimer* timer, int flags, tChannelID& channel, string const& weekdays, string const& day,
 
23
                                                                int start, int stop, int priority, int lifetime, string const& title, string const& aux )
 
24
 {
 
25
+       cMutexLock lock( this );
 
26
+
 
27
        ostringstream builder;
 
28
        builder << flags << ":" << channel << ":" << ( weekdays != "-------" ? weekdays : "" )
 
29
                        << ( weekdays == "-------" || day.empty() ? "" : "@" ) << day << ":" << start << ":" << stop << ":"
 
30
@@ -98,22 +103,33 @@
 
31
                throw HtmlError( error );
 
32
 }
 
33
 
 
34
-void TimerManager::DelTimer( cTimer* timer)
 
35
+void TimerManager::DelTimer( cTimer* timer )
 
36
 {
 
37
-       cTimer* delTimer = Timers.GetTimer(timer);
 
38
-       Timers.Del(delTimer, true);
 
39
-       Timers.SetModified();
 
40
-       m_timers.ReloadTimers(false);
 
41
+       cMutexLock lock( this );
 
42
+
 
43
+       TimerPair timerData( timer, TIMER_DELETE );
 
44
+
 
45
+       m_updateTimers.push_back( timerData );
 
46
+       m_updateWait.Wait( *this );
 
47
+
 
48
+       string error = GetError( timerData );
 
49
+       if ( !error.empty() )
 
50
+               throw HtmlError( error );
 
51
 }
 
52
 
 
53
 void TimerManager::ToggleTimerActive( cTimer* timer)
 
54
 {
 
55
-       cTimer* toggleTimer = Timers.GetTimer(timer);
 
56
-       toggleTimer->OnOff();
 
57
-       Timers.SetModified();
 
58
-       m_timers.ReloadTimers(false);
 
59
-}
 
60
+       cMutexLock lock( this );
 
61
 
 
62
+       TimerPair timerData( timer, TIMER_TOGGLE );
 
63
+
 
64
+       m_updateTimers.push_back( timerData );
 
65
+       m_updateWait.Wait( *this );
 
66
+
 
67
+       string error = GetError( timerData );
 
68
+       if ( !error.empty() )
 
69
+               throw HtmlError( error );
 
70
+}
 
71
 
 
72
 void TimerManager::DoPendingWork()
 
73
 {
 
74
@@ -123,10 +139,10 @@
 
75
        cMutexLock lock( this );
 
76
        if ( m_updateTimers.size() > 0 ) {
 
77
                DoUpdateTimers();
 
78
-               dsyslog("SV: signalling waiters");
 
79
-               m_updateWait.Broadcast();
 
80
        }
 
81
        DoReloadTimers();
 
82
+       dsyslog("SV: signalling waiters");
 
83
+       m_updateWait.Broadcast();
 
84
 }
 
85
 
 
86
 void TimerManager::DoUpdateTimers()
 
87
@@ -135,8 +151,10 @@
 
88
        for ( TimerList::iterator timer = m_updateTimers.begin(); timer != m_updateTimers.end(); ++timer ) {
 
89
                if ( timer->first == 0 ) // new timer
 
90
                        DoInsertTimer( *timer );
 
91
-               else if ( timer->second == "" ) // delete timer
 
92
-                       ; // XXX
 
93
+               else if ( timer->second == TIMER_DELETE ) // delete timer
 
94
+                       DoDeleteTimer( *timer );
 
95
+               else if ( timer->second == TIMER_TOGGLE ) // toggle timer
 
96
+                       DoToggleTimer( *timer );
 
97
                else // update timer
 
98
                        DoUpdateTimer( *timer );
 
99
        }
 
100
@@ -187,6 +205,47 @@
 
101
        isyslog("live timer %s modified (%s)", *oldTimer->ToDescr(), oldTimer->HasFlags(tfActive) ? "active" : "inactive");
 
102
 }
 
103
 
 
104
+void TimerManager::DoDeleteTimer( TimerPair& timerData )
 
105
+{
 
106
+       if ( Timers.BeingEdited() ) {
 
107
+               StoreError( timerData, tr("Timers are being edited - try again later") );
 
108
+               return;
 
109
+       }
 
110
+
 
111
+       cTimer* oldTimer = Timers.GetTimer( timerData.first );
 
112
+       if ( oldTimer == 0 ) {
 
113
+               StoreError( timerData, tr("Timer not defined") );
 
114
+               return;
 
115
+       }
 
116
+
 
117
+       cTimer copy = *oldTimer;
 
118
+       if ( oldTimer->Recording() ) {
 
119
+               oldTimer->Skip();
 
120
+               cRecordControls::Process( time( 0 ) );
 
121
+       }
 
122
+       Timers.Del( oldTimer );
 
123
+       Timers.SetModified();
 
124
+       isyslog("live timer %s deleted", *copy.ToDescr());
 
125
+}
 
126
+
 
127
+void TimerManager::DoToggleTimer( TimerPair& timerData )
 
128
+{
 
129
+       if ( Timers.BeingEdited() ) {
 
130
+               StoreError( timerData, tr("Timers are being edited - try again later") );
 
131
+               return;
 
132
+       }
 
133
+
 
134
+       cTimer* toggleTimer = Timers.GetTimer( timerData.first );
 
135
+       if ( toggleTimer == 0 ) {
 
136
+               StoreError( timerData, tr("Timer not defined") );
 
137
+               return;
 
138
+       }
 
139
+
 
140
+       toggleTimer->OnOff();
 
141
+       Timers.SetModified();
 
142
+       isyslog("live timer %s toggled %s", *toggleTimer->ToDescr(), toggleTimer->HasFlags(tfActive) ? "on" : "off");
 
143
+}
 
144
+
 
145
 void TimerManager::StoreError( TimerPair const& timerData, std::string const& error )
 
146
 {
 
147
        m_failedUpdates.push_back( ErrorPair( timerData, error ) );
 
148
diff -urNad vdr-plugin-live-0.1.0~/timers.h vdr-plugin-live-0.1.0/timers.h
 
149
--- vdr-plugin-live-0.1.0~/timers.h     2007-05-03 20:17:16.000000000 +0200
 
150
+++ vdr-plugin-live-0.1.0/timers.h      2007-06-21 23:24:12.000000000 +0200
 
151
@@ -4,6 +4,7 @@
 
152
 #include <list>
 
153
 #include <string>
 
154
 #include <vdr/channels.h>
 
155
+#include <vdr/menu.h>
 
156
 #include <vdr/timers.h>
 
157
 #include <vdr/thread.h>
 
158
 #include "live.h"
 
159
@@ -63,6 +64,8 @@
 
160
        void DoUpdateTimers();
 
161
        void DoInsertTimer( TimerPair& timerData );
 
162
        void DoUpdateTimer( TimerPair& timerData );
 
163
+       void DoDeleteTimer( TimerPair& timerData );
 
164
+       void DoToggleTimer( TimerPair& timerData );
 
165
 
 
166
        void StoreError( TimerPair const& timerData, std::string const& error );
 
167
        std::string GetError( TimerPair const& timerData );