diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-09-08 15:31:38 +0200 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-09-08 15:31:38 +0200 |
commit | deeda78d5ccfb6a33e214f639cebd34dd790accd (patch) | |
tree | b290893394d700574d1f0ec3c169d180a896fedb /nephilim/mpclient.py | |
parent | c632ef7e3a89add73854aef0ae72d7b0d2d4b16c (diff) |
mpclient/mpd: always use iterators instead of list.
also get rid of some useless functions like retrieve.
Diffstat (limited to 'nephilim/mpclient.py')
-rw-r--r-- | nephilim/mpclient.py | 63 |
1 files changed, 24 insertions, 39 deletions
diff --git a/nephilim/mpclient.py b/nephilim/mpclient.py index 33b50b1..a7b09de 100644 --- a/nephilim/mpclient.py +++ b/nephilim/mpclient.py @@ -43,8 +43,6 @@ class MPClient(QtCore.QObject): _db_timer_id = None #for querying db updates _db_update = None #time of last db update - _retr_mutex = QtCore.QMutex() - logger = None # SIGNALS @@ -118,7 +116,7 @@ class MPClient(QtCore.QObject): if password: self.password(password) else: - self._commands = self._retrieve(self._client.commands) + self._commands = list(self._client.commands()) if not self.__check_command_ok('listallinfo'): self.logger.error('Don\'t have MPD read permission, diconnecting.') @@ -128,7 +126,6 @@ class MPClient(QtCore.QObject): self.__update_outputs() self._db_update = self.stats()['db_update'] - self.emit(QtCore.SIGNAL('connected')) #should be removed self.connect_changed.emit(True) self.logger.info('Successfully connected to MPD.') self._timer_id = self.startTimer(500) @@ -157,7 +154,6 @@ class MPClient(QtCore.QObject): self._cur_song = None self._commands = [] self.outputs = [] - self.emit(QtCore.SIGNAL('disconnected')) #should be removed self.connect_changed.emit(False) self.logger.info('Disconnected from MPD.') def password(self, password): @@ -168,7 +164,7 @@ class MPClient(QtCore.QObject): try: self._client.password(password) self.logger.info('Successfully authenticated') - self._commands = self._retrieve(self._client.commands) + self._commands = list(self._client.commands()) except mpd.CommandError: self.logger.error('Incorrect MPD password.') def is_connected(self): @@ -182,14 +178,20 @@ class MPClient(QtCore.QObject): """Returns a list of songs in current playlist.""" self.logger.info('Listing current playlist.') if not self.__check_command_ok('playlistinfo'): - return [] - return self._array_to_song_array(self._retrieve(self._client.playlistinfo)) + raise StopIteration + for song in self._client.playlistinfo(): + yield Song(song) + raise StopIteration def library(self): """Returns a list of all songs in library.""" self.logger.info('Listing library.') if not self.__check_command_ok('listallinfo'): - return [] - return self._array_to_song_array(self._retrieve(self._client.listallinfo)) + raise StopIteration + for song in self._client.listallinfo(): + if 'file' in song: + yield Song(song) + + raise StopIteration def current_song(self): """Returns the current playing song.""" return self._cur_song @@ -198,8 +200,10 @@ class MPClient(QtCore.QObject): return self._status['state'] == 'play' def find(self, *args): if not self.__check_command_ok('find'): - return [] - return self._array_to_song_array(self._client.find(*args)) + raise StopIteration + for song in self._client.find(*args): + yield Song(song) + raise StopIteration def findadd(self, *args): if not self.__check_command_ok('findadd'): return @@ -243,13 +247,13 @@ class MPClient(QtCore.QObject): if not self.__check_command_ok('tagtypes'): return [] - return map(str.lower, self._retrieve(self._client.tagtypes) + ['file']) + return map(str.lower, list(self._client.tagtypes()) + ['file']) def commands(self): """List all currently available MPD commands.""" return self._commands def stats(self): """Get MPD statistics.""" - return self._retrieve(self._client.stats) + return self._client.stats() def repeat(self, val): """Set repeat playlist to val (True/False).""" @@ -365,7 +369,7 @@ class MPClient(QtCore.QObject): for path in paths: self.logger.info('Adding %s to playlist'%path) self._client.addid(path.encode('utf-8')) - ret = self._client.command_list_end() + ret = list(self._client.command_list_end()) except mpd.CommandError, e: self.logger.error('Error adding files: %s.'%e) if self._status['state'] == 'stop' and ret: @@ -383,27 +387,9 @@ class MPClient(QtCore.QObject): self._client.command_list_end() #### private #### - def _retrieve(self, method): - """Makes sure only one call is made at a time to MPD.""" - self._retr_mutex.lock() - try: - ret = method() - except socket.error: - self.logger.error('Connection to MPD broken.') - self._retr_mutex.unlock() - self.disconnect_mpd() - return None - - self._retr_mutex.unlock() - return ret - def _array_to_song_array(self, array): - """Convert an array to an array of Songs.""" - return map(lambda entry: Song(entry) - , filter(lambda entry: not('directory' in entry), array) - ) def __update_current_song(self): """Update the current song.""" - song = self._retrieve(self._client.currentsong) + song = self._client.currentsong() if not song: self._cur_song = None else: @@ -412,7 +398,7 @@ class MPClient(QtCore.QObject): """Get current status""" if not self._client: return None - ret = self._retrieve(self._client.status) + ret = self._client.status() if not ret: return None @@ -443,7 +429,7 @@ class MPClient(QtCore.QObject): """Update the list of MPD audio outputs.""" if self.__check_command_ok('outputs'): outputs = [] - for output in self._retrieve(self._client.outputs): + for output in self._client.outputs(): outputs.append(MPClient.Output(self, output['outputname'], output['outputid'], bool(output['outputenabled']))) self.outputs = outputs @@ -476,9 +462,8 @@ class MPClient(QtCore.QObject): if not self._status: return self.disconnect_mpd() - self.__update_current_song() - if self._status['songid'] != old_status['songid']: + self.__update_current_song() self.song_changed.emit(PlaylistEntryRef(self, self._status['songid'])) if self._status['time'] != old_status['time']: @@ -505,7 +490,7 @@ class MPClient(QtCore.QObject): if self._status['playlist'] != old_status['playlist']: self.playlist_changed.emit() - outputs = self._retrieve(self._client.outputs) + outputs = list(self._client.outputs()) for i in range(len(outputs)): if int(outputs[i]['outputenabled']) != int(self.outputs[i].state): self.outputs[i].mpd_toggle_state() |