From 65d84bb0627f0e3e21fcdae27ba98cb584d7ad37 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 22 Dec 2008 20:53:34 +0100 Subject: [PATCH] add possibility to remove timers in epglist TODO: this is not working for subtitles yet and not its working in graphical multi epg --- RecordTimer.py | 25 +++++++--- data/skin_default/icons/epgclock_add.png | Bin 0 -> 358 bytes data/skin_default/icons/epgclock_post.png | Bin 0 -> 354 bytes data/skin_default/icons/epgclock_pre.png | Bin 0 -> 360 bytes lib/python/Components/EpgList.py | 32 +++++++++--- lib/python/Screens/EpgSelection.py | 57 +++++++++++++++++++--- lib/python/Screens/TimerEdit.py | 15 ++---- 7 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 data/skin_default/icons/epgclock_add.png create mode 100644 data/skin_default/icons/epgclock_post.png create mode 100644 data/skin_default/icons/epgclock_pre.png diff --git a/RecordTimer.py b/RecordTimer.py index 8449a2d2..dcfdd578 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -577,6 +577,7 @@ class RecordTimer(timer.Timer): print "ignore timer conflict" elif timersanitycheck.doubleCheck(): print "ignore double timer" + return None entry.timeChanged() print "[Timer] Record " + str(entry) entry.Timer = self @@ -584,15 +585,16 @@ class RecordTimer(timer.Timer): if dosave: self.saveTimer() return None - + def isInTimer(self, eventid, begin, duration, service): time_match = 0 chktime = None chktimecmp = None chktimecmp_end = None end = begin + duration + refstr = str(service) for x in self.timer_list: - check = x.service_ref.ref.toCompareString() == str(service) + check = x.service_ref.ref.toString() == refstr if not check: sref = x.service_ref.ref parent_sid = sref.getUnsignedData(5) @@ -604,7 +606,7 @@ class RecordTimer(timer.Timer): sref.setUnsignedData(2, parent_tsid) sref.setUnsignedData(5, 0) sref.setUnsignedData(6, 0) - check = x.service_ref.ref.toCompareString() == str(service) + check = sref.toCompareString() == refstr num = 0 if check: check = False @@ -620,9 +622,6 @@ class RecordTimer(timer.Timer): check = True break if check: - #if x.eit is not None and x.repeated == 0: - # if x.eit == eventid: - # return duration if x.repeated != 0: if chktime is None: chktime = localtime(begin) @@ -645,6 +644,8 @@ class RecordTimer(timer.Timer): diff = x.end - begin if time_match < diff: time_match = diff + if time_match: + break return time_match def removeEntry(self, entry): @@ -663,6 +664,18 @@ class RecordTimer(timer.Timer): print "state: ", entry.state print "in processed: ", entry in self.processed_timers print "in running: ", entry in self.timer_list + # autoincrease instanttimer if possible + if not entry.dontSave: + for x in self.timer_list: + if x.dontSave and x.autoincrease: + x.end = x.begin + (3600 * 24 * 356 * 1) + self.timeChanged(x) + timersanitycheck = TimerSanityCheck(self.timer_list,x) + if not timersanitycheck.check(): + tsc_list = timersanitycheck.getSimulTimerList() + if len(tsc_list) > 1: + x.end = tsc_list[1].begin - 30 + self.timeChanged(x) # now the timer should be in the processed_timers list. remove it from there. self.processed_timers.remove(entry) self.saveTimer() diff --git a/data/skin_default/icons/epgclock_add.png b/data/skin_default/icons/epgclock_add.png new file mode 100644 index 0000000000000000000000000000000000000000..487ac483ab6e35441b58dfcb208bbe4b7dba40b9 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{3?%2B3|#`G7>k44ofy`glX(f`cm()_xL(*k z0V_IsVEct#v(BB^e_{LN-P_h)IKKPB&S@96PrPt)|AoWrFKnN5VbA;v2UY;}0!_Mb z>L5>u&T)_hB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLNg-FY)ws zWxv70DtHl zFm!uJyRNzDom!xKH&fBvz@@ypl~L{KfucFPA3hXWKh@9bcBszt$F;^@I@|l*5B7$# zZv52yRLb#B!psehDT%Hjv)^n{cy68Yb*?GT&L34buUr3P`@dbjHlljkuj&7ueMlGU c-?^9ZcL_Jsl@yOjKvyw%y85}Sb4q9e05{^5D*ylh literal 0 HcmV?d00001 diff --git a/data/skin_default/icons/epgclock_post.png b/data/skin_default/icons/epgclock_post.png new file mode 100644 index 0000000000000000000000000000000000000000..5716d99f46376c9a7f438dae2382e4d6a35745be GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{3?%2B3|#`G7>k44ofy`glX(f`xCZ!yxL(*k z0TUfPu>HcWS?5mdzp#Ds?rm!?9N&Fm=d=skCtf(Y|H9$*7q(BjuxI{-11o?UfyP`o zbx>6GmVNT|LeDITV}RxcMgl{;o=jF z85LYlHoBc=eK2YE#h6up#SC5@_cfT;UogEg_zth2jh{@(CH+O8W^S)q>2>|E^5cVY zUHTOpVr)3{r*SeWao@h2aN~AUkA8g7_r2LOine{-w6^>k+wI%^mTQc=-=40S{Cjiv b^?PNX4A?gcv~HaZbQFW9tDnm{r-UW|Ky{T( literal 0 HcmV?d00001 diff --git a/data/skin_default/icons/epgclock_pre.png b/data/skin_default/icons/epgclock_pre.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4246374ec90cc4edd315cf718beb9308aa4cdd GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{3?%2B3|#`G7>k44ofy`glX(f`cm()_xL(*k z0V_IsVEct#v(BB^e_{LN-P_h)IKKPB&S@96PrPt)|AoWrFKnN5VbA;v2UY;}0!_Mb z>L5>u&T)_hB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gg{;GcwGYBLNg-FY)ws zWxv70D>D@T-LA6 zlVy!f?vssSzB3!=yjrp|;();3sr|1L5=0|!C7a)gT{JK3;iAQzNozNL6<5yRI!BI^ zKTPz;8Gf;w%|DJdZE#FUbPbVyvthx>?WbQ^8_l^}-ZpXi^F6g@XEy)6ad_9}fc beg and beginTime < end and endTime > end: + return self.clock_post_pixmap + elif beginTime < beg and endTime > beg and endTime < end: + return self.clock_pre_pixmap + return self.clock_add_pixmap + def buildSingleEntry(self, service, eventId, beginTime, duration, EventName): - rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service) > ((duration/10)*8)) + rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service)) r1=self.weekday_rect r2=self.datetime_rect r3=self.descr_rect @@ -145,14 +162,15 @@ class EPGList(HTMLComponent, GUIComponent): res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_RIGHT, self.days[t[6]])) res.append((eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))) if rec: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, self.clock_pixmap)) + clock_pic = self.getClockPixmap(service, beginTime, duration, eventId) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic)) res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)) return res def buildSimilarEntry(self, service, eventId, beginTime, service_name, duration): - rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service) > ((duration/10)*8)) + rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service)) r1=self.weekday_rect r2=self.datetime_rect r3=self.service_rect @@ -161,22 +179,24 @@ class EPGList(HTMLComponent, GUIComponent): res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_RIGHT, self.days[t[6]])) res.append((eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))) if rec: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, self.clock_pixmap)) + clock_pic = self.getClockPixmap(service, beginTime, duration, eventId) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic)) res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name)) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name)) return res def buildMultiEntry(self, changecount, service, eventId, begTime, duration, EventName, nowTime, service_name): - rec=begTime and (self.timer.isInTimer(eventId, begTime, duration, service) > ((duration/10)*8)) + rec=beginTime and (self.timer.isInTimer(eventId, begTime, duration, service)) r1=self.service_rect r2=self.progress_rect r3=self.descr_rect r4=self.start_end_rect res = [ None ] # no private data needed if rec: + clock_pic = self.getClockPixmap(service, begTime, duration, eventId) res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width()-21, r1.height(), 0, RT_HALIGN_LEFT, service_name)) - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, self.clock_pixmap)) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, clock_pic)) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, service_name)) if begTime is not None: diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index 6740bfb6..b40f445f 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -5,11 +5,13 @@ from Components.Pixmap import Pixmap from Components.Label import Label from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI from Components.ActionMap import ActionMap +from Components.TimerSanityCheck import TimerSanityCheck from Screens.TimerEdit import TimerSanityConflict from Screens.EventView import EventViewSimple +from Screens.MessageBox import MessageBox from TimeDateInput import TimeDateInput from enigma import eServiceReference -from RecordTimer import RecordTimerEntry, parseEvent +from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from TimerEntry import TimerEntry from ServiceReference import ServiceReference from time import localtime, time @@ -17,6 +19,9 @@ from time import localtime, time mepg_config_initialized = False class EPGSelection(Screen): + ADD_TIMER = 0 + REMOVE_TIMER = 1 + def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None): Screen.__init__(self, session) self.bouquetChangeCB = bouquetChangeCB @@ -58,6 +63,7 @@ class EPGSelection(Screen): self.zapFunc = zapFunc self["key_green"] = Button(_("Add timer")) + self.key_green_choice = self.ADD_TIMER self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer) self["actions"] = ActionMap(["EPGSelectActions", "OkCancelActions"], @@ -179,14 +185,28 @@ class EPGSelection(Screen): if self.type == EPG_TYPE_MULTI: self["list"].updateMultiEPG(1) + def removeTimer(self, timer): + timer.afterEvent = AFTEREVENT.NONE + self.session.nav.RecordTimer.removeEntry(timer) + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return - newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) - self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) + eventid = event.getEventId() + refstr = serviceref.ref.toString() + for timer in self.session.nav.RecordTimer.timer_list: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + cb_func = lambda ret : not ret or self.removeTimer(timer) + self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) + break + else: + newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) + self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): print "finished add" @@ -200,8 +220,12 @@ class EPGSelection(Screen): self.session.nav.RecordTimer.record(entry) else: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER else: - print "Timeredit aborted" + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + print "Timeredit aborted" def finishSanityCorrection(self, answer): self.finishedAdd(answer) @@ -211,7 +235,7 @@ class EPGSelection(Screen): def moveDown(self): self["list"].moveDown() - + def applyButtonState(self, state): if state == 0: self["now_button"].hide() @@ -249,6 +273,7 @@ class EPGSelection(Screen): self["more_button_sel"].hide() def onSelectionChanged(self): + cur = self["list"].getCurrent() if self.type == EPG_TYPE_MULTI: count = self["list"].getCurrentChangeCount() if self.ask_time != -1: @@ -261,7 +286,7 @@ class EPGSelection(Screen): self.applyButtonState(1) days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ] datastr = "" - event = self["list"].getCurrent()[0] + event = cur[0] if event is not None: now = time() beg = event.getBeginTime() @@ -272,3 +297,23 @@ class EPGSelection(Screen): else: datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1]) self["date"].setText(datestr) + else: + event = cur[0] + + if event is None: + return + + serviceref = cur[1] + eventid = event.getEventId() + refstr = serviceref.ref.toString() + + for timer in self.session.nav.RecordTimer.timer_list: + if self.key_green_choice != self.REMOVE_TIMER: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER + break + else: + if self.key_green_choice != self.ADD_TIMER: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 18ab2b79..59e2bd03 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -214,18 +214,6 @@ class TimerEditList(Screen): timer = cur timer.afterEvent = AFTEREVENT.NONE self.session.nav.RecordTimer.removeEntry(timer) - if not timer.dontSave: - for timer in self.session.nav.RecordTimer.timer_list: - if timer.dontSave and timer.autoincrease: - timer.end = timer.begin + (3600 * 24 * 356 * 1) - self.session.nav.RecordTimer.timeChanged(timer) - timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list,timer) - if not timersanitycheck.check(): - tsc_list = timersanitycheck.getSimulTimerList() - if len(tsc_list) > 1: - timer.end = tsc_list[1].begin - 30 - self.session.nav.RecordTimer.timeChanged(timer) - self.refill() self.updateState() @@ -261,6 +249,7 @@ class TimerEditList(Screen): def addTimer(self, timer): self.session.openWithCallback(self.finishedAdd, TimerEntry, timer) + def finishedEdit(self, answer): print "finished edit" @@ -335,6 +324,8 @@ class TimerSanityConflict(Screen): self.list.append((_("Conflicting timer") + " " + str(count), x)) self.list2.append((timer[count], False)) count += 1 + if count == 1: + self.list.append((_("Channel not in services list"))) self["list"] = MenuList(self.list) self["timer2"] = TimerList(self.list2) -- 2.30.2