示例#1
0
文件: next.py 项目: Sakartu/next
def main():
    (options, conf, args) = config.parse_opts()

    # make sure stdout is unbuffered
    sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

    try: # the database_path is usually the show_path, but can be defined in conf
        if ConfKeys.DB_PATH in conf:
            database_path = os.path.join(conf[ConfKeys.DB_PATH], u'next.db')
        else:
            database_path = os.path.join(conf[ConfKeys.SHOW_PATH], u'next.db')
        database_path = os.path.expanduser(os.path.expandvars(database_path))
    except KeyError:
        print(u'No show_path or database_path defined in configuration, aborting!')
        sys.exit(-1)

    # initialize the sqlite database
    try:
        if os.path.exists(database_path) or os.access(os.path.dirname(database_path), os.W_OK | os.R_OK):
            conf[ConfKeys.DB_CONN] = db.initialize(database_path)
        else:
            print(u'Could not access shows database, path "{0}" does not exist or we don\'t have write access!'.format(database_path))
            sys.exit(-1)

    except sqlite3.OperationalError:
        print(u'Could not access shows database, are the permissions correct for "{0}"?'.format(database_path))
        sys.exit(-1)

    # first check for commandline options
    if options.func:
        try:
            options.func()
        except UserCancelled: 
            print "User cancelled!"
        except KeyboardInterrupt:
            print "\nUser pressed ^C!"
        sys.exit(0)

    # couple of usecases:
    # 1. there is an argument provided. this is probably a show that the user wants
    #    us to start, so let's start it.
    # 2. there are no arguments provided. provide the user with a query what he wants

    if args:
        # 1. user provided a showname, find it in the db, then play it.
        s = db.find_show(conf, u' '.join(args))
        if s:
            player.play_show(conf, s)
        else:
            print u'Show "{0}" could not be found!'.format(u' '.join(args))
    else:
        # 2. user provided nothing, popup a list of options
        ui = TUI(conf)
        try:
            ui.cmdloop()
        except KeyboardInterrupt:
            print "\nUser pressed ^C, exitting!"
示例#2
0
文件: tui.py 项目: Sakartu/next
    def do_play(self, line=None):
        '''
        A TUI function that plays a new episode from the user-specified show
        '''
        all_shows = db.all_shows(self.conf)
        if not all_shows:
            print u'There are no shows to play!'
            return
        if line:
            candidates = filter(lambda s : set(line.split()) <= set(s.name.lower().split()), all_shows)
            if not candidates:
                print u'No show found for "{0}"'.format(line)
                return
            #just assume the first show
            show = candidates[0]
        else:
            print u'Which show would you like to play the next ep from?'
            print_shows(self.conf, all_shows)
            number = int(get_input(u'Show number: ', range(1, len(all_shows) + 1)))
            show = all_shows[number - 1]

        if show:
            player.play_show(self.conf, show)