/*
* Copyright (C) 2010 Ixonos Plc.
- * Copyright (C) 2011-2013 Philipp Spitzer, gregor herrmann, Stefan Stahl
+ * Copyright (C) 2011-2017 Philipp Spitzer, gregor herrmann, Stefan Stahl
*
* This file is part of ConfClerk.
*
#include <QNetworkProxy>
#include <QNetworkAccessManager>
#include <QNetworkReply>
+#include <QSslConfiguration>
#include "sqlengine.h"
#include <QDialog>
#include <QMessageBox>
+#include <application.h>
#include "ui_about.h"
#include "eventdialog.h"
#include "tabcontainer.h"
#include "appsettings.h"
-const QString PROXY_USERNAME;
-const QString PROXY_PASSWD;
-
MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) {
setupUi(this);
AppSettings::setDirectConnection(true);
QNetworkProxy proxy(
- AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy,
+ AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : (QNetworkProxy::ProxyType)AppSettings::proxyType(),
AppSettings::proxyAddress(),
AppSettings::proxyPort(),
- PROXY_USERNAME,
- PROXY_PASSWD);
+ AppSettings::proxyUsername(),
+ AppSettings::proxyPassword());
QNetworkProxy::setApplicationProxy(proxy);
// event details have changed
addAction(settingsAction);
addAction(quitAction);
+ // make it impossible to hide the toolbar by disallowing its context menu
+ toolBar->setContextMenuPolicy(Qt::PreventContextMenu);
+
// open conference
useConference(Conference::activeConference());
// optimization, see useConference() code
clearTabs();
}
+ connect(mNetworkAccessManager, SIGNAL(sslErrors(QNetworkReply*, QList<QSslError>)), SLOT(sslErrors(QNetworkReply*, QList<QSslError>)));
connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), SLOT(networkQueryFinished(QNetworkReply*)));
connect(mXmlParser, SIGNAL(parsingScheduleBegin()), conferenceModel, SLOT(newConferenceBegin()));
connect(mXmlParser, SIGNAL(parsingScheduleEnd(int)), conferenceModel, SLOT(newConferenceEnd(int)));
void MainWindow::onAlarmTimerTimeout() {
// determine if an alarm is set on an event that's starting soon
- QList<Event> events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), Conference::activeConference());
+ int conferenceId = Conference::activeConference();
+ QList<Event> events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), conferenceId);
if (events.empty()) return;
// build a message string
+ const Conference conference = Conference::getById(conferenceId);
Event event;
QString title;
QString message;
if (events.size() == 1) {
event = events.first();
- title = tr("Next event at %1").arg(event.start().toString("HH:mm"));
+ title = tr("Next event at %1").arg(conference.shiftTime(event.start().time()).toString("HH:mm"));
message = tr("\"%1\"\n(%2)").arg(event.title()).arg(event.room()->name());
} else {
title = tr("%1 upcoming events").arg(events.size());
QStringList messages;
foreach (event, events) {
- messages += tr("%1: \"%2\" (%3)").arg(event.start().toString("HH:mm")).arg(event.title()).arg(event.room()->name());
+ messages += tr("%1: \"%2\" (%3)").arg(conference.shiftTime(event.start().time()).toString("HH:mm")).arg(event.title()).arg(event.room()->name());
}
message = messages.join("\n");
}
// show message
systemTrayIcon->show();
// The next two lines are to prevent a very strange position of the message box the first time at X11/aweseome (not Win32/XP)
- systemTrayIcon->showMessage("ConfClerk", "Your upcoming events", QSystemTrayIcon::Information);
+ systemTrayIcon->showMessage("ConfClerk", tr("Your upcoming events"), QSystemTrayIcon::Information);
qApp->processEvents();
systemTrayIcon->showMessage(title, message, QSystemTrayIcon::Information, 60*60*24*1000);
QApplication::alert(this);
// end of optimization
// initTabs();
- } catch (OrmException& e) {
+ } catch (const OrmException& e) {
+ qDebug() << "OrmException:" << e.text();
// cannon set an active conference
unsetConference(); // TODO: as no active conference is now correctly managed this should be handled as a fatal error
return;
if (confId != -1) // only init tabs if a conference is active
{
Conference active = Conference::getById(confId);
+ ((Application*) qApp)->setActiveConference(active);
QDate startDate = active.start();
QDate endDate = active.end();
clearTabs();
dayNavigator->unsetDates();
setWindowTitle(saved_title);
+ ((Application*) qApp)->unsetActiveConference();
}
if (dialog.exec() == QDialog::Accepted) {
dialog.saveDialogData();
QNetworkProxy proxy(
- AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy,
+ AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : (QNetworkProxy::ProxyType)AppSettings::proxyType(),
AppSettings::proxyAddress(),
AppSettings::proxyPort(),
- PROXY_USERNAME,
- PROXY_PASSWD);
+ AppSettings::proxyUsername(),
+ AppSettings::proxyPassword());
QNetworkProxy::setApplicationProxy(proxy);
}
}
// optimization, see useConference() code
try {
initTabs();
- } catch (OrmException) {
+ } catch (const OrmException& e) {
+ qDebug() << "OrmException:" << e.text();
clearTabs();
}
}
+void MainWindow::sslErrors(QNetworkReply *aReply, const QList<QSslError> &errors) {
+ QString errorString;
+ foreach (const QSslError &error, errors) {
+ if (!errorString.isEmpty()) {
+ errorString += ", ";
+ }
+ errorString += error.errorString();
+ }
+
+ if (QMessageBox::warning(
+ this,
+ tr("SSL errors"),
+ tr("One or more SSL errors have occurred: %1", 0, errors.size()).arg(errorString),
+ QMessageBox::Ignore | QMessageBox::Cancel) == QMessageBox::Ignore) {
+ aReply->ignoreSslErrors();
+ } else {
+ aReply->abort();
+ }
+}
+
void MainWindow::networkQueryFinished(QNetworkReply *aReply) {
if (aReply->error() != QNetworkReply::NoError) {
- error_message(QString("Error occured during download: ") + aReply->errorString());
+ error_message(tr("Error occurred during download: %1").arg(aReply->errorString()));
} else {
QUrl redirectUrl = aReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
if (!redirectUrl.isEmpty()) {
importFromNetwork(redirectUrl.toString(), aReply->request().attribute(QNetworkRequest::User).toInt());
return; // don't enable controls
} else {
- error_message(QString("Error: Cyclic redirection from %1 to itself.").arg(redirectUrl.toString()));
+ error_message(tr("Error: Cyclic redirection from %1 to itself.").arg(redirectUrl.toString()));
}
} else {
importData(aReply->readAll(), aReply->url().toEncoded(), aReply->request().attribute(QNetworkRequest::User).toInt());
void MainWindow::importFromNetwork(const QString& url, int conferenceId)
{
QNetworkRequest request;
+ QSslConfiguration qSslConfiguration = request.sslConfiguration();
+ qSslConfiguration.setProtocol(QSsl::AnyProtocol);
+ qSslConfiguration.setPeerVerifyMode(QSslSocket::QueryPeer);
request.setUrl(QUrl(url));
+ request.setSslConfiguration(qSslConfiguration);
request.setAttribute(QNetworkRequest::User, conferenceId);
mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy());