#include "track.h"
#include "eventmodel.h"
#include "delegate.h"
+#include "room.h"
#include "conference.h"
// systm tray icon
connect(systemTrayIcon, SIGNAL(messageClicked()), SLOT(onSystemTrayMessageClicked()));
+ connect(systemTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(onSystemTrayMessageClicked()));
// timer
connect(alarmTimer, SIGNAL(timeout()), SLOT(onAlarmTimerTimeout()));
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<Event> 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();
- */
}
}
+QList<Event> 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> Event::getFavByDate(const QDate& date, int conferenceId)
{
QSqlQuery query;
static QList<Event> getByTrack(int id);
static QList<Event> getByDateAndRoom(const QDate& date, int conferenceId);
static QList<Event> conflictEvents(int aEventId, int conferenceId);
+ static QList<Event> getImminentAlarmEvents(int maxSecToAlarm, int conferenceId);
public:
int id() const { return value("id").toInt(); }
int conferenceId() const { return value("xid_conference").toInt(); }