]> ToastFreeware Gitweb - toast/confclerk.git/blobdiff - src/gui/importschedulewidget.cpp
implemented 'proxy settings' dialog
[toast/confclerk.git] / src / gui / importschedulewidget.cpp
index 4ff87d8746863f84ea966cf33fa3105f71b4da0d..32a9c30cd3de576d6e98c170b0f8bf2079b06c66 100644 (file)
@@ -1,11 +1,21 @@
 #include "importschedulewidget.h"
 
 #include <schedulexmlparser.h>
+#include "proxysettingsdialog.h"
 
 #include <QDir>
 #include <QFile>
 #include <QFileDialog>
+#include <QNetworkProxy>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
 #include <QDebug>
+#include <appsettings.h>
+
+const QString SCHEDULE_URL = "http://fosdem.org/2010/schedule/xml";
+
+const QString PROXY_USERNAME;
+const QString PROXY_PASSWD;
 
 ImportScheduleWidget::ImportScheduleWidget(QWidget *aParent)
     : QWidget(aParent)
@@ -20,8 +30,13 @@ ImportScheduleWidget::ImportScheduleWidget(QWidget *aParent)
     progressBar->hide();
 
     cancel->hide();
-    online->hide();
     importAction->hide();
+    connect(online, SIGNAL(clicked()), SLOT(downloadSchedule()));
+
+    connect(proxySettings, SIGNAL(clicked()), SLOT(setupProxy()));
+    mNetworkAccessManager = new QNetworkAccessManager(this);
+    connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkQueryFinished(QNetworkReply*)));
+    mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy());
 }
 
 ImportScheduleWidget::~ImportScheduleWidget()
@@ -31,6 +46,11 @@ ImportScheduleWidget::~ImportScheduleWidget()
         delete mXmlParser;
         mXmlParser = NULL;
     }
+    if(mNetworkAccessManager)
+    {
+        delete mNetworkAccessManager;
+        mNetworkAccessManager = NULL;
+    }
 }
 
 void ImportScheduleWidget::parsingSchedule(const QString &aTitle)
@@ -55,20 +75,66 @@ void ImportScheduleWidget::browseSchedule()
             return;
         }
 
-        QByteArray data = file.readAll();
-        browse->hide();
-        progressBar->show();
-        int confId = mXmlParser->parseData(data);
+        importData(file.readAll());
 
+    }
+    else
+    {
         progressBar->hide();
-        browse->show();
-        importScheduleLabel->setText("Import schedule: ");
+    }
+}
 
-        emit(scheduleImported(confId));
+void ImportScheduleWidget::networkQueryFinished(QNetworkReply *aReply)
+{
+    if ( aReply->error() != QNetworkReply::NoError )
+    {
+        qDebug() << "Error occured during download: " << aReply->errorString();
     }
     else
     {
-        progressBar->hide();
+        importData(aReply->readAll());
     }
 }
 
+void ImportScheduleWidget::downloadSchedule()
+{
+    QNetworkRequest request;
+    request.setUrl(QUrl(SCHEDULE_URL));
+    mNetworkAccessManager->get(request);
+}
+
+void ImportScheduleWidget::importData(const QByteArray &aData)
+{
+    browse->hide();
+    online->hide();
+    progressBar->show();
+    proxySettings->hide();
+
+    int confId = mXmlParser->parseData(aData);
+
+    progressBar->hide();
+    browse->show();
+    online->show();
+    proxySettings->show();
+    importScheduleLabel->setText("Import schedule: ");
+
+    emit(scheduleImported(confId));
+}
+
+void ImportScheduleWidget::setupProxy()
+{
+    ProxySettingsDialog dialog;
+    dialog.exec();
+
+    qDebug() << "Setting-up proxy: " << AppSettings::proxyAddress() << ":" << AppSettings::proxyPort();
+    QNetworkProxy proxy(
+            AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy,
+            AppSettings::proxyAddress(),
+            AppSettings::proxyPort(),
+            PROXY_USERNAME,
+            PROXY_PASSWD);
+    QNetworkProxy::setApplicationProxy(proxy);
+
+    mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy());
+}
+