def test_long_time(self): difference = (datetime.now() + timedelta(minutes=4)) - datetime.now() self.assertEqual(readable.long_time(difference), "03:59") difference = (datetime.now() + timedelta(hours=5, minutes=30)) - datetime.now() self.assertEqual(readable.long_time(difference), "05:29:59")
def test_long_time(self): difference = (datetime.now() + timedelta(minutes=4)) - datetime.now() self.assertEqual(readable.long_time(difference), "03:59") difference = (datetime.now() + timedelta(hours=5, minutes=30)) - datetime.now() self.assertEqual(readable.long_time(difference), "05:29:59") difference = (datetime.now() + timedelta(days=5)) - datetime.now() self.assertEqual(readable.long_time(difference), "5 days")
def update_scheduler_timeout(self, status, event_type, title, attr_red, attr_black, changed, parpadeo): """GObject.timeout callback with 500 ms intervals""" if self.recorder.current_mediapackage and not self.recorder.current_mediapackage.manual: start = self.recorder.current_mediapackage.getLocalDate() duration = self.recorder.current_mediapackage.getDuration() / 1000 end = start + datetime.timedelta(seconds=duration) dif = end - datetime.datetime.now() status.set_text(_("Stopping in {0}").format(readable.long_time(dif))) event_type.set_text(CURRENT_TEXT) title.set_text(self.recorder.current_mediapackage.title) if dif < datetime.timedelta(0, TIME_RED_STOP): if not changed: status.set_attributes(attr_red) changed = True elif changed: status.set_attributes(attr_black) changed = False if dif < datetime.timedelta(0,TIME_BLINK_STOP): parpadeo = not parpadeo else: next_mediapackage = self.repo.get_next_mediapackage() if next_mediapackage: start = next_mediapackage.getLocalDate() dif = start - datetime.datetime.now() if event_type.get_text != NEXT_TEXT: event_type.set_text(NEXT_TEXT) if title.get_text() != next_mediapackage.title: title.set_text(next_mediapackage.title) status.set_text(_("Starting in {0}").format(readable.long_time(dif))) if dif < datetime.timedelta(0,TIME_RED_START): if not changed: status.set_attributes(attr_red) changed = True elif changed: status.set_attributes(attr_black) changed = False if dif < datetime.timedelta(0,TIME_BLINK_START): if parpadeo: status.set_text("") parpadeo = False else: parpadeo = True else: # Not current or pending recordings if event_type.get_text(): event_type.set_text("") if status.get_text(): status.set_text("") if title.get_text() != _("No upcoming events"): title.set_text(_("No upcoming events")) return True
def recording_info_timeout(self, rec_title, rec_elapsed): """GObject.timeout callback with 500 ms intervals""" if self.recorder.status == RECORDING_STATUS: rec_title.set_text(self.recorder.current_mediapackage.getTitle()) msec = datetime.timedelta(microseconds=(round(self.recorder.get_recorded_time()/1000.0,-6))) rec_elapsed.set_text(_("Elapsed Time: ") + readable.long_time(msec)) return True return False
def timer_launch_thread(self): """Thread handling the recording elapsed time timer.""" thread_id= self.timer_thread_id rec_title = self.gui.get_object("recording1") rec_elapsed = self.gui.get_object("recording3") while thread_id == self.timer_thread_id: gtk.gdk.threads_enter() if rec_title.get_text() != self.mediapackage.getTitle(): rec_title.set_text(self.mediapackage.getTitle()) msec = datetime.timedelta(microseconds=(self.recorder.get_recorded_time()/1000)) rec_elapsed.set_text(_("Elapsed Time: ") + readable.long_time(msec)) gtk.gdk.threads_leave() time.sleep(0.5) return True
def update_scheduler_timeout(self, status, event_type, title): """GObject.timeout callback with 500 ms intervals""" global status_label_changed, status_label_blink, signalized if self.recorder.current_mediapackage and not self.recorder.current_mediapackage.manual: start = self.recorder.current_mediapackage.getLocalDate() duration = self.recorder.current_mediapackage.getDuration() / 1000 end = start + datetime.timedelta(seconds=duration) dif = end - datetime.datetime.now() if dif < datetime.timedelta(0): return True if self.recorder.current_mediapackage.anticipated: status.set_text("") event_type.set_text(CURRENT_TEXT) title.set_text(self.recorder.current_mediapackage.title) return True status.set_text( _("Stopping in {0}").format(readable.long_time(dif))) event_type.set_text(CURRENT_TEXT) title.set_text(self.recorder.current_mediapackage.title) if dif < datetime.timedelta(0, TIME_RED_STOP): if not status_label_changed: status.set_name('red_coloured') status_label_changed = True elif status_label_changed: status.set_name('black_coloured') status_label_changed = False if dif < datetime.timedelta(0, TIME_BLINK_STOP): if status_label_blink: status.set_name('blinking_coloured_from') else: status.set_name('blinking_coloured_to') status_label_blink = not status_label_blink else: next_mediapackage = self.repo.get_next_mediapackage() if next_mediapackage and next_mediapackage.isScheduled(): start = next_mediapackage.getLocalDate() dif = start - datetime.datetime.now() event_type.set_text(NEXT_TEXT) title.set_text(next_mediapackage.title) status.set_text( _("Starting in {0}").format(readable.long_time(dif))) if dif < datetime.timedelta(0, TIME_UPCOMING): if not signalized: self.dispatcher.emit("recorder-upcoming-event") signalized = True elif signalized: signalized = False if dif < datetime.timedelta(0, TIME_RED_START): if not status_label_changed: status.set_name('red_coloured') status_label_changed = True elif status_label_changed: status.set_name('black_coloured') status_label_changed = False if dif < datetime.timedelta(0, TIME_BLINK_START): if status_label_blink: status.set_name('blinking_coloured_from') else: status.set_name('blinking_coloured_to') status_label_blink = not status_label_blink elif self.recorder.title_standin is not None: if event_type.get_text(): event_type.set_text("") if status.get_text(): status.set_text("") title.set_text(_(self.recorder.title_standin)) else: # Not current or pending recordings if event_type.get_text(): event_type.set_text("") if status.get_text(): status.set_text("") title.set_text(_("No upcoming events")) return True
def scheduler_launch_thread(self): """Thread handling the messages scheduler notification area.""" # Based on: http://pygstdocs.berlios.de/pygst-tutorial/seeking.html thread_id= self.scheduler_thread_id event_type = self.gui.get_object("nextlabel") title = self.gui.get_object("titlelabel") status = self.gui.get_object("eventlabel") # Status panel # status_disk = self.gui.get_object("status1") # status_hours = self.gui.get_object("status2") # status_mh = self.gui.get_object("status3") gtk.gdk.threads_enter() self.check_schedule() gtk.gdk.threads_leave() parpadeo = True changed = False signalized = False if self.font == None: anchura = self.get_toplevel().get_screen().get_width() if anchura not in [1024,1280,1920]: anchura = 1920 k1 = anchura / 1920.0 changing_font = pango.FontDescription("bold "+str(k1*42)) self.font = changing_font bold = pango.AttrWeight(700, 0, -1) red = pango.AttrForeground(65535, 0, 0, 0, -1) black = pango.AttrForeground(17753, 17753, 17753, 0, -1) font = pango.AttrFontDesc(self.font, 0, -1) attr_red = pango.AttrList() attr_black = pango.AttrList() attr_red.insert(red) attr_red.insert(font) attr_red.insert(bold) attr_black.insert(black) attr_black.insert(font) attr_black.insert(bold) gtk.gdk.threads_enter() status.set_attributes(attr_black) gtk.gdk.threads_leave() one_second = datetime.timedelta(seconds=1) while thread_id == self.scheduler_thread_id: gtk.gdk.threads_enter() if self.font != changing_font: attr_black.insert(pango.AttrFontDesc(self.font, 0, -1)) attr_red.insert(pango.AttrFontDesc(self.font, 0, -1)) changing_font = self.font if self.current: start = self.current.getLocalDate() duration = self.current.getDuration() / 1000 end = start + datetime.timedelta(seconds=duration) dif = end - datetime.datetime.now() #dif2 = datetime.datetime.now() - start if dif < datetime.timedelta(0,0): # Checking for malfuntions self.current = None self.current_mediapackage = None status.set_text("") else: status.set_text(_("Stopping in {0}").format(readable.long_time(dif+one_second))) if event_type.get_text() != CURRENT_TEXT: event_type.set_text(CURRENT_TEXT) if title.get_text() != self.current.title: title.set_text(self.current.title) if dif < datetime.timedelta(0,TIME_RED_STOP): if not changed: status.set_attributes(attr_red) changed = True elif changed: status.set_attributes(attr_black) changed = False if dif < datetime.timedelta(0,TIME_BLINK_STOP): parpadeo = False if parpadeo else True # Timer(diff,self.check_schedule) elif self.next: start = self.next.getLocalDate() dif = start - datetime.datetime.now() if event_type.get_text != NEXT_TEXT: event_type.set_text(NEXT_TEXT) if title.get_text() != self.next.title: title.set_text(self.next.title) status.set_text(_("Starting in {0}").format(readable.long_time(dif))) if dif < datetime.timedelta(0,TIME_RED_START): if not changed: status.set_attributes(attr_red) changed = True elif changed: status.set_attributes(attr_black) changed = False if dif < datetime.timedelta(0,TIME_UPCOMING): if not signalized: self.dispatcher.emit("upcoming-recording") signalized = True elif signalized: signalized = True if dif < datetime.timedelta(0,TIME_BLINK_START): if parpadeo: status.set_text("") parpadeo = False else: parpadeo = True # Timer(60,self.check_schedule) else: # Not current or pending recordings if event_type.get_text(): event_type.set_text("") if status.get_text(): status.set_text("") if title.get_text() != _("No upcoming events"): title.set_text(_("No upcoming events")) gtk.gdk.threads_leave() time.sleep(0.5) gtk.gdk.threads_enter() self.check_schedule() gtk.gdk.threads_leave() return True
def update_scheduler_timeout(self, status, event_type, title): """GObject.timeout callback with 500 ms intervals""" global status_label_changed, status_label_blink, signalized if self.recorder.current_mediapackage and not self.recorder.current_mediapackage.manual: start = self.recorder.current_mediapackage.getLocalDate() duration = self.recorder.current_mediapackage.getDuration() / 1000 end = start + datetime.timedelta(seconds=duration) dif = end - datetime.datetime.now() if dif < datetime.timedelta(0): return True if self.recorder.current_mediapackage.anticipated: status.set_text("") event_type.set_text(CURRENT_TEXT) title.set_text(self.recorder.current_mediapackage.title) return True status.set_text(_("Stopping in {0}").format(readable.long_time(dif))) event_type.set_text(CURRENT_TEXT) title.set_text(self.recorder.current_mediapackage.title) if dif < datetime.timedelta(0, TIME_RED_STOP): if not status_label_changed: status.set_name('red_coloured') status_label_changed = True elif status_label_changed: status.set_name('black_coloured') status_label_changed = False if dif < datetime.timedelta(0,TIME_BLINK_STOP): if status_label_blink: status.set_name('blinking_coloured_from') else: status.set_name('blinking_coloured_to') status_label_blink = not status_label_blink else: next_mediapackage = self.repo.get_next_mediapackage() if next_mediapackage and next_mediapackage.isScheduled(): start = next_mediapackage.getLocalDate() dif = start - datetime.datetime.now() event_type.set_text(NEXT_TEXT) title.set_text(next_mediapackage.title) status.set_text(_("Starting in {0}").format(readable.long_time(dif))) if dif < datetime.timedelta(0,TIME_UPCOMING): if not signalized: self.dispatcher.emit("recorder-upcoming-event") signalized = True elif signalized: signalized = False if dif < datetime.timedelta(0,TIME_RED_START): if not status_label_changed: status.set_name('red_coloured') status_label_changed = True elif status_label_changed: status.set_name('black_coloured') status_label_changed = False if dif < datetime.timedelta(0,TIME_BLINK_START): if status_label_blink: status.set_name('blinking_coloured_from') else: status.set_name('blinking_coloured_to') status_label_blink = not status_label_blink else: # Not current or pending recordings if event_type.get_text(): event_type.set_text("") if status.get_text(): status.set_text("") title.set_text(_("No upcoming events")) return True