From 1ff1ec58b8ad638e7ffa901a38351cecb3478320 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 30 Apr 2010 08:10:56 +0200 Subject: song: raise KeyError instead of returning empty string --- nephilim/plugins/AlbumCover.py | 6 +++--- nephilim/plugins/Library.py | 10 ++++++---- nephilim/plugins/Lyrics.py | 10 +++++----- nephilim/plugins/Playlist.py | 4 ++-- nephilim/song.py | 5 ++++- nephilim/winMain.py | 4 ++-- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/nephilim/plugins/AlbumCover.py b/nephilim/plugins/AlbumCover.py index b630d76..21aaa8c 100644 --- a/nephilim/plugins/AlbumCover.py +++ b/nephilim/plugins/AlbumCover.py @@ -220,14 +220,14 @@ class AlbumCover(Plugin): name = 'Last.fm' def fetch(self, song): - if not song['artist'] or not song['album']: + if not 'artist' in song or 'album' in song: return self.finish() url = QtCore.QUrl('http://ws.audioscrobbler.com/2.0/') url.setQueryItems([('api_key', 'beedb2a8a0178b8059cd6c7e57fbe428'), ('method', 'album.getInfo'), ('artist', song['artist']), ('album', song['album']), - ('mbid', song['MUSICBRAINZ_ALBUMID'])]) + ('mbid', song['?MUSICBRAINZ_ALBUMID'])]) self.fetch2(song, url) self.rep.finished.connect(self.__handle_search_res) @@ -396,7 +396,7 @@ class AlbumCover(Plugin): self.__abort_fetch() file = QtGui.QFileDialog.getOpenFileName(None, - 'Select album cover for %s - %s'%(song['artist'], song['album']), + 'Select album cover for %s - %s'%(song['?artist'], song['?album']), self.__cover_dir, '') if not file: return diff --git a/nephilim/plugins/Library.py b/nephilim/plugins/Library.py index c746af6..0d7e8e1 100644 --- a/nephilim/plugins/Library.py +++ b/nephilim/plugins/Library.py @@ -111,8 +111,9 @@ class LibraryWidget(QtGui.QWidget): for song in songs: cur_item = tree for part in grouping: - tag = song[part] - if not tag: + try: + tag = song[part] + except KeyError: tag = 'Unknown' if tag in cur_item[0]: cur_item = cur_item[0][tag] @@ -123,8 +124,9 @@ class LibraryWidget(QtGui.QWidget): cur_item[0][tag] = [{}, it] cur_item = cur_item[0][tag] it = LibraryWidget.LibrarySongItem('%s%02d %s'%(song['disc'] + '/' if 'disc' in song else '', - song['tracknum'], song['title'])) - it.path = song['file'] + song['tracknum'] if 'tracknum' in song else 0, + song['?title'])) + it.path = song['?file'] it.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled) cur_item[1].appendRow(it) diff --git a/nephilim/plugins/Lyrics.py b/nephilim/plugins/Lyrics.py index d558165..4dc647e 100644 --- a/nephilim/plugins/Lyrics.py +++ b/nephilim/plugins/Lyrics.py @@ -92,7 +92,7 @@ class LyricsWidget(QtGui.QWidget): self.__text_view.clear() self.__label.setText('%s by %s on %s'\ - %(song['title'], song['artist'], song['album'])) + %(song['?title'], song['?artist'], song['?album'])) if lyrics: self.logger.info('Setting new lyrics.') self.__text_view.insertPlainText(lyrics) @@ -150,7 +150,7 @@ class Lyrics(Plugin): def fetch(self, song): url = QtCore.QUrl(self.__apiaddress) - url.setQueryItems([('func', 'getArtist'), ('artist', song['artist']), + url.setQueryItems([('func', 'getArtist'), ('artist', song['?artist']), ('fmt', 'xml'), ('action', 'lyrics')]) self.fetch2(song, url) self.rep.finished.connect(self.__handle_artist_res) @@ -171,7 +171,7 @@ class Lyrics(Plugin): url = QtCore.QUrl(self.__apiaddress) url.setQueryItems([('action', 'lyrics'), ('func', 'getSong'), ('artist', artist), - ('song', self.song['title']), ('fmt', 'xml')]) + ('song', self.song['?title']), ('fmt', 'xml')]) self.rep = self.nam.get(QtNetwork.QNetworkRequest(url)) self.rep.finished.connect(self.__handle_search_res) self.rep.error.connect(self.handle_error) @@ -212,7 +212,7 @@ class Lyrics(Plugin): def fetch(self, song): url = QtCore.QUrl('http://www.animelyrics.com/search.php') - url.setQueryItems([('t', 'performer'), ('q', song['artist'])]) + url.setQueryItems([('t', 'performer'), ('q', song['?artist'])]) self.fetch2(song, url) self.rep.finished.connect(self.__handle_search_res) @@ -226,7 +226,7 @@ class Lyrics(Plugin): url = None for elem in tree.iterfind('.//a'): - if ('href' in elem.attrib) and elem.text and (self.song['title'] in elem.text): + if ('href' in elem.attrib) and elem.text and (self.song['?title'] in elem.text): url = QtCore.QUrl('http://www.animelyrics.com/%s'%elem.get('href')) if not url: diff --git a/nephilim/plugins/Playlist.py b/nephilim/plugins/Playlist.py index ed86393..df78a44 100644 --- a/nephilim/plugins/Playlist.py +++ b/nephilim/plugins/Playlist.py @@ -114,7 +114,7 @@ class PlaylistTree(QtGui.QTreeWidget): for song in self.plugin.mpclient.playlistinfo(): item = PlaylistSongItem(PlaylistEntryRef(self.plugin.mpclient, song['id'])) for i in range(len(columns)): - item.setText(i, song[columns[i]]) + item.setText(i, song['?' + columns[i]]) self.addTopLevelItem(item) def keyPressEvent(self, event): @@ -162,7 +162,7 @@ class PlaylistTree(QtGui.QTreeWidget): def _add_selected_same(self, tag): """Adds all tracks in DB with tag 'tag' same as selected tracks.""" for it in self.selectedItems(): - self.plugin.mpclient.findadd(tag, it.song[tag]) + self.plugin.mpclient.findadd(tag, it.song['?' + tag]) def _show_context_menu(self, pos): if not self.indexAt(pos).isValid(): diff --git a/nephilim/song.py b/nephilim/song.py index fb18ed3..6cf0a6b 100644 --- a/nephilim/song.py +++ b/nephilim/song.py @@ -65,7 +65,10 @@ class Song(dict): return self['file'] elif key == 'albumartist': return self['artist'] - return '' + elif key == 'songdir': + return os.path.dirname(self['file']) + + raise KeyError def __contains__(self, item): if dict.__contains__(self, item): diff --git a/nephilim/winMain.py b/nephilim/winMain.py index fd6be88..cbd2649 100644 --- a/nephilim/winMain.py +++ b/nephilim/winMain.py @@ -171,8 +171,8 @@ class winMain(QtGui.QMainWindow): state = self.mpclient.status()['state'] state = 'playing' if state == 'play' else 'paused' if state == 'pause' else 'stopped' if song: - self.setWindowTitle('%s by %s - %s [%s]'%(song['title'], song['artist'], APPNAME, state)) - self.__statuslabel.setText('%s by %s on %s [%s]'%(song['title'], song['artist'],song['album'], state)) + self.setWindowTitle('%s by %s - %s [%s]'%(song['?title'], song['?artist'], APPNAME, state)) + self.__statuslabel.setText('%s by %s on %s [%s]'%(song['?title'], song['?artist'],song['?album'], state)) else: self.setWindowTitle(APPNAME) self.__statuslabel.setText('') -- cgit v1.2.3