From 70339a551a8b29c39655f20b7afdc40f9b23ffe0 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 15 Dec 2012 17:08:46 +0000 Subject: added http redirect support in the url dialog git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3067 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Ui/skinned/addurldialog.cpp | 17 +++++++++++++++-- src/plugins/Ui/skinned/addurldialog.h | 2 ++ src/qmmpui/playlistformat.h | 2 +- src/qmmpui/playlistparser.cpp | 11 ++++++++++- 4 files changed, 28 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/plugins/Ui/skinned/addurldialog.cpp b/src/plugins/Ui/skinned/addurldialog.cpp index 2c353b135..1ad37b36a 100644 --- a/src/plugins/Ui/skinned/addurldialog.cpp +++ b/src/plugins/Ui/skinned/addurldialog.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -119,12 +118,25 @@ void AddUrlDialog::accept( ) void AddUrlDialog::readResponse(QNetworkReply *reply) { - addButton->setEnabled(true); disconnect(m_http, SIGNAL(finished (QNetworkReply *)), 0, 0); if (reply->error() != QNetworkReply::NoError) QMessageBox::critical (this, tr("Error"), reply->errorString ()); else if (!urlComboBox->currentText().isEmpty()) { + QUrl url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); + + if(!url.isEmpty() && url != m_redirect_url) + { + m_redirect_url = url; + connect(m_http, SIGNAL(finished (QNetworkReply *)), SLOT(readResponse(QNetworkReply *))); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", QString("qmmp/%1").arg(Qmmp::strVersion()).toAscii()); + m_http->get(request); + reply->deleteLater(); + return; + } + m_redirect_url.clear(); + QString s = urlComboBox->currentText(); PlaylistFormat* prs = PlaylistParser::instance()->findByPath(s); if (prs) @@ -133,6 +145,7 @@ void AddUrlDialog::readResponse(QNetworkReply *reply) QDialog::accept(); } } + addButton->setEnabled(true); reply->deleteLater(); } diff --git a/src/plugins/Ui/skinned/addurldialog.h b/src/plugins/Ui/skinned/addurldialog.h index 6121c0eb5..f41300bd6 100644 --- a/src/plugins/Ui/skinned/addurldialog.h +++ b/src/plugins/Ui/skinned/addurldialog.h @@ -24,6 +24,7 @@ #include "ui_addurldialog.h" #include #include +#include class QNetworkAccessManager; class QNetworkReply; @@ -55,6 +56,7 @@ private: PlayListModel* m_model; QStringList m_history; QNetworkAccessManager *m_http; + QUrl m_redirect_url; }; #endif //ADDURLDIALOG_H diff --git a/src/qmmpui/playlistformat.h b/src/qmmpui/playlistformat.h index 8ac76c897..2f9b79819 100644 --- a/src/qmmpui/playlistformat.h +++ b/src/qmmpui/playlistformat.h @@ -61,6 +61,6 @@ public: virtual QString name() const = 0; }; -Q_DECLARE_INTERFACE(PlaylistFormat,"PlaylistFormatInterface/1.0"); +Q_DECLARE_INTERFACE(PlaylistFormat,"PlaylistFormatInterface/1.0") #endif diff --git a/src/qmmpui/playlistparser.cpp b/src/qmmpui/playlistparser.cpp index 870edff33..62f77695e 100644 --- a/src/qmmpui/playlistparser.cpp +++ b/src/qmmpui/playlistparser.cpp @@ -61,9 +61,18 @@ QList PlaylistParser::formats() PlaylistFormat *PlaylistParser::findByPath(const QString &filePath) { loadExternalPlaylistFormats(); + QString ext; + if(filePath.contains("://")) //is it url? + { + QString p = QUrl(filePath).encodedPath(); + ext = QFileInfo(p).suffix().toLower(); + } + else + ext = QFileInfo(filePath).suffix().toLower(); + foreach(PlaylistFormat* format, m_formats) { - if (format->hasFormat(QFileInfo(filePath).suffix().toLower())) + if (format->hasFormat(ext)) return format; } return 0; -- cgit v1.2.3-13-gbd6f