def search_for_programs(self, menuw, text): if not text: dialog.show_alert(_('Please specify something to search for!')) return pdialog = ProgressDialog(_('Searching, please wait...')) pdialog.show() programs = tv.epg.search(keyword=text, time=(time.time(), 0)) items = [] for prog in programs: items.append(ProgramItem(self.parent, prog, context='search')) if len(items) >= MAX_RESULTS: break items.sort(lambda x, y: cmp(x.prog.start, y.prog.start)) pdialog.hide() if len(items) == 0: dialog.show_alert(_('No matches found for %s') % text) return search_menu = Menu(_('Search Results'), items, item_types='tv program menu') menuw.pushmenu(search_menu) menuw.refresh()
def fetchCurrentPicture(self, arg=None, menuw=None): url = 'http://antwrp.gsfc.nasa.gov/apod/%s' apodpichref = '' try: myfile = urllib.urlopen(url % 'index.html') apodpage = myfile.read() result = re.search("a href=\"(image.*)\"", apodpage) apodpichref = result.group(1) except: #unreachable or url error realurl = url % 'index.html' print 'APOD ERROR: could not open %s' % realurl dialog.show_alert(_('Unable to open URL')) return apodfile = os.path.join(self.apoddir, os.path.basename(apodpichref)) try: urllib.urlretrieve(url % apodpichref, apodfile) imgitem = ImageItem(apodfile, self) imgitem.view(menuw=menuw) except: #unreachable or url error realurl = url % apodpichref print 'APOD ERROR: could not open %s' % realurl dialog.show_alert(_('Unable to open URL')) return
def start_tv(mode=None, channel_id=None): tuner_id = get_tunerid(channel_id) p = plugin.getbyname(plugin.TV) if p is None: dialog.show_alert(_('Cannot get TV plug-in')) return p.Play(mode, tuner_id)
def save_changes(self, arg=None, menuw=None): """ Save favorite """ logger.log( 9, 'save_changes(arg=%r, menuw=%r)', arg, menuw) # this can take some time, as it means although to update the schedule msgtext = _('Saving the changes to this favorite.')+'\n'+_('This may take some time.') pop = dialog.show_working_indicator(msgtext) if self.fav_action == 'edit': # first we remove the old favorite (result, msg) = self.recordclient.removeFavoriteNow(self.origname) elif self.fav_action =='add': result = True if result: # create a new edited favorite (result, msg) = self.recordclient.addEditedFavoriteNow(self.fav.name, self.fav.title, self.fav.channel, self.fav.dow, self.fav.mod, self.fav.priority, self.fav.allowDuplicates, self.fav.onlyNew) if result: if menuw: menuw.delete_submenu() if self.fav_action == 'add': menuw.refresh(reload=1) self.fav_action = 'edit' pop.hide() else: pop.hide() # it is important to show the user this error, # because that means the favorite is removed, # and must be created again msgtext=_('Save failed, favorite was lost')+(':\n%s' % msg) dialog.show_alert(msgtext)
def search_for_programs(self, menuw, text): if not text: dialog.show_alert(_('Please specify something to search for!')) return pdialog = ProgressDialog(_('Searching, please wait...')) pdialog.show() programs = tv.epg.search(keyword=text, time=(time.time(),0)) items = [] for prog in programs: items.append(ProgramItem(self.parent, prog, context='search')) if len(items) >= MAX_RESULTS: break items.sort(lambda x,y: cmp(x.prog.start, y.prog.start)) pdialog.hide() if len(items) == 0: dialog.show_alert(_('No matches found for %s') % text) return search_menu = Menu(_('Search Results'), items, item_types='tv program menu') menuw.pushmenu(search_menu) menuw.refresh()
def fetchCurrentPicture(self, arg=None, menuw=None): url = 'http://antwrp.gsfc.nasa.gov/apod/%s' apodpichref = '' try: myfile=urllib.urlopen(url % 'index.html') apodpage=myfile.read() result = re.search("a href=\"(image.*)\"", apodpage) apodpichref = result.group(1) except: #unreachable or url error realurl = url % 'index.html' print 'APOD ERROR: could not open %s' % realurl dialog.show_alert(_('Unable to open URL')) return apodfile = os.path.join(self.apoddir,os.path.basename(apodpichref)) try: urllib.urlretrieve(url % apodpichref, apodfile) imgitem = ImageItem(apodfile, self) imgitem.view(menuw=menuw) except: #unreachable or url error realurl = url % apodpichref print 'APOD ERROR: could not open %s' % realurl dialog.show_alert(_('Unable to open URL')) return
def search_for_more(arg=None, menuw=None): parent, title = arg # this might take some time, thus we open a popup messages logger.log( 9, String('searching for: %s', title)) pop = dialog.show_working_indicator(_('Searching, please wait...')) # do the search (status, matches) = RecordClient().findMatchesNow(title) pop.hide() if status: items = [] logger.log( 9, 'search found %s matches', len(matches)) # sort by start times f = lambda a, b: cmp(a.start, b.start) matches.sort(f) for prog in matches: items.append(ProgramItem(parent, prog, context='search')) elif matches == 'no matches': # there have been no matches msgtext = _('No matches found for %s') % self.title dialog.show_alert(msgtext) return else: # something else went wrong msgtext = _('Search failed') +(':\n%s' % matches) dialog.show_alert(msgtext) return # create a menu from the search result search_menu = Menu(_('Search Results'), items, item_types='tv program menu') # do not return from the search list to the submenu # where the search was initiated menuw.delete_submenu(refresh = False) menuw.pushmenu(search_menu) menuw.refresh()
def get_tunerid(channel_id): tuner_id = None for vals in config.TV_CHANNELS: tv_channel_id, tv_display_name, tv_tuner_id = vals[:3] if tv_channel_id == channel_id: return tv_tuner_id dialog.show_alert(_('Could not find TV channel %s') % channel_id) return None
def screenshot(self): filename = time.strftime('freevo-screenshot-%Y-%m-%d_%H_%M_%S.bmp') try: osd.screenshot(os.path.join(config.SCREENSHOT_DIR, filename)) dialog.show_alert('Screenshot saved as %s' % filename) except: dialog.show_alert('Failed to save screenshot!') import traceback traceback.print_exc()
def browse(self, arg=None, menuw=None): """ build the items for the directory """ if not os.path.exists(self.dir): dialog.show_alert(_('Recordings Directory does not exist')) return items = segregated_recordings items.sort(lambda l, o: cmp(o.sort(sorting).upper(), l.sort(sorting).upper())) map(lambda x: x.update_info(), items) if sorting_reversed: items.reverse() if arg == 'update': # update because of DiskManager if not self.menu.choices: selected_pos = -1 else: # store the current selected item selected_id = self.menu.selected.id() selected_pos = self.menu.choices.index(self.menu.selected) self.menu.choices = items self.menu.selected = None if selected_pos !=-1 and items: for i in items: # find the selected item if Unicode(i.id()) == Unicode(selected_id): # item is still there, select it self.menu.selected = i break if not self.menu.selected: # item is gone now, try to the selection close # to the old item pos = max(0, min(selected_pos-1, len(items)-1)) self.menu.selected = items[pos] self.menuw.rebuild_page() self.menuw.refresh() else: self.menuw.init_page() self.menuw.refresh() else: # normal menu build item_menu = Menu(self.name, items, reload_func=self.reload, item_types=view_method and 'recordings manager' or 'tv') if view_method: item_menu.table = (75, 25) menuw.pushmenu(item_menu) self.menu = item_menu self.menuw = menuw disk_manager.set_update_menu(self, self.menu, self.menuw)
def screenshot(self): filename = time.strftime("freevo-screenshot-%Y-%m-%d_%H_%M_%S.bmp") try: osd.screenshot(os.path.join(config.SCREENSHOT_DIR, filename)) dialog.show_alert("Screenshot saved as %s" % filename) except: dialog.show_alert("Failed to save screenshot!") import traceback traceback.print_exc()
def view_reminders(self, arg=None, menuw=None): logger.log( 9, 'view_reminders(arg=%r, menuw=%r)', arg, menuw) items = self.get_items() if not len(items): dialog.show_alert(_('No reminders set!')) return reminders_menu = menu.Menu(_( 'View Reminders'), items, reload_func=self.reload, item_types='tv program menu') self.menuw = menuw menuw.pushmenu(reminders_menu) menuw.refresh()
def view_reminders(self, arg=None, menuw=None): logger.log(9, 'view_reminders(arg=%r, menuw=%r)', arg, menuw) items = self.get_items() if not len(items): dialog.show_alert(_('No reminders set!')) return reminders_menu = menu.Menu(_('View Reminders'), items, reload_func=self.reload, item_types='tv program menu') self.menuw = menuw menuw.pushmenu(reminders_menu) menuw.refresh()
def view_favorites(self, arg=None, menuw=None): logger.log( 9, 'view_favorites(arg=%r, menuw=%r)', arg, menuw) if not self.recordclient.pingNow(): dialog.show_alert(self.recordclient.recordserverdown) return items = self.get_items() if not len(items): dialog.show_alert(_('No favorites.')) return favorite_menu = menu.Menu(_( 'View Favorites'), items, reload_func=self.reload, item_types='tv favorite menu') self.menuw = menuw menuw.pushmenu(favorite_menu) menuw.refresh()
def edit_favorite(self, arg=None, menuw=None): """ Edit the settings of a favorite """ logger.log(9, 'edit_favorite(arg=%r, menuw=%r)', arg, menuw) if menuw: menuw.delete_submenu(refresh=False) # get the favorite from the record client (got_fav, fav) = self.recordclient.getFavoriteObjectNow(self.prog) if got_fav: # create a favorite item for the submenu fav_item = FavoriteItem(self, fav, fav_action='edit') # and open the submenu fav_item.display_submenu(menuw=menuw) else: dialog.show_alert(_('Cannot edit favorite %s') % self.name)
def play(self, arg=None, menuw=None): """ Start watching TV """ logger.log(9, 'play(arg=%r, menuw=%r)', arg, menuw) # watching TV should only be possible from the guide if not self.context == 'guide': rc.post_event(MENU_SELECT) return now = time.time() if menuw: menuw.delete_submenu() # Check if the selected program is >7 min in the future if self.prog.start > now + (7 * 60): if menuw: menuw.show() # this program is in the future if self.scheduled: msgtext = _( 'Do you want to remove the Program from the record schedule?' ) confirmbtn = _('Remove') else: msgtext = _( 'This Program is in the future. Do you want to record it?') confirmbtn = _('Record') dialog.show_confirmation(msgtext, lambda: self.toggle_rec(menuw=menuw), proceed_text=confirmbtn) return else: # check if the device is free fc = FreevoChannels() # for that we need the name of the lock file suffix = fc.getVideoGroup(self.prog.channel_id, True, CHANNEL_ID).vdev suffix = suffix.split('/')[-1] tvlockfile = config.FREEVO_CACHEDIR + '/record.' + suffix if os.path.exists(tvlockfile): if menuw: menuw.show() # XXX: In the future add the options to watch what we are # recording or cancel it and watch TV. msgtext = _('Sorry, you cannot watch TV while recording. ') msgtext += _('If this is not true then remove ') msgtext += tvlockfile + '.' dialog.show_alert(msgtext) else: # everything is ok, we can start watching! self.parent.hide() self.parent.player('tv', self.prog.channel_id)
def edit_favorite(self, arg=None, menuw=None): """ Edit the settings of a favorite """ logger.log( 9, 'edit_favorite(arg=%r, menuw=%r)', arg, menuw) if menuw: menuw.delete_submenu(refresh=False) # get the favorite from the record client (got_fav, fav) = self.recordclient.getFavoriteObjectNow(self.prog) if got_fav: # create a favorite item for the submenu fav_item = FavoriteItem(self, fav, fav_action='edit') # and open the submenu fav_item.display_submenu(menuw=menuw) else: dialog.show_alert(_('Cannot edit favorite %s') % self.name)
def start_tvguide(self, arg, menuw): # Check that the TV channel list is not None if not config.TV_CHANNELS: msg = _('The list of TV channels is invalid!\n') msg += _('Please check the config file.') dialog.show_alert(msg) return if arg == 'record': start_tv(None, ('record', None)) return guide = plugin.getbyname('tvguide') if guide: guide.start(self.get_start_time(), start_tv, menuw) else: TVGuide(tv.epg.channels, self.get_start_time(), start_tv, menuw)
def view_favorites(self, arg=None, menuw=None): logger.log(9, 'view_favorites(arg=%r, menuw=%r)', arg, menuw) if not self.recordclient.pingNow(): dialog.show_alert(self.recordclient.recordserverdown) return items = self.get_items() if not len(items): dialog.show_alert(_('No favorites.')) return favorite_menu = menu.Menu(_('View Favorites'), items, reload_func=self.reload, item_types='tv favorite menu') self.menuw = menuw menuw.pushmenu(favorite_menu) menuw.refresh()
def rem_favorite(self, arg=None, menuw=None): """ Remove favorite """ logger.log( 9, 'rem_favorite(arg=%r, menuw=%r)', arg, menuw) name = self.origname (result, msg) = self.recordclient.removeFavoriteNow(name) if result: # if this is successfull if menuw: menuw.delete_submenu() menuw.refresh(reload=1) # and show a short message of success msgtext = text=_('"%s" has been removed from favorites') % name dialog.show_alert(msgtext) else: # if all fails then we should show an error msgtext = _('Remove failed')+(':\n%s' % msg) dialog.show_alert(msgtext)
def rem_favorite(self, arg=None, menuw=None): """ Remove favorite """ logger.log(9, 'rem_favorite(arg=%r, menuw=%r)', arg, menuw) name = self.origname (result, msg) = self.recordclient.removeFavoriteNow(name) if result: # if this is successfull if menuw: menuw.delete_submenu() menuw.refresh(reload=1) # and show a short message of success msgtext = text = _('"%s" has been removed from favorites') % name dialog.show_alert(msgtext) else: # if all fails then we should show an error msgtext = _('Remove failed') + (':\n%s' % msg) dialog.show_alert(msgtext)
def play(self, arg=None, menuw=None): """ Start watching TV """ logger.log( 9, 'play(arg=%r, menuw=%r)', arg, menuw) # watching TV should only be possible from the guide if not self.context == 'guide': rc.post_event(MENU_SELECT) return now = time.time() if menuw: menuw.delete_submenu() # Check if the selected program is >7 min in the future if self.prog.start > now + (7*60): if menuw: menuw.show() # this program is in the future if self.scheduled: msgtext= _('Do you want to remove the Program from the record schedule?') confirmbtn = _('Remove') else: msgtext = _('This Program is in the future. Do you want to record it?') confirmbtn = _('Record') dialog.show_confirmation(msgtext, lambda: self.toggle_rec(menuw=menuw), proceed_text=confirmbtn) return else: # check if the device is free fc = FreevoChannels() # for that we need the name of the lock file suffix = fc.getVideoGroup(self.prog.channel_id, True, CHANNEL_ID).vdev suffix = suffix.split('/')[-1] tvlockfile = config.FREEVO_CACHEDIR + '/record.'+suffix if os.path.exists(tvlockfile): if menuw: menuw.show() # XXX: In the future add the options to watch what we are # recording or cancel it and watch TV. msgtext = _('Sorry, you cannot watch TV while recording. ') msgtext += _('If this is not true then remove ') msgtext += tvlockfile + '.' dialog.show_alert(msgtext) else: # everything is ok, we can start watching! self.parent.hide() self.parent.player('tv', self.prog.channel_id)
def save_changes(self, arg=None, menuw=None): """ Save favorite """ logger.log(9, 'save_changes(arg=%r, menuw=%r)', arg, menuw) # this can take some time, as it means although to update the schedule msgtext = _('Saving the changes to this favorite.') + '\n' + _( 'This may take some time.') pop = dialog.show_working_indicator(msgtext) if self.fav_action == 'edit': # first we remove the old favorite (result, msg) = self.recordclient.removeFavoriteNow(self.origname) elif self.fav_action == 'add': result = True if result: # create a new edited favorite (result, msg) = self.recordclient.addEditedFavoriteNow( self.fav.name, self.fav.title, self.fav.channel, self.fav.dow, self.fav.mod, self.fav.priority, self.fav.allowDuplicates, self.fav.onlyNew) if result: if menuw: menuw.delete_submenu() if self.fav_action == 'add': menuw.refresh(reload=1) self.fav_action = 'edit' pop.hide() else: pop.hide() # it is important to show the user this error, # because that means the favorite is removed, # and must be created again msgtext = _('Save failed, favorite was lost') + (':\n%s' % msg) dialog.show_alert(msgtext)
def get_friendly_channel(channel_id): channel_name = tv_util.get_chan_displayname(channel_id) if not channel_name: dialog.show_alert(_('Could not find TV channel %s') % channel_id) return channel_name
def reschedule_favorites_complete(self, result): if result: dialog.show_message(_('Favorites rescheduled')) else: dialog.show_alert(_('Reschedule failed'))