diff options
-rw-r--r-- | Credentials.cpp | 53 | ||||
-rw-r--r-- | Credentials.h | 13 | ||||
-rw-r--r-- | PlayerWindow.cpp | 2 |
3 files changed, 39 insertions, 29 deletions
diff --git a/Credentials.cpp b/Credentials.cpp index e5007d3..fd7a926 100644 --- a/Credentials.cpp +++ b/Credentials.cpp @@ -16,8 +16,7 @@ #include <QSizePolicy> #include <QDebug> #include <QtXml> -#include <QBuffer> -#include <QHttp> +#include <QtNetwork> #include <QProgressBar> #include <QStatusBar> @@ -27,9 +26,10 @@ Credentials::Credentials(QString host, QString listingPath, QString songPath, QW , m_port(80) , m_listingPath(listingPath) , m_songPath(songPath) - , m_downloader(0) , m_downloadProgressBar(0) , m_statusBar(0) + , m_networkAccess(0) + , m_reply(0) { QFormLayout *form = new QFormLayout; @@ -82,40 +82,46 @@ void Credentials::login() m_downloadProgressBar->show(); if(m_statusBar) m_statusBar->show(); - m_buffer = new QBuffer; - m_buffer->open(QIODevice::ReadWrite); - if(!m_downloader) { - m_downloader = new QHttp(m_host, m_port, this); - connect(m_downloader, SIGNAL(requestFinished(int, bool)), this, SLOT(requestFinished(int, bool))); - connect(m_downloader, SIGNAL(dataReadProgress(int, int)), this, SLOT(dataReadProgress(int, int))); + if(!m_networkAccess) { + m_networkAccess = new QNetworkAccessManager(this); } - m_downloader->setUser(m_usernameEdit->text(), m_passwordEdit->text()); - m_downloadId = m_downloader->get(m_listingPath, m_buffer); + m_reply = m_networkAccess->get(QNetworkRequest(QUrl( + QString("http://%1:%2@%3:%4/%5") + .arg(m_usernameEdit->text()) + .arg(m_passwordEdit->text()) + .arg(m_host) + .arg(QString::number(m_port)) + .arg(m_listingPath) + ))); + connect(m_reply, SIGNAL(finished()), this, SLOT(downloadFinished())); + connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgress(qint64, qint64))); } -void Credentials::dataReadProgress(int done, int total) +void Credentials::downloadProgress(qint64 done, qint64 total) { if(m_downloadProgressBar) { - m_downloadProgressBar->setMaximum(total); + if(total == -1) { + m_downloadProgressBar->setMaximum(m_reply->rawHeader("Uncompressed-Length").toInt()); + } else { + m_downloadProgressBar->setMaximum(total); + } m_downloadProgressBar->setValue(done); } } -void Credentials::requestFinished(int id, bool error) +void Credentials::downloadFinished() { - if(id != m_downloadId) - return; if(m_downloadProgressBar) { m_downloadProgressBar->hide(); + m_downloadProgressBar->setValue(0); } - if(error) { + if(m_reply->error()) { databaseDownloadFailed(); return; } QDomDocument doc; - if(!doc.setContent(m_buffer->data())) { + if(!doc.setContent(m_reply)) { databaseDownloadFailed(); return; } - m_buffer->deleteLater(); QDomElement songs = doc.documentElement(); @@ -154,11 +160,16 @@ void Credentials::requestFinished(int id, bool error) emit receivedList(songList); } else databaseDownloadFailed(); + m_reply->deleteLater(); } void Credentials::databaseDownloadFailed() { - m_buffer->deleteLater(); - m_errorLabel->setText(QString("<center><font color=\"red\"><b>%1</b></font></center>").arg(m_downloader->errorString())); + m_reply->deleteLater(); + QString errorMessage = m_reply->errorString(); + int index = errorMessage.indexOf("server replied: "); + if(index != -1) + errorMessage = errorMessage.mid(index + 16); + m_errorLabel->setText(QString("<center><font color=\"red\"><b>%1</b></font></center>").arg(errorMessage)); m_errorLabel->show(); setDisabled(false); if(m_statusBar) diff --git a/Credentials.h b/Credentials.h index b23dc0b..9c4bc70 100644 --- a/Credentials.h +++ b/Credentials.h @@ -12,11 +12,11 @@ #include <QList> class QLabel; -class QHttp; +class QNetworkAccessManager; class Song; -class QBuffer; class QProgressBar; class QStatusBar; +class QNetworkReply; class Credentials : public QDialog { @@ -38,16 +38,15 @@ private: QLabel *m_errorLabel; QLineEdit *m_usernameEdit; QLineEdit *m_passwordEdit; - QHttp *m_downloader; - QBuffer *m_buffer; - int m_downloadId; QProgressBar *m_downloadProgressBar; QStatusBar *m_statusBar; + QNetworkAccessManager *m_networkAccess; + QNetworkReply *m_reply; void databaseDownloadFailed(); private slots: - void requestFinished(int id, bool error); - void dataReadProgress(int done, int total); + void downloadFinished(); + void downloadProgress(qint64 done, qint64 total); void login(); signals: diff --git a/PlayerWindow.cpp b/PlayerWindow.cpp index 46f5cfe..75fb452 100644 --- a/PlayerWindow.cpp +++ b/PlayerWindow.cpp @@ -95,7 +95,7 @@ void PlayerWindow::setupUi() m_downloadProgress = new QProgressBar; statusBar()->addWidget(m_downloadProgress, 1); statusBar()->hide(); - m_credentials = new Credentials("zx2c4.com", "/music/getlisting.php?language=xml", "music/getsong.php?hash=%1"); + m_credentials = new Credentials("zx2c4.com", "music/getlisting.php?language=xml", "music/getsong.php?hash=%1"); connect(m_credentials, SIGNAL(receivedList(const QList<Song*>)), this, SLOT(setupTable(const QList<Song*>))); m_treeView->setChildWidget(m_credentials); m_credentials->setDownloadProgressBar(m_downloadProgress); |