Example #1
0
 def options_changed(self):
     options = {
         'random': self.mopidy.tracklist.get_random(timeout=10),
         'single': self.mopidy.tracklist.get_single(timeout=10),
         'consume': self.mopidy.tracklist.get_consume(timeout=10),
         'repeat': self.mopidy.tracklist.get_repeat(timeout=10)
     }
     print_nice('Tracklist Options:', options, format='expand')
def show_tracklist(tracklist):
    print_nice('> Current Tracklist: ', tracklist, format='tracklist')
Example #3
0
 def seeked(self, time_position):
     print_nice('> Current Position is ',
                time_position,
                format='time_position')
Example #4
0
 def track_playback_started(self, tl_track):
     track = tl_track.get('track') if tl_track else None
     self.uri = track.get('uri') if track else None
     print_nice('> Current Track: ', track, format='track')
Example #5
0
 def playback_state_changed(self, old_state, new_state):
     self.state = new_state
     print_nice('> Playback state changed to ', self.state)
Example #6
0
 def mute_changed(self, mute):
     print_nice('> Mute State is ', mute, format='mute')
Example #7
0
 def stream_title_changed(self, title):
     print_nice('> Stream Title: ', title)
Example #8
0
 def volume_changed(self, volume):
     print_nice('> Current volume is ', volume, format='volume')
Example #9
0
 def show_history(self, history):
     print_nice('> History: ', history, format='history')
     if self.save_results:
         with open('result_history.json', 'w') as json_file:
             json.dump(history, json_file)
Example #10
0
 def on_server_error(self, error):
     print_nice('[SERVER_ERROR] ', error, format='error')
Example #11
0
 def show_playlists(self, playlists):
     print_nice('> User Playlists: ', playlists, format='browse')
     if self.save_results:
         with open('result_playlists.json', 'w') as json_file:
             json.dump(playlists, json_file)
Example #12
0
 def show_tracklist(self, tracklist):
     print_nice('> Current Tracklist: ', tracklist, format='tracklist')
     if self.save_results:
         with open('result_tracklist.json', 'w') as json_file:
             json.dump(tracklist, json_file)
Example #13
0
 def show_search_results(self, search_results):
     print_nice('> Search Results: ', search_results, format='search')
     if self.save_results:
         with open('result_search.json', 'w') as json_file:
             json.dump(search_results, json_file)
Example #14
0
    def execute_command(self, command, args=[]):
        # Exit demo program
        if (command == 'exit'):
            self.mopidy.disconnect()
            time.sleep(0.2)
            exit()

        # Connection methods
        elif (command == 'connect'):
            self.mopidy.connect()

        elif (command == 'disconnect'):
            self.mopidy.disconnect()

        # Core methods
        elif (command == 'api'):
            core_api = self.mopidy.core.describe(timeout=40)

            if args:
                filtered_api = {
                    method: desc
                    for method, desc in core_api.items()
                    if any([arg in method for arg in args])
                }
                print_nice('*** MOPIDY CORE API [%s] ***' % ', '.join(args),
                           filtered_api)
            else:
                print_nice('*** MOPIDY CORE API ***', core_api)

        elif (command == 'version'):
            mopidy_version = self.mopidy.core.get_version(timeout=5)
            client_version = self.mopidy.get_client_version()
            print_nice('Mopidy Core Version: ', mopidy_version)
            print_nice('Mopidy-JSON Client Version: ', client_version)

        elif (command == 'send'):
            if args:
                kwargs = {}
                try:
                    for arg in args[1:]:
                        words = arg.split('=')
                        key = words[0]
                        value = int(words[1]) if unicode(words[1]).isnumeric() \
                            else words[1]
                        kwargs.update({key: value})
                    if 'timeout' not in kwargs:
                        kwargs['timeout'] = 40

                    result = self.mopidy.core.send(args[0], **kwargs)
                    print_nice('Result: ', result)

                except Exception as ex:
                    print_nice('Exception: ', ex, format='error')
            else:
                print('Use %s <method> <arg1=vaue1> <arg2=value2> ...\n' %
                      command)

        elif (command == 'debug'):
            self.command_on_off(args,
                                getter=self.get_debug,
                                setter=self.set_debug)

        # Get current track and update self.uri
        elif (command == 'track'):
            tl_track = self.mopidy.playback.get_current_tl_track(timeout=10)
            self.track_playback_started(tl_track)

        elif (command == 'stream'):
            self.mopidy.playback.get_stream_title(
                on_result=self.stream_title_changed)

        elif (command == 'pos'):
            self.command_numeric(args,
                                 getter=self.mopidy.playback.get_time_position,
                                 setter=self.mopidy.playback.seek,
                                 callback=self.seeked,
                                 step=30,
                                 res=1000)

        elif (command == 'state'):
            self.state = self.mopidy.playback.get_state(timeout=5)
            print_nice('Playback State: ', self.state)

        # Playback commands
        elif (command == 'play'):
            if args:
                if unicode(args[0]).isnumeric():
                    self.mopidy.playback.play(tlid=int(args[0]))
            else:
                self.mopidy.playback.play()
        elif (command == 'pause'):
            self.mopidy.playback.pause()
        elif (command == 'stop'):
            self.mopidy.playback.stop()
        elif (command == 'resume'):
            self.mopidy.playback.resume()
        elif (command == 'next'):
            self.mopidy.playback.next()
        elif (command in ('prev', 'previous')):
            self.mopidy.playback.previous()

        # Mixer commands
        elif (command in ('vol', 'volume')):
            self.command_numeric(args,
                                 getter=self.mopidy.mixer.get_volume,
                                 setter=self.mopidy.mixer.set_volume,
                                 callback=self.volume_changed,
                                 step=10)

        elif (command == 'mute'):
            self.command_on_off(args,
                                getter=self.mopidy.mixer.get_mute,
                                setter=self.mopidy.mixer.set_mute)

        # Tracklist commands
        elif (command == 'tracklist'):
            self.mopidy.tracklist.get_tl_tracks(on_result=self.show_tracklist)

        elif (command == 'add'):
            self.mopidy.tracklist.add(uris=self.gen_uris(args))

        elif (command == 'del'):
            if args and all([unicode(arg).isnumeric() for arg in args]):
                self.mopidy.tracklist.remove(
                    criteria={'tlid': [int(i) for i in args]})

        elif (command == 'clear'):
            self.mopidy.tracklist.clear()

        elif (command == 'shuffle'):
            self.mopidy.tracklist.shuffle()

        elif (command == 'random'):
            self.command_on_off(args,
                                getter=self.mopidy.tracklist.get_random,
                                setter=self.mopidy.tracklist.set_random)
        elif (command == 'single'):
            self.command_on_off(args,
                                getter=self.mopidy.tracklist.get_single,
                                setter=self.mopidy.tracklist.set_single)
        elif (command == 'repeat'):
            self.command_on_off(args,
                                getter=self.mopidy.tracklist.get_repeat,
                                setter=self.mopidy.tracklist.set_repeat)
        elif (command == 'consume'):
            self.command_on_off(args,
                                getter=self.mopidy.tracklist.get_consume,
                                setter=self.mopidy.tracklist.set_consume)
        elif (command == 'options'):
            self.options_changed()

        elif (command == 'playlists'):
            self.mopidy.playlists.as_list(on_result=self.show_playlists)

        # 'Tune' the given URIs uris and play them
        elif (command == 'tune'):
            if args:
                self.mopidy.tracklist.clear()
                self.mopidy.tracklist.add(uris=self.gen_uris(args))
                self.mopidy.playback.play()
                self.execute_command('track')

        # History methods
        elif (command == 'history'):
            self.mopidy.history.get_history(on_result=self.show_history)

        # Library methods
        elif (command == 'browse'):
            uri = self.gen_uris(args)[0]
            result = self.mopidy.library.browse(uri=uri, timeout=30)
            print_nice('> Browsing %s :' % uri, result, format='browse')

        elif (command in ['info', 'lookup', 'detail']):
            info = self.mopidy.library.lookup(uris=self.gen_uris(args),
                                              timeout=30)
            print_nice('> Lookup on URIs: ',
                       info,
                       format='expand' if command == 'detail' else 'lookup')

        elif (command in ['image', 'images']):
            images = self.mopidy.library.get_images(uris=self.gen_uris(args),
                                                    timeout=30)
            print_nice('> Images for URIs :', images, format='images')

        elif (command == 'search'):
            if args:
                uris = []
                search_terms = []
                for arg in args:
                    if arg.startswith('#'):
                        arg = self.gen_uris(arg)
                    if ':' in arg:
                        uris.append(arg)
                    else:
                        search_terms.append(arg)
                if not uris:
                    uris = []

                self.mopidy.library.search(query={'any': search_terms},
                                           uris=uris,
                                           on_result=self.show_search_results)

        # Set current uri
        elif (command == 'uri'):
            if args:
                self.uri = self.gen_uris([' '.join(args)])[0]

            print_nice("> Current URI: ", self.uri)

        elif (command == 'save'):
            self.command_on_off(args,
                                getter=self.get_save_results,
                                setter=self.set_save_results)

        elif command != '':
            print("  Unknown command '%s'" % command)
Example #15
0
def show_search_results(search_results):
    print_nice('Search Results: ', search_results, format='search')