From 41126d016ec42cc538fb9c8af7bdaf625e333327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 26 Jun 2015 18:22:16 +0200 Subject: [PATCH] fixed zone date --- .../datetime/deviceplugindatetime.cpp | 101 +++++++++++------- .../datetime/deviceplugindatetime.h | 10 +- .../datetime/deviceplugindatetime.json | 38 ++----- 3 files changed, 75 insertions(+), 74 deletions(-) diff --git a/plugins/deviceplugins/datetime/deviceplugindatetime.cpp b/plugins/deviceplugins/datetime/deviceplugindatetime.cpp index 798589ea..a630eb2a 100644 --- a/plugins/deviceplugins/datetime/deviceplugindatetime.cpp +++ b/plugins/deviceplugins/datetime/deviceplugindatetime.cpp @@ -84,27 +84,40 @@ #include "plugininfo.h" #include "loggingcategories.h" -#include - DevicePluginDateTime::DevicePluginDateTime() { m_timer = new QTimer(this); m_timer->setInterval(1000); + qCDebug(dcDateTime) << configuration(); + + m_timeZone = QTimeZone(configValue("timezone").toByteArray()); + connect(m_timer, &QTimer::timeout, this, &DevicePluginDateTime::timeout); + connect(this, &DevicePluginDateTime::configValueChanged, this, &DevicePluginDateTime::onConfigValueChanged); +} + +DeviceManager::HardwareResources DevicePluginDateTime::requiredHardware() const +{ + return DeviceManager::HardwareResourceNone; +} + +QList DevicePluginDateTime::configurationDescription() const +{ + QList params; + ParamType timezoneParamType("timezone", QVariant::String, "Europe/Vienna"); + QList allowedValues; + foreach (QByteArray timeZone, QTimeZone::availableTimeZoneIds()) { + allowedValues.append(timeZone); + } + timezoneParamType.setAllowedValues(allowedValues); + params.append(timezoneParamType); + return params; } DeviceManager::DeviceSetupStatus DevicePluginDateTime::setupDevice(Device *device) { // check the DeviceClassId - if(device->deviceClassId() != dateTimeDeviceClassId){ - return DeviceManager::DeviceSetupStatusFailure; - } - - // make shore there is just one date/time - if (myDevices().count() != 0 && myDevices().takeFirst()->id() != device->id()) { - return DeviceManager::DeviceSetupStatusFailure; - } device->setName("Time (" + device->paramValue("timezone").toString() + ")"); m_timeZone = QTimeZone(device->paramValue("timezone").toByteArray()); @@ -119,29 +132,10 @@ DeviceManager::DeviceSetupStatus DevicePluginDateTime::setupDevice(Device *devic return DeviceManager::DeviceSetupStatusFailure; } -DeviceManager::DeviceError DevicePluginDateTime::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) +void DevicePluginDateTime::deviceRemoved(Device *device) { - Q_UNUSED(deviceClassId); - - QList deviceDescriptors; - foreach (QByteArray timeZone, QTimeZone::availableTimeZoneIds()) { - QByteArray continent = params.paramValue("continent").toByteArray(); - if(timeZone.contains(continent)){ - DeviceDescriptor descriptor(dateTimeDeviceClassId, timeZone.right(timeZone.length() - (continent.length() + 1)), continent); - ParamList params; - params.append(Param("timezone", timeZone)); - descriptor.setParams(params); - deviceDescriptors.append(descriptor); - } - } - emit devicesDiscovered(dateTimeDeviceClassId, deviceDescriptors); - - return DeviceManager::DeviceErrorAsync; -} - -DeviceManager::HardwareResources DevicePluginDateTime::requiredHardware() const -{ - return DeviceManager::HardwareResourceNone; + Q_UNUSED(device); + m_timer->stop(); } DeviceManager::DeviceError DevicePluginDateTime::executeAction(Device *device, const Action &action) @@ -152,20 +146,30 @@ DeviceManager::DeviceError DevicePluginDateTime::executeAction(Device *device, c return DeviceManager::DeviceErrorNoError; } -void DevicePluginDateTime::deviceRemoved(Device *device) +void DevicePluginDateTime::startMonitoringAutoDevices() { - Q_UNUSED(device); - m_timer->stop(); + foreach (Device *device, myDevices()) { + if (device->deviceClassId() == dateDeviceClassId) { + return; // We already have a Auto Mock device... do nothing. + } + } + + DeviceDescriptor dateDescriptor(dateDeviceClassId, QString("Date"), QString(m_timeZone.id())); + ParamList params; + params.append(Param("name", m_timeZone.id())); + dateDescriptor.setParams(params); + + emit autoDevicesAppeared(dateDeviceClassId, QList() << dateDescriptor); } void DevicePluginDateTime::timeout() { - QDateTime zoneTime = QDateTime(QDate::currentDate(), QTime::currentTime(), m_timeZone).toLocalTime(); + QDateTime zoneTime = QDateTime::currentDateTime().toTimeZone(m_timeZone); - if(deviceManager()->findConfiguredDevices(dateTimeDeviceClassId).count() == 1){ - Device *device = deviceManager()->findConfiguredDevices(dateTimeDeviceClassId).first(); - device->setStateValue(minuteStateTypeId, zoneTime.time().minute()); - device->setStateValue(hourStateTypeId, zoneTime.time().hour()); + qCDebug(dcDateTime) << m_timeZone.id() << zoneTime.toString(); + + if(deviceManager()->findConfiguredDevices(dateDeviceClassId).count() == 1){ + Device *device = deviceManager()->findConfiguredDevices(dateDeviceClassId).first(); device->setStateValue(dayStateTypeId, zoneTime.date().day()); device->setStateValue(monthStateTypeId, zoneTime.date().month()); device->setStateValue(monthNameStateTypeId, zoneTime.date().longMonthName(zoneTime.date().month())); @@ -183,3 +187,20 @@ void DevicePluginDateTime::timeout() } } +void DevicePluginDateTime::onConfigValueChanged(const QString ¶mName, const QVariant &value) +{ + Q_UNUSED(paramName) + + QTimeZone newZone = QTimeZone(value.toByteArray()); + if (newZone.isValid()) { + m_timeZone = newZone; + QDateTime zoneTime = QDateTime(QDate::currentDate(), QTime::currentTime(), m_timeZone); + qCDebug(dcDateTime) << "set new time zone:" << value.toString(); + qCDebug(dcDateTime) << "current time" << zoneTime.currentDateTime().toString(); + qCDebug(dcDateTime) << "-----------------------------"; + timeout(); + } else { + qCWarning(dcDateTime) << "could not set new timezone" << value.toString() << ". keeping old time zone:" << m_timeZone; + } +} + diff --git a/plugins/deviceplugins/datetime/deviceplugindatetime.h b/plugins/deviceplugins/datetime/deviceplugindatetime.h index 1b03ca1d..ee6f9dff 100644 --- a/plugins/deviceplugins/datetime/deviceplugindatetime.h +++ b/plugins/deviceplugins/datetime/deviceplugindatetime.h @@ -36,12 +36,15 @@ class DevicePluginDateTime : public DevicePlugin public: explicit DevicePluginDateTime(); - DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; - DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; DeviceManager::HardwareResources requiredHardware() const override; + QList configurationDescription() const override; + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + void deviceRemoved(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; - void deviceRemoved(Device *device) override; + void startMonitoringAutoDevices() override; + private: QTimer *m_timer; @@ -49,6 +52,7 @@ private: private slots: void timeout(); + void onConfigValueChanged(const QString ¶mName, const QVariant &value); diff --git a/plugins/deviceplugins/datetime/deviceplugindatetime.json b/plugins/deviceplugins/datetime/deviceplugindatetime.json index b4f8e3cf..99003d63 100644 --- a/plugins/deviceplugins/datetime/deviceplugindatetime.json +++ b/plugins/deviceplugins/datetime/deviceplugindatetime.json @@ -8,53 +8,29 @@ "deviceClasses": [ { "deviceClassId": "fbf665fb-9aca-423f-a5f2-924e50ebe6ca", - "idName": "dateTime", - "name": "Time", - "createMethods": ["discovery"], - "discoveryParamTypes": [ - { - "name": "continent", - "type": "QString", - "inputType": "TextLine", - "allowedValues": ["Africa", "America", "Antarctica", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific"] - } - ], + "idName": "date", + "name": "Date", + "createMethods": ["auto"], "paramTypes": [ { - "name": "timezone", + "name": "name", "type": "QString", "inputType": "TextLine" } ], "stateTypes": [ - { - "id": "4f867051-bc3c-4b55-8493-10ab74c98a49", - "idName": "minute", - "name": "minute", - "type": "uint", - "unit": "Minutes", - "defaultValue": "0" - }, - { - "id": "5b19d9de-a533-4b6f-b42c-bf8069e31adc", - "idName": "hour", - "name": "hour", - "type": "uint", - "unit": "Hours", - "defaultValue": "0" - }, { "id": "eb5231ea-6a1b-4d7e-a95f-d49e7b25122e", "name": "day", "idName": "day", - "type": "uint", + "type": "int", "defaultValue": "1" }, { "id": "fcd8ec96-4488-438a-8b30-58bfe2a7fae2", "name": "month", "idName": "month", - "type": "uint", + "type": "int", "defaultValue": "1" }, { @@ -75,7 +51,7 @@ "id": "79d4ae9b-ea27-4346-8229-1d90f1ddfc9d", "idName": "year", "name": "year", - "type": "uint", + "type": "int", "defaultValue": "1970" }, {