diff options
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | README | 2 | ||||
| -rw-r--r-- | src/plugins/General/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/plugins/General/General.pro | 4 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswindow.cpp | 87 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswindow.h | 3 |
6 files changed, 70 insertions, 30 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index edf3b5f09..c88711d53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,7 +143,7 @@ PRINT_SUMMARY ("MPRIS support ....................." USE_MPRIS 1) PRINT_SUMMARY ("Scrobbler ........................." USE_SCROBBLER 1) PRINT_SUMMARY ("Tray support ......................" USE_STATICON 1) PRINT_SUMMARY ("Notifier support .................." USE_NOTIFIER 1) -#PRINT_SUMMARY ("Lyrics support ...................." USE_LYRICS 1) +PRINT_SUMMARY ("Lyrics support ...................." USE_LYRICS 1) PRINT_SUMMARY ("HAL support ......................." USE_HAL 1) PRINT_SUMMARY ("UDisks support ...................." USE_UDISKS 1) PRINT_SUMMARY ("Global hotkey support ............." USE_HOTKEY X11_FOUND) @@ -40,7 +40,7 @@ Other features: - MPRIS - Removable device detection (via HAL or UDisks) - Video playback via Mplayer -- Lyrics (using lyricsplugin.com) +- Lyrics (using lyrics.wikia.com) - Cover art support - CUE sheet support - Embedded CUE support (for FLAC and WavPack) diff --git a/src/plugins/General/CMakeLists.txt b/src/plugins/General/CMakeLists.txt index 64ae88887..cb8931cc0 100644 --- a/src/plugins/General/CMakeLists.txt +++ b/src/plugins/General/CMakeLists.txt @@ -2,7 +2,7 @@ SET(USE_MPRIS TRUE CACHE BOOL "enable/disable mpris plugin") SET(USE_SCROBBLER TRUE CACHE BOOL "enable/disable scrobbler plugin") SET(USE_STATICON TRUE CACHE BOOL "enable/disable status icon plugin") SET(USE_NOTIFIER TRUE CACHE BOOL "enable/disable notifier plugin") -#SET(USE_LYRICS TRUE CACHE BOOL "enable/disable lyrics version") +SET(USE_LYRICS TRUE CACHE BOOL "enable/disable lyrics version") SET(USE_HAL TRUE CACHE BOOL "enable/disable hal plugin") SET(USE_UDISKS TRUE CACHE BOOL "enable/disable udisks plugin") SET(USE_HOTKEY TRUE CACHE BOOL "enable/disable global hotkey plugin") diff --git a/src/plugins/General/General.pro b/src/plugins/General/General.pro index 298c36d85..f1f1facfa 100644 --- a/src/plugins/General/General.pro +++ b/src/plugins/General/General.pro @@ -1,5 +1,6 @@ SUBDIRS += statusicon \ notifier \ + lyrics \ scrobbler \ fileops unix:SUBDIRS += mpris \ @@ -7,5 +8,6 @@ unix:SUBDIRS += mpris \ udisks \ hotkey \ covermanager \ - kdenotify + kdenotify \ + streambrowser TEMPLATE = subdirs diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswindow.cpp index a9ec4474c..25bf49554 100644 --- a/src/plugins/General/lyrics/lyricswindow.cpp +++ b/src/plugins/General/lyrics/lyricswindow.cpp @@ -71,24 +71,67 @@ void LyricsWindow::showText(QNetworkReply *reply) return; } QString content = QString::fromUtf8(reply->readAll().constData()); + //qDebug("=%s=",qPrintable(content)); if(m_requestReply == reply) { m_requestReply = 0; - QRegExp js_params("javascript:getContent\\(\\\'(.*)\\\', \\\'(.*)\\\', \\\'(.*)\\\', \\\'(.*)\\\'"); - js_params.setMinimal (true); - js_params.indexIn(content); + reply->deleteLater(); + QRegExp artist_regexp("<artist>(.*)</artist>"); + artist_regexp.setMinimal(true); + QRegExp song_regexp("<song>(.*)</song>"); + song_regexp.setMinimal(true); + QRegExp lyrics_regexp("<lyrics>(.*)</lyrics>"); + lyrics_regexp.setMinimal(true); + QRegExp url_regexp("<url>(.*)</url>"); + url_regexp.setMinimal(true); - QUrl url = QUrl::fromEncoded(QByteArray("http://www.lyricsplugin.com/winamp03/plugin/content.php?") - + "artist=" + js_params.cap(1).toAscii() - + "&title=" + js_params.cap(2).toAscii() - + "&time=" + js_params.cap(3).toAscii() - + "&check=" + js_params.cap(4).toAscii()); + if(artist_regexp.indexIn(content) < 0) + { + ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); + return; + } + + if(artist_regexp.indexIn(content) < 0) + { + ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); + return; + } + else + m_artist = artist_regexp.cap(1); - QString referer = QString("http://www.lyricsplugin.com/winamp03/plugin/?") - + "artist=" + js_params.cap(1) - + "&title=" + js_params.cap(2); + if(song_regexp.indexIn(content) < 0) + { + ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); + return; + } + else + m_title = song_regexp.cap(1); + if(lyrics_regexp.indexIn(content) < 0) + { + ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); + return; + } + else if(lyrics_regexp.cap(1) == "Not found") + { + ui.textBrowser->setHtml("<b>" + tr("Not found") + "</b>"); + return; + } + + if(url_regexp.indexIn(content) < 0) + { + ui.textBrowser->setHtml("<b>" + tr("Error") + "</b>"); + return; + } + + QString temp = url_regexp.cap(1).toAscii(); + qDebug("LyricsWindow: received url = %s", qPrintable(temp)); + temp.replace("http://lyrics.wikia.com/","http://lyrics.wikia.com/index.php?title="); + temp.append("&action=edit"); + + QUrl url = QUrl::fromEncoded(temp.toAscii()); + QString referer = url_regexp.cap(1); qDebug("LyricsWindow: request url = %s", url.toEncoded().constData()); QNetworkRequest request; request.setUrl(url); @@ -98,20 +141,15 @@ void LyricsWindow::showText(QNetworkReply *reply) reply->deleteLater(); return; } - - QRegExp artist_regexp("<div id=\\\"artist\\\">(.*)</div>"); - artist_regexp.setMinimal(true); - QRegExp title_regexp("<div id=\\\"title\\\">([^<]*)</div>"); - QRegExp lyrics_regexp("<div id=\\\"lyrics\\\">([^<]*)</div>"); - artist_regexp.indexIn(content); - title_regexp.indexIn(content); - content.replace("<br />", "[br /]"); + content.replace("<", "<"); + QRegExp lyrics_regexp("<lyrics>(.*)</lyrics>"); lyrics_regexp.indexIn(content); - QString text = "<h2>" +artist_regexp.cap(1) + " - " + title_regexp.cap(1) + "</h2>"; + QString text = "<h2>" + m_artist + " - " + m_title + "</h2>"; QString lyrics = lyrics_regexp.cap(1); - lyrics.replace("[br /]", "<br />"); - if(lyrics.trimmed().isEmpty()) + lyrics = lyrics.trimmed(); + lyrics.replace("\n", "<br>"); + if(lyrics.isEmpty()) ui.textBrowser->setHtml("<b>" + tr("Not found") + "</b>"); else { @@ -127,9 +165,8 @@ void LyricsWindow::on_searchPushButton_clicked() setWindowTitle(QString(tr("Lyrics: %1 - %2")).arg(ui.artistLineEdit->text()) .arg(ui.titleLineEdit->text())); QNetworkRequest request; - request.setUrl(QUrl("http://www.lyricsplugin.com/winamp03/plugin/?artist=" + - ui.artistLineEdit->text()+"&title=" + ui.titleLineEdit->text())); + request.setUrl(QUrl("http://lyrics.wikia.com/api.php?action=lyrics&artist=" + + ui.artistLineEdit->text()+"&song=" + ui.titleLineEdit->text() + "&fmt=xml")); request.setRawHeader("User-Agent", QString("qmmp/%1").arg(Qmmp::strVersion()).toAscii()); m_requestReply = m_http->get(request); } - diff --git a/src/plugins/General/lyrics/lyricswindow.h b/src/plugins/General/lyrics/lyricswindow.h index 026f71d0b..825885a36 100644 --- a/src/plugins/General/lyrics/lyricswindow.h +++ b/src/plugins/General/lyrics/lyricswindow.h @@ -28,7 +28,7 @@ class QNetworkAccessManager; class QNetworkReply; /** - @author Ilya Kotov <forkotov02@hotmail.ru> + @author Ilya Kotov <forkotov02@hotmail.ru> */ class LyricsWindow : public QWidget { @@ -46,6 +46,7 @@ private: Ui::LyricsWindow ui; QNetworkAccessManager *m_http; QNetworkReply *m_requestReply; + QString m_artist, m_title; }; #endif |
