#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()
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)
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());
+}
+