From 3b6a0066ef584a076b1a05dc5524cbfa2e2a0bb6 Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 13 Dec 2015 02:38:35 +0100 Subject: Implement WallTimeMonitor --- notificationmonitor.h | 2 -- walltimemonitor.cpp | 65 +++++++++++++++++++++++++++++++++++----- walltimemonitor.h | 3 +- walltimemonitor_p.h | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+), 12 deletions(-) create mode 100644 walltimemonitor_p.h diff --git a/notificationmonitor.h b/notificationmonitor.h index 4aad942..03683ca 100644 --- a/notificationmonitor.h +++ b/notificationmonitor.h @@ -28,8 +28,6 @@ namespace watchfish { -Q_DECLARE_LOGGING_CATEGORY(notificationMonitorCat) - class NotificationMonitorPrivate; class NotificationMonitor : public QObject diff --git a/walltimemonitor.cpp b/walltimemonitor.cpp index 29bccee..78d500b 100644 --- a/walltimemonitor.cpp +++ b/walltimemonitor.cpp @@ -52,28 +52,54 @@ #include #include "walltimemonitor.h" +#include "walltimemonitor_p.h" namespace watchfish { -class WallTimeMonitorPrivate -{ - WallTimeMonitor * const q_ptr; - Q_DECLARE_PUBLIC(WallTimeMonitor) - - WallTimeMonitorPrivate(WallTimeMonitor *q); - ~WallTimeMonitorPrivate(); -}; +Q_LOGGING_CATEGORY(walltimeMonitorCat, "watchfish-WallTimeMonitor") WallTimeMonitorPrivate::WallTimeMonitorPrivate(WallTimeMonitor *q) : q_ptr(q) { + Maemo::Timed::Interface ifc; + ifc.settings_changed_connect(this, SLOT(handleTimedSettingsChanged(Maemo::Timed::WallClock::Info,bool))); + QDBusReply reply = ifc.get_wall_clock_info_sync(); + if (reply.isValid()) { + info = reply.value(); + } else { + qCWarning(walltimeMonitorCat) << "D-Bus error while contacting timed:" << reply.error().message(); + } } WallTimeMonitorPrivate::~WallTimeMonitorPrivate() { + Maemo::Timed::Interface ifc; + ifc.settings_changed_disconnect(this, SLOT(handleTimedSettingsChanged(Maemo::Timed::WallClock::Info,bool))); +} + +void WallTimeMonitorPrivate::handleTimedSettingsChanged(const Maemo::Timed::WallClock::Info &newInfo, bool timeChanged) +{ + Q_Q(WallTimeMonitor); + bool tzChange = newInfo.humanReadableTz() != info.humanReadableTz(); + bool tzaChange = newInfo.tzAbbreviation() != info.tzAbbreviation(); + bool tzoChange = newInfo.secondsEastOfGmt() != info.secondsEastOfGmt(); + bool hourModeChange = newInfo.flagFormat24() != info.flagFormat24(); + + info = newInfo; + + if (tzChange) + emit q->timezoneChanged(); + if (tzaChange) + emit q->timezoneAbbreviationChanged(); + if (tzoChange) + emit q->timezoneOffsetFromUtcChanged(); + if (timeChanged) + emit q->systemTimeChanged(); + if (tzChange || tzaChange || tzoChange || timeChanged || hourModeChange) + emit q->timeChanged(); } WallTimeMonitor::WallTimeMonitor(QObject *parent) @@ -87,4 +113,27 @@ WallTimeMonitor::~WallTimeMonitor() delete d_ptr; } +QDateTime WallTimeMonitor::time() const +{ + return QDateTime::currentDateTime(); +} + +QString WallTimeMonitor::timezone() const +{ + Q_D(const WallTimeMonitor); + return d->info.humanReadableTz(); +} + +QString WallTimeMonitor::timezoneAbbreviation() const +{ + Q_D(const WallTimeMonitor); + return d->info.tzAbbreviation(); +} + +int WallTimeMonitor::timezoneOffsetFromUtc() const +{ + Q_D(const WallTimeMonitor); + return d->info.secondsEastOfGmt(); +} + } diff --git a/walltimemonitor.h b/walltimemonitor.h index e070076..f2f6b95 100644 --- a/walltimemonitor.h +++ b/walltimemonitor.h @@ -26,8 +26,6 @@ namespace watchfish { -Q_DECLARE_LOGGING_CATEGORY(walltimeMonitorCat) - class WallTimeMonitorPrivate; class WallTimeMonitor : public QObject @@ -55,6 +53,7 @@ public: int timezoneOffsetFromUtc() const; signals: + void systemTimeChanged(); void timeChanged(); void timezoneChanged(); void timezoneAbbreviationChanged(); diff --git a/walltimemonitor_p.h b/walltimemonitor_p.h new file mode 100644 index 0000000..e95c100 --- /dev/null +++ b/walltimemonitor_p.h @@ -0,0 +1,83 @@ +/* + * libwatchfish - library with common functionality for SailfishOS smartwatch connector programs. + * Copyright (C) 2015 Javier S. Pedro + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * Parts of this file based on nemo-qml-plugin-time + * Copyright (C) 2012 Jolla Ltd. + * Contact: Martin Jones + * + * You may use this file under the terms of the BSD license as follows: + * + * "Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Jolla Ltd. nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + */ + +#ifndef WATCHFISH_WALLTIMEMONITOR_P_H +#define WATCHFISH_WALLTIMEMONITOR_P_H + +#include +#include + +#include "walltimemonitor.h" + +namespace watchfish +{ + +class WallTimeMonitorPrivate : public QObject +{ + Q_OBJECT + +public: + WallTimeMonitorPrivate(WallTimeMonitor *q); + ~WallTimeMonitorPrivate(); + + Maemo::Timed::WallClock::Info info; + +private slots: + void handleTimedSettingsChanged(const Maemo::Timed::WallClock::Info & newInfo, bool timeChanged); + +private: + WallTimeMonitor * const q_ptr; + Q_DECLARE_PUBLIC(WallTimeMonitor) +}; + +} + +#endif // WATCHFISH_WALLTIMEMONITOR_P_H -- cgit v1.2.3