/*************************************************************************** * Copyright (C) 2009-2012 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include "lyricswindow.h" LyricsWindow::LyricsWindow(const QString &artist, const QString &title, QWidget *parent) : QWidget(parent) { ui.setupUi(this); setWindowFlags(Qt::Dialog); setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_QuitOnClose, false); m_requestReply = 0; ui.artistLineEdit->setText(artist); ui.titleLineEdit->setText(title); m_http = new QNetworkAccessManager(this); //load global proxy settings QmmpSettings *gs = QmmpSettings::instance(); if (gs->isProxyEnabled()) { QNetworkProxy proxy(QNetworkProxy::HttpProxy, gs->proxy().host(), gs->proxy().port()); if(gs->useProxyAuth()) { proxy.setUser(gs->proxy().userName()); proxy.setPassword(gs->proxy().password()); } m_http->setProxy(proxy); } connect(m_http, SIGNAL(finished (QNetworkReply *)), SLOT(showText(QNetworkReply *))); on_searchPushButton_clicked(); } LyricsWindow::~LyricsWindow() { } void LyricsWindow::showText(QNetworkReply *reply) { ui.stateLabel->setText(tr("Done")); if (reply->error() != QNetworkReply::NoError) { ui.stateLabel->setText(tr("Error")); ui.textBrowser->setText(reply->errorString()); m_requestReply = 0; reply->deleteLater(); return; } QString content = QString::fromUtf8(reply->readAll().constData()); //qDebug("=%s=",qPrintable(content)); if(m_requestReply == reply) { m_requestReply = 0; reply->deleteLater(); QRegExp artist_regexp("(.*)"); artist_regexp.setMinimal(true); QRegExp song_regexp("(.*)"); song_regexp.setMinimal(true); QRegExp lyrics_regexp("(.*)"); lyrics_regexp.setMinimal(true); QRegExp url_regexp("(.*)"); url_regexp.setMinimal(true); if(artist_regexp.indexIn(content) < 0) { ui.textBrowser->setHtml("" + tr("Error") + ""); return; } if(artist_regexp.indexIn(content) < 0) { ui.textBrowser->setHtml("" + tr("Error") + ""); return; } else m_artist = artist_regexp.cap(1); if(song_regexp.indexIn(content) < 0) { ui.textBrowser->setHtml("" + tr("Error") + ""); return; } else m_title = song_regexp.cap(1); if(lyrics_regexp.indexIn(content) < 0) { ui.textBrowser->setHtml("" + tr("Error") + ""); return; } else if(lyrics_regexp.cap(1) == "Not found") { ui.textBrowser->setHtml("" + tr("Not found") + ""); return; } if(url_regexp.indexIn(content) < 0) { ui.textBrowser->setHtml("" + tr("Error") + ""); 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); request.setRawHeader("Referer", referer.toAscii()); ui.stateLabel->setText(tr("Receiving")); m_http->get(request); reply->deleteLater(); return; } content.replace("<", "<"); QRegExp lyrics_regexp("(.*)"); lyrics_regexp.indexIn(content); QString text = "

" + m_artist + " - " + m_title + "

"; QString lyrics = lyrics_regexp.cap(1); lyrics = lyrics.trimmed(); lyrics.replace("\n", "
"); if(lyrics.isEmpty()) ui.textBrowser->setHtml("" + tr("Not found") + ""); else { text += lyrics; ui.textBrowser->setHtml(text); } reply->deleteLater(); } void LyricsWindow::on_searchPushButton_clicked() { ui.stateLabel->setText(tr("Receiving")); setWindowTitle(QString(tr("Lyrics: %1 - %2")).arg(ui.artistLineEdit->text()) .arg(ui.titleLineEdit->text())); QNetworkRequest request; 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); }