]> ToastFreeware Gitweb - toast/confclerk.git/blobdiff - src/gui/importschedulewidget.cpp
implemented 'proxy settings' dialog
[toast/confclerk.git] / src / gui / importschedulewidget.cpp
index 20d48acfc9de1f0cfc1eff13c23a6984ad03cdd8..32a9c30cd3de576d6e98c170b0f8bf2079b06c66 100644 (file)
@@ -1,27 +1,42 @@
 #include "importschedulewidget.h"
 
 #include <schedulexmlparser.h>
-#include <sqlengine.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)
-    , mSqlEngine(NULL)
 {
     setupUi(this);
 
     mXmlParser = new ScheduleXmlParser(this);
     connect(mXmlParser, SIGNAL(progressStatus(int)), SLOT(showParsingProgress(int)));
-    connect(mXmlParser, SIGNAL(parsingSchedule(const QString &)), SLOT(setWindowTitle(const QString &)));
+    connect(mXmlParser, SIGNAL(parsingSchedule(const QString &)), SLOT(parsingSchedule(const QString &)));
 
-    connect(import, SIGNAL(clicked()), SLOT(importSchedule()));
-    connect(search, SIGNAL(clicked()), SLOT(searchSchedule()));
+    connect(browse, SIGNAL(clicked()), SLOT(browseSchedule()));
     progressBar->hide();
-    import->setEnabled(false);
+
+    cancel->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,13 +46,16 @@ ImportScheduleWidget::~ImportScheduleWidget()
         delete mXmlParser;
         mXmlParser = NULL;
     }
+    if(mNetworkAccessManager)
+    {
+        delete mNetworkAccessManager;
+        mNetworkAccessManager = NULL;
+    }
 }
 
-void ImportScheduleWidget::setSqlEngine(SqlEngine *aSqlEngine)
+void ImportScheduleWidget::parsingSchedule(const QString &aTitle)
 {
-    Q_ASSERT(aSqlEngine != NULL);
-
-    mSqlEngine = aSqlEngine;
+    importScheduleLabel->setText("Importing: " + aTitle);
 }
 
 void ImportScheduleWidget::showParsingProgress(int progress)
@@ -45,43 +63,78 @@ void ImportScheduleWidget::showParsingProgress(int progress)
     progressBar->setValue(progress);
 }
 
-void ImportScheduleWidget::searchSchedule()
+void ImportScheduleWidget::browseSchedule()
 {
-    Q_ASSERT(mSqlEngine != NULL);
+    QString scheduleFileName = QFileDialog::getOpenFileName(this, tr("Select Conference Schedule"), QDir::homePath(), tr("Schedule Files (*.xml)"));
+    if(QFile::exists(scheduleFileName))
+    {
+        QFile file(scheduleFileName);
+        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+        {
+            qDebug() << "can't open " << file.fileName();
+            return;
+        }
+
+        importData(file.readAll());
 
-    mScheduleFileName = QFileDialog::getOpenFileName(this, tr("Select Conference Schedule"), QDir::homePath(), tr("Schedule Files (*.xml)"));
-    if(QFile::exists(mScheduleFileName))
-        import->setEnabled(true);
+    }
     else
     {
-        import->setEnabled(false);
         progressBar->hide();
     }
 }
 
-void ImportScheduleWidget::importSchedule()
+void ImportScheduleWidget::networkQueryFinished(QNetworkReply *aReply)
 {
-    if(!mSqlEngine)
+    if ( aReply->error() != QNetworkReply::NoError )
     {
-        qDebug() << "ImportScheduleWidget::importSchedule(): sqlEngine not set";
-        return;
+        qDebug() << "Error occured during download: " << aReply->errorString();
     }
-
-    QFile file(mScheduleFileName);
-    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+    else
     {
-        qDebug() << "can't open " << file.fileName();
-        return;
+        importData(aReply->readAll());
     }
+}
+
+void ImportScheduleWidget::downloadSchedule()
+{
+    QNetworkRequest request;
+    request.setUrl(QUrl(SCHEDULE_URL));
+    mNetworkAccessManager->get(request);
+}
 
-    QByteArray data = file.readAll();
+void ImportScheduleWidget::importData(const QByteArray &aData)
+{
+    browse->hide();
+    online->hide();
     progressBar->show();
-    int confId = mXmlParser->parseData(data,mSqlEngine);
+    proxySettings->hide();
+
+    int confId = mXmlParser->parseData(aData);
 
-    // hide stuff
-    import->setEnabled(false);
     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());
+}
+