diff --git a/data/interfaces/default/config.html b/data/interfaces/default/config.html index 31d0f4b4..fe789c72 100644 --- a/data/interfaces/default/config.html +++ b/data/interfaces/default/config.html @@ -205,6 +205,7 @@

Delete leftover files (.m3u, .nfo, .sfv, .nzb, etc.)

Add album art as 'folder.jpg' to album folder

Embed album art in each file

+

Embed lyrics

diff --git a/data/interfaces/remix/config.html b/data/interfaces/remix/config.html index f9aab2cc..fe789c72 100644 --- a/data/interfaces/remix/config.html +++ b/data/interfaces/remix/config.html @@ -205,6 +205,7 @@

Delete leftover files (.m3u, .nfo, .sfv, .nzb, etc.)

Add album art as 'folder.jpg' to album folder

Embed album art in each file

+

Embed lyrics

@@ -260,7 +261,7 @@

Re-Encoding Options:


-

Re-encode Postprocessed Albuns

+

Re-encode downloads during postprocessing

Note: this option requires the lame or ffmpeg encoder

<% @@ -275,66 +276,30 @@ - - <% - if config['encoderoutputformat'] == 'ogg': - oggselect = 'selected="selected"' - mp3select = '' - m4aselect = '' - elif config['encoderoutputformat'] == 'm4a': - oggselect = '' - m4aselect = 'selected="selected"' - mp3select = '' - else: - oggselect = '' - m4aselect = '' - mp3select = 'selected="selected"' - %> + Format:
- <% - if config["bitrate"] == 64: - bitrate64select = 'selected="selected"' - bitrate128select = '' - bitrate192select = '' - bitrate256select = '' - bitrate320select = '' - elif config["bitrate"] == 128: - bitrate64select = '' - bitrate128select = 'selected="selected"' - bitrate192select = '' - bitrate256select = '' - bitrate320select = '' - elif config["bitrate"] == 192: - bitrate64select = '' - bitrate128select = '' - bitrate192select = 'selected="selected"' - bitrate256select = '' - bitrate320select = '' - elif config["bitrate"] == 256: - bitrate64select = '' - bitrate128select = '' - bitrate192select = '' - bitrate256select = 'selected="selected"' - bitrate320select = '' - else: - bitrate64select = '' - bitrate128select = '' - bitrate192select = '' - bitrate256select = '' - bitrate320select = 'selected="selected"' - %>

Bitrate: <% @@ -361,5 +326,5 @@


(Web Interface changes require a restart to take effect)

- - \ No newline at end of file +  + diff --git a/headphones/__init__.py b/headphones/__init__.py index 30b6917f..d7865ca2 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -73,6 +73,7 @@ RENAME_FILES = False CLEANUP_FILES = False ADD_ALBUM_ART = False EMBED_ALBUM_ART = False +EMBED_LYRICS = False DOWNLOAD_DIR = None BLACKHOLE = None BLACKHOLE_DIR = None @@ -175,7 +176,7 @@ def initialize(): HTTP_PORT, HTTP_HOST, HTTP_USERNAME, HTTP_PASSWORD, HTTP_ROOT, LAUNCH_BROWSER, GIT_PATH, \ CURRENT_VERSION, LATEST_VERSION, MUSIC_DIR, DESTINATION_DIR, PREFERRED_QUALITY, PREFERRED_BITRATE, DETECT_BITRATE, \ ADD_ARTISTS, CORRECT_METADATA, MOVE_FILES, RENAME_FILES, FOLDER_FORMAT, FILE_FORMAT, CLEANUP_FILES, INCLUDE_EXTRAS, \ - ADD_ALBUM_ART, EMBED_ALBUM_ART, DOWNLOAD_DIR, BLACKHOLE, BLACKHOLE_DIR, USENET_RETENTION, NZB_SEARCH_INTERVAL, \ + ADD_ALBUM_ART, EMBED_ALBUM_ART, EMBED_LYRICS, DOWNLOAD_DIR, BLACKHOLE, BLACKHOLE_DIR, USENET_RETENTION, NZB_SEARCH_INTERVAL, \ LIBRARYSCAN_INTERVAL, DOWNLOAD_SCAN_INTERVAL, SAB_HOST, SAB_USERNAME, SAB_PASSWORD, SAB_APIKEY, SAB_CATEGORY, \ NZBMATRIX, NZBMATRIX_USERNAME, NZBMATRIX_APIKEY, NEWZNAB, NEWZNAB_HOST, NEWZNAB_APIKEY, \ NZBSORG, NZBSORG_UID, NZBSORG_HASH, NEWZBIN, NEWZBIN_UID, NEWZBIN_PASSWORD, LASTFM_USERNAME, INTERFACE, FOLDER_PERMISSIONS, \ @@ -223,6 +224,7 @@ def initialize(): CLEANUP_FILES = bool(check_setting_int(CFG, 'General', 'cleanup_files', 0)) ADD_ALBUM_ART = bool(check_setting_int(CFG, 'General', 'add_album_art', 0)) EMBED_ALBUM_ART = bool(check_setting_int(CFG, 'General', 'embed_album_art', 0)) + EMBED_LYRICS = bool(check_setting_int(CFG, 'General', 'embed_lyrics', 0)) DOWNLOAD_DIR = check_setting_str(CFG, 'General', 'download_dir', '') BLACKHOLE = bool(check_setting_int(CFG, 'General', 'blackhole', 0)) BLACKHOLE_DIR = check_setting_str(CFG, 'General', 'blackhole_dir', '') @@ -404,6 +406,7 @@ def config_write(): new_config['General']['cleanup_files'] = int(CLEANUP_FILES) new_config['General']['add_album_art'] = int(ADD_ALBUM_ART) new_config['General']['embed_album_art'] = int(EMBED_ALBUM_ART) + new_config['General']['embed_lyrics'] = int(EMBED_LYRICS) new_config['General']['download_dir'] = DOWNLOAD_DIR new_config['General']['blackhole'] = int(BLACKHOLE) new_config['General']['blackhole_dir'] = BLACKHOLE_DIR diff --git a/headphones/lyrics.py b/headphones/lyrics.py new file mode 100644 index 00000000..2e489d27 --- /dev/null +++ b/headphones/lyrics.py @@ -0,0 +1,67 @@ +import re +import urllib +from xml.dom import minidom +import htmlentitydefs + +from headphones import logger + +def getLyrics(artist, song): + + params = { "artist": artist, + "song": song, + "fmt": 'xml' + } + + searchURL = 'http://lyrics.wikia.com/api.php?' + urllib.urlencode(params) + + try: + data = urllib.urlopen(searchURL).read() + except Exception, e: + logger.warn('Error opening: %s. Error: %s' % (searchURL, e)) + return + + parseddata = minidom.parseString(data) + + url = parseddata.getElementsByTagName("url") + + if url: + lyricsurl = url[0].firstChild.nodeValue + else: + logger.info('No lyrics found for %s - %s' % (artist, song)) + return + + try: + lyricspage = urllib.urlopen(lyricsurl).read() + except Exception, e: + logger.warn('Error fetching lyrics from: %s. Error: %s' % (lyricsurl, e)) + return + + m = re.compile('''
.*?
(.*?)