aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2008-06-27 05:53:20 -0400
committerJason A. Donenfeld <Jason@zx2c4.com>2008-06-27 05:53:20 -0400
commit9d904fb6b42692951227d6d7fda9aca4dd414977 (patch)
treee78c33f6d8d57495c215da8c79823d2ad65632be
parentAdded delta to prevent floating point comparison and assignment math errors. (diff)
downloadzmusicplayer-9d904fb6b42692951227d6d7fda9aca4dd414977.tar.xz
zmusicplayer-9d904fb6b42692951227d6d7fda9aca4dd414977.zip
Switched to networkaccessmanager to add gzip support.
-rw-r--r--Credentials.cpp53
-rw-r--r--Credentials.h13
-rw-r--r--PlayerWindow.cpp2
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);