예제 #1
0
    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()
예제 #2
0
파일: apod.py 프로젝트: spartrekus/freevo1
    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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
    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)
예제 #6
0
    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()
예제 #7
0
파일: apod.py 프로젝트: adozenlines/freevo1
    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
예제 #8
0
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()
예제 #9
0
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
예제 #10
0
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
예제 #11
0
 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()
예제 #12
0
    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)
예제 #13
0
    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()
예제 #14
0
    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()
예제 #15
0
    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()
예제 #16
0
    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()
예제 #17
0
    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)
예제 #18
0
 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)
예제 #19
0
    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)
예제 #20
0
    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)
예제 #21
0
    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()
예제 #22
0
    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)
예제 #23
0
 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)
예제 #24
0
 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)
예제 #25
0
 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)
예제 #26
0
    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)
예제 #27
0
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
예제 #28
0
 def reschedule_favorites_complete(self, result):
     if result:
         dialog.show_message(_('Favorites rescheduled'))
     else:
         dialog.show_alert(_('Reschedule failed'))
예제 #29
0
 def reschedule_favorites_complete(self, result):
     if result:
         dialog.show_message(_('Favorites rescheduled'))
     else:
         dialog.show_alert(_('Reschedule failed'))
예제 #30
0
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