summaryrefslogtreecommitdiff
path: root/nephilim/plugins/Lyrics.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-08-13 08:01:32 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-08-13 08:01:32 +0200
commitc9c8572394c661792839727b29e467104efa0581 (patch)
tree827f7d34a7a44399ec7e74e730673e3eb4782434 /nephilim/plugins/Lyrics.py
parent1b3a7dfad027698ee3218595e7465843add0f3eb (diff)
Lyrics: add a toolbar.
Diffstat (limited to 'nephilim/plugins/Lyrics.py')
-rw-r--r--nephilim/plugins/Lyrics.py79
1 files changed, 63 insertions, 16 deletions
diff --git a/nephilim/plugins/Lyrics.py b/nephilim/plugins/Lyrics.py
index 8b57f6e..f1bd7f6 100644
--- a/nephilim/plugins/Lyrics.py
+++ b/nephilim/plugins/Lyrics.py
@@ -19,6 +19,7 @@ from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QVariant
import socket
+import os
from ..plugin import Plugin
from .. import misc
@@ -37,36 +38,52 @@ class wgLyrics(QtGui.QWidget):
txtView = None # text-object
p = None # plugin
logger = None
+
+ __toolbar = None
+ __label = None
def __init__(self, p, parent=None):
QtGui.QWidget.__init__(self, parent)
self.p = p
self.logger = p.logger
self.curLyrics = ''
+ self.__label = QtGui.QLabel(self)
+
+ # add text area
self.txtView = QtGui.QTextEdit(self)
self.txtView.setReadOnly(True)
- self.setLayout(QtGui.QVBoxLayout())
+ # add toolbar
+ self.__toolbar = QtGui.QToolBar('Lyrics toolbar', self)
+ self.__toolbar.setOrientation(QtCore.Qt.Vertical)
+
+ edit = self.__toolbar.addAction(QtGui.QIcon('gfx/edit.png'), 'Edit lyrics')
+ edit.setCheckable(True)
+ edit.connect(edit, QtCore.SIGNAL('toggled(bool)'), self.__toggle_editable)
+
+ self.__toolbar.addAction(QtGui.QIcon('gfx/save.png'), 'Save lyrics', self.__save_lyrics)
+ self.__toolbar.addAction(QtGui.QIcon('gfx/delete.png'), 'Delete stored file', self.p.del_lyrics_file)
+
+ self.setLayout(QtGui.QGridLayout())
self.layout().setSpacing(0)
self.layout().setMargin(0)
- self.layout().addWidget(self.txtView)
+ self.layout().addWidget(self.__toolbar, 0, 0, -1, 1, QtCore.Qt.AlignTop)
+ self.layout().addWidget(self.__label, 0, 1)
+ self.layout().addWidget(self.txtView, 1, 1)
self.connect(self.p, QtCore.SIGNAL('new_lyrics_fetched'), self.set_lyrics)
def set_lyrics(self, song, lyrics, flags = 0):
if not song:
+ self.__label.clear()
return self.txtView.clear()
if song != self.p.mpclient.current_song():
return
self.txtView.clear()
- if song:
- self.txtView.insertHtml('<b>%s</b>\n<br /><u>%s</u><br />'\
- '<br />\n\n'%(song.title(), song.artist()))
- else:
- return
-
+ self.__label.setText('<b>%s</b> by <u>%s</u> on <u>%s</u>'\
+ %(song.title(), song.artist(), song.album()))
if lyrics:
self.logger.info('Setting new lyrics.')
self.txtView.insertPlainText(lyrics.decode('utf-8'))
@@ -74,6 +91,12 @@ class wgLyrics(QtGui.QWidget):
self.logger.info('Lyrics not found.')
self.txtView.insertPlainText('Lyrics not found.')
+ def __save_lyrics(self):
+ self.p.save_lyrics_file(unicode(self.txtView.toPlainText()).encode('utf-8'))
+
+ def __toggle_editable(self, val):
+ self.txtView.setReadOnly(not val)
+
class Lyrics(Plugin):
o = None
sites = []
@@ -131,6 +154,35 @@ class Lyrics(Plugin):
thread = self.FetchThread(self, self._fetch_lyrics, song)
thread.start()
+ def save_lyrics_file(self, lyrics, path = None):
+ """Save lyrics to a file specified in path.
+ If path is None, then a default value is used."""
+ self.logger.info('Saving lyrics...')
+ try:
+ if path:
+ file = open(path, 'w')
+ else:
+ file = open(self.lyrics_path, 'w')
+ file.write(lyrics)
+ file.close()
+ self.logger.info('Lyrics successfully saved.')
+ except IOError, e:
+ self.logger.error('Error writing lyrics: %s', e)
+
+ def del_lyrics_file(self, song = None):
+ """Delete a lyrics file for song. If song is not specified
+ current song is used."""
+ if not song:
+ path = self.lyrics_path
+ else:
+ path = misc.generate_metadata_path(song, self.settings().value(self.name + '/lyricdir').toString(),
+ self.settings().value(self.name + '/lyricname').toString())
+
+ try:
+ os.remove(path)
+ except IOError, e:
+ self.logger.error('Error removing lyrics file %s: %s'%(path, e))
+
def _fetch_lyrics(self, song):
self.logger.info('Trying to download lyrics from internet.')
lyrics = None
@@ -138,12 +190,8 @@ class Lyrics(Plugin):
self.logger.info('Trying %s.'%site)
lyrics = eval('self.fetch_%s(song)'%site)
if lyrics:
- try:
- file = open(self.lyrics_path, 'w')
- file.write(lyrics)
- file.close()
- except IOError, e:
- self.logger.error('Error saving lyrics: %s'%e)
+ if self.settings().value(self.name + '/store').toBool():
+ self.save_lyrics_file(lyrics)
return self.emit(QtCore.SIGNAL('new_lyrics_fetched'), song, lyrics)
self.emit(QtCore.SIGNAL('new_lyrics_fetched'), song, None)
@@ -166,7 +214,7 @@ class Lyrics(Plugin):
if elem.get('class') == 'lyricbox':
lyrics += etree.tostring(elem, method = 'text', encoding = 'utf-8')
return lyrics
- except socket.error, e:
+ except (socket.error, IOError), e:
self.logger.error('Error downloading lyrics from LyricWiki: %s.'%e)
return None
@@ -181,7 +229,6 @@ class Lyrics(Plugin):
for elem in tree.iterfind('.//a'):
if ('href' in elem.attrib) and elem.text and (song.title() in elem.text):
url = 'http://www.animelyrics.com/%s'%elem.get('href')
- print url
if not url:
return None
#get lyrics