]> ToastFreeware Gitweb - toast/confclerk.git/blobdiff - src/gui/mainwindow.cpp
Adjust shown event time when displayTimeShift is set.
[toast/confclerk.git] / src / gui / mainwindow.cpp
index de311f970a852f60488dedda46a16a9cd0752e30..550e3fd0bc8f793bee802be2b99f03f7d06dd969 100644 (file)
@@ -24,6 +24,7 @@
 #include <QNetworkProxy>
 #include <QNetworkAccessManager>
 #include <QNetworkReply>
+#include <QSslConfiguration>
 
 #include "sqlengine.h"
 
@@ -36,6 +37,7 @@
 
 #include <QDialog>
 #include <QMessageBox>
+#include <application.h>
 
 #include "ui_about.h"
 #include "eventdialog.h"
@@ -48,9 +50,6 @@
 #include "tabcontainer.h"
 #include "appsettings.h"
 
-const QString PROXY_USERNAME;
-const QString PROXY_PASSWD;
-
 MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) {
     setupUi(this);
 
@@ -81,11 +80,11 @@ MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) {
         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
@@ -130,6 +129,7 @@ MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) {
         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)));
@@ -239,22 +239,24 @@ void MainWindow::onSystemTrayMessageClicked() {
 
 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");
     }
@@ -269,7 +271,7 @@ void MainWindow::onAlarmTimerTimeout() {
     // 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);
@@ -308,7 +310,8 @@ void MainWindow::useConference(int conferenceId)
 
         // 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;
@@ -322,6 +325,7 @@ void MainWindow::initTabs()
     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();
 
@@ -345,6 +349,7 @@ void MainWindow::unsetConference()
     clearTabs();
     dayNavigator->unsetDates();
     setWindowTitle(saved_title);
+    ((Application*) qApp)->unsetActiveConference();
 }
 
 
@@ -360,11 +365,11 @@ void MainWindow::on_settingsAction_triggered()
     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);
     }
 }
@@ -403,14 +408,35 @@ void MainWindow::on_conferencesAction_triggered()
     // 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()) {
@@ -418,7 +444,7 @@ void MainWindow::networkQueryFinished(QNetworkReply *aReply) {
                 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());
@@ -435,7 +461,11 @@ void MainWindow::importData(const QByteArray &aData, const QString& url, int con
 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());