From: Philipp Spitzer Date: Tue, 16 Apr 2013 20:52:25 +0000 (+0000) Subject: Alarms are reported via QSystemTray now (see ticket #46). X-Git-Tag: 0.6.0~16 X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/commitdiff_plain/3a09de61b4b50586d7e7e1266a3ddb15aaeaf417 Alarms are reported via QSystemTray now (see ticket #46). --- diff --git a/src/alarm/alarm.h b/src/alarm/alarm.h index 2cafd8e..e0d45cd 100644 --- a/src/alarm/alarm.h +++ b/src/alarm/alarm.h @@ -29,7 +29,6 @@ extern "C" } #define APPID "confclerk-alarm" -const int PRE_EVENT_ALARM_SEC = -15*60; // alarm goes off 15 minutes before start of event class Alarm : public QObject { diff --git a/src/app/appsettings.h b/src/app/appsettings.h index a93c0aa..892e142 100644 --- a/src/app/appsettings.h +++ b/src/app/appsettings.h @@ -40,6 +40,7 @@ class AppSettings static void setProxyAddress(const QString &aAddress); static void setProxyPort(const quint16 aPort); static void setDirectConnection(bool aDirectConnection); + static int preEventAlarmSec() {return 60*15;} ///< seconds that alarm should ring before an event starts }; #endif /* APPSETTINGS_H */ diff --git a/src/gui/eventdialog.cpp b/src/gui/eventdialog.cpp index baaa1b5..a41d794 100644 --- a/src/gui/eventdialog.cpp +++ b/src/gui/eventdialog.cpp @@ -112,7 +112,7 @@ void EventDialog::alarmClicked() #ifdef MAEMO // add alarm to the 'alarmd' Alarm alarm; - alarm.addAlarm(event.conferenceId(), event.id(), event.title(), event.start().addSecs(PRE_EVENT_ALARM_SEC)); + alarm.addAlarm(event.conferenceId(), event.id(), event.title(), event.start().addSecs(-AppSettings::preEventAlarmSec())); #endif /* MAEMO */ } event.update("alarm"); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 6ab972c..b20b3ba 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -30,6 +30,7 @@ #include "track.h" #include "eventmodel.h" #include "delegate.h" +#include "room.h" #include "conference.h" @@ -106,6 +107,7 @@ MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) { // systm tray icon connect(systemTrayIcon, SIGNAL(messageClicked()), SLOT(onSystemTrayMessageClicked())); + connect(systemTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(onSystemTrayMessageClicked())); // timer connect(alarmTimer, SIGNAL(timeout()), SLOT(onAlarmTimerTimeout())); @@ -217,20 +219,47 @@ void MainWindow::onSearchResultChanged() { void MainWindow::onSystemTrayMessageClicked() { - // TODO: Hide icon - // systemTrayIcon->hide(); + systemTrayIcon->hide(); } void MainWindow::onAlarmTimerTimeout() { - // TODO: Show Message if an alarm is set on an event that's starting soon and delete the corresponding alarm. - /* + // determine if an alarm is set on an event that's starting soon + QList events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), Conference::activeConference()); + if (events.empty()) return; + + // build a message string + Event event; + QString title; + QString message; + if (events.size() == 1) { + event = events.first(); + title = tr("Next event at %1").arg(event.start().toString()); + message = tr("Title: %1\nRoom: %2").arg(event.title()).arg(event.room()->name()); + } else { + title = tr("%1 upcoming events").arg(events.size()); + QStringList messages; + foreach (event, events) { + messages += tr("Start: %1; Title: %2; Room: %3").arg(event.start().toString()).arg(event.title()).arg(event.room()->name()); + } + message = messages.join("\n"); + } + + // and delete the corresponding alarm + foreach (event, events) { + event.setHasAlarm(false); + event.update("alarm"); + onEventChanged(event.id(), false); + } + + // show message systemTrayIcon->show(); - qDebug() << systemTrayIcon->geometry(); // gets moved to the correct location only at second usage. at least under X11/awesome, not on Win32/XP - systemTrayIcon->showMessage("title", "message", QSystemTrayIcon::Information, 1000); + // 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); + qApp->processEvents(); + systemTrayIcon->showMessage(title, message, QSystemTrayIcon::Information, 60*60*24*1000); QApplication::alert(this); QApplication::beep(); - */ } diff --git a/src/mvc/event.cpp b/src/mvc/event.cpp index 92f87c1..77f8f8d 100644 --- a/src/mvc/event.cpp +++ b/src/mvc/event.cpp @@ -94,6 +94,15 @@ QList Event::conflictEvents(int aEventId, int conferenceId) { } +QList Event::getImminentAlarmEvents(int maxSecToAlarm, int conferenceId) { + QSqlQuery query; + query.prepare(selectQuery() + "WHERE xid_conference = :conf AND (start < :start AND alarm = 1) ORDER BY start, duration"); + query.bindValue(":conf", conferenceId); + query.bindValue(":start", convertToDb(QDateTime::currentDateTime().addSecs(maxSecToAlarm), QVariant::DateTime)); + return load(query); +} + + QList Event::getFavByDate(const QDate& date, int conferenceId) { QSqlQuery query; diff --git a/src/mvc/event.h b/src/mvc/event.h index 1792271..360772d 100644 --- a/src/mvc/event.h +++ b/src/mvc/event.h @@ -49,6 +49,7 @@ public: static QList getByTrack(int id); static QList getByDateAndRoom(const QDate& date, int conferenceId); static QList conflictEvents(int aEventId, int conferenceId); + static QList getImminentAlarmEvents(int maxSecToAlarm, int conferenceId); public: int id() const { return value("id").toInt(); } int conferenceId() const { return value("xid_conference").toInt(); } diff --git a/src/mvc/treeview.cpp b/src/mvc/treeview.cpp index 0f3eb24..79e0f61 100644 --- a/src/mvc/treeview.cpp +++ b/src/mvc/treeview.cpp @@ -110,7 +110,7 @@ bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aP #ifdef MAEMO // add alarm to the 'alarmd' Alarm alarm; - alarm.addAlarm(event.conferenceId(), event.id(), event.title(),event.start().addSecs(PRE_EVENT_ALARM_SEC)); + alarm.addAlarm(event.conferenceId(), event.id(), event.title(),event.start().addSecs(-AppSettings::preEventAlarmSec())); #endif /* MAEMO */ } event.update("alarm");