diff options
| -rw-r--r-- | src/plugins/Ui/skinned/addurldialog.cpp | 17 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/addurldialog.h | 2 | ||||
| -rw-r--r-- | src/qmmpui/playlistformat.h | 2 | ||||
| -rw-r--r-- | src/qmmpui/playlistparser.cpp | 11 |
4 files changed, 28 insertions, 4 deletions
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 <QNetworkRequest> #include <QNetworkReply> #include <QNetworkProxy> -#include <QUrl> #include <QMessageBox> #include <QClipboard> #include <qmmpui/playlistparser.h> @@ -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 <QDialog> #include <QPointer> +#include <QUrl> 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<PlaylistFormat*> 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; |
