diff --git a/libguh/devicemanager.cpp b/libguh/devicemanager.cpp index 2b3f70fb..cbd8299a 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/devicemanager.cpp @@ -846,9 +846,11 @@ void DeviceManager::loadConfiguredDevices() // We always add the device to the list in this case. If its in the storedDevices // it means that it was working at some point so lets still add it as there might // be rules associated with this device. Device::setupCompleted() will be false. - setupDevice(device); - + DeviceSetupStatus status = setupDevice(device); m_configuredDevices.append(device); + + if (status == DeviceSetupStatus::DeviceSetupStatusSuccess) + postSetupDevice(device); } settings.endGroup(); } diff --git a/plugins/deviceplugins/datetime/alarm.cpp b/plugins/deviceplugins/datetime/alarm.cpp index ba2ebe71..31750aae 100644 --- a/plugins/deviceplugins/datetime/alarm.cpp +++ b/plugins/deviceplugins/datetime/alarm.cpp @@ -272,7 +272,7 @@ bool Alarm::checkTimeTypes(const QDateTime &dateTime) void Alarm::validate(const QDateTime &dateTime) { - qCDebug(dcDateTime) << name() << "validate" << dateTime.toString() << "..."; + qCDebug(dcDateTime) << name() << "validate..."; if (!checkDayOfWeek(dateTime)) return; @@ -285,7 +285,7 @@ void Alarm::validate(const QDateTime &dateTime) if (!checkMinute(dateTime)) return; - qCDebug(dcDateTime) << name() << "match time" << QTime(hours(), minutes()).toString("hh:mm") << "with offset" << m_offset; + qCDebug(dcDateTime) << name() << "time match" << QTime(hours(), minutes()).toString("hh:mm") << "with offset" << m_offset; emit alarm(); } } diff --git a/plugins/deviceplugins/datetime/deviceplugindatetime.cpp b/plugins/deviceplugins/datetime/deviceplugindatetime.cpp index f28cda91..e9432e28 100644 --- a/plugins/deviceplugins/datetime/deviceplugindatetime.cpp +++ b/plugins/deviceplugins/datetime/deviceplugindatetime.cpp @@ -102,7 +102,6 @@ DevicePluginDateTime::DevicePluginDateTime() : connect(this, &DevicePluginDateTime::minuteChanged, this, &DevicePluginDateTime::onMinuteChanged); connect(this, &DevicePluginDateTime::hourChanged, this, &DevicePluginDateTime::onHourChanged); connect(this, &DevicePluginDateTime::dayChanged, this, &DevicePluginDateTime::onDayChanged); - connect(this, &DevicePluginDateTime::timeDataChanged, this, &DevicePluginDateTime::onTimeDataUpdate); connect(this, &DevicePluginDateTime::configValueChanged, this, &DevicePluginDateTime::onConfigValueChanged); } @@ -173,8 +172,10 @@ DeviceManager::DeviceSetupStatus DevicePluginDateTime::setupDevice(Device *devic void DevicePluginDateTime::postSetupDevice(Device *device) { Q_UNUSED(device) - qCDebug(dcDateTime) << "post setup"; - searchGeoLocation(); + onMinuteChanged(); + onHourChanged(); + onDayChanged(); + onTimeout(); } void DevicePluginDateTime::deviceRemoved(Device *device) @@ -334,7 +335,32 @@ void DevicePluginDateTime::processTimesData(const QByteArray &data) m_dawn = QDateTime(QDate::currentDate(), QTime::fromString(dawnString, "h:m:s AP"), Qt::UTC).toTimeZone(m_timeZone); m_sunset = QDateTime(QDate::currentDate(), QTime::fromString(sunsetString, "h:m:s AP"), Qt::UTC).toTimeZone(m_timeZone); - emit timeDataChanged(); + // calculate the times in each alarm + qCDebug(dcDateTime) << " dusk :" << m_dusk.toString(); + qCDebug(dcDateTime) << " sunrise :" << m_sunrise.toString(); + qCDebug(dcDateTime) << " noon :" << m_noon.toString(); + qCDebug(dcDateTime) << " sunset :" << m_sunset.toString(); + qCDebug(dcDateTime) << " dawn :" << m_dawn.toString(); + qCDebug(dcDateTime) << "---------------------------------------------"; + + // alarms + foreach (Alarm *alarm, m_alarms.values()) { + alarm->setDusk(m_dusk); + alarm->setSunrise(m_sunrise); + alarm->setNoon(m_noon); + alarm->setDawn(m_dawn); + alarm->setSunset(m_sunset); + } + + // date + if (m_todayDevice == 0) + return; + + m_todayDevice->setStateValue(duskStateTypeId, m_dusk.toTime_t()); + m_todayDevice->setStateValue(sunriseStateTypeId, m_sunrise.toTime_t()); + m_todayDevice->setStateValue(noonStateTypeId, m_noon.toTime_t()); + m_todayDevice->setStateValue(dawnStateTypeId, m_dawn.toTime_t()); + m_todayDevice->setStateValue(sunsetStateTypeId, m_sunset.toTime_t()); } @@ -343,6 +369,8 @@ void DevicePluginDateTime::onTimeout() QDateTime zoneTime = QDateTime::currentDateTime().toTimeZone(m_timeZone); //qCDebug(dcDateTime) << m_timeZone.id() << zoneTime.toString(); + validateTimeTypes(zoneTime); + if (zoneTime.date() != m_currentDateTime.date()) emit dayChanged(); @@ -352,13 +380,6 @@ void DevicePluginDateTime::onTimeout() if (zoneTime.time().minute() != m_currentDateTime.time().minute()) emit minuteChanged(); - foreach (Device *device, deviceManager()->findConfiguredDevices(alarmDeviceClassId)) { - Alarm *alarm = m_alarms.value(device); - alarm->validateTimes(zoneTime); - } - - validateTimeTypes(zoneTime); - // just store for compairing m_currentDateTime = zoneTime; } @@ -373,37 +394,6 @@ void DevicePluginDateTime::onAlarm() emit emitEvent(Event(alarmEventTypeId, device->id())); } -void DevicePluginDateTime::onTimeDataUpdate() -{ - // calculate the times in each alarm - qCDebug(dcDateTime) << " dusk :" << m_dusk.toString(); - qCDebug(dcDateTime) << " sunrise :" << m_sunrise.toString(); - qCDebug(dcDateTime) << " noon :" << m_noon.toString(); - qCDebug(dcDateTime) << " dawn :" << m_dawn.toString(); - qCDebug(dcDateTime) << " sunset :" << m_sunset.toString(); - qCDebug(dcDateTime) << "---------------------------------------------"; - - // alarms - foreach (Alarm *alarm, m_alarms.values()) { - alarm->setDusk(m_dusk); - alarm->setSunrise(m_sunrise); - alarm->setNoon(m_noon); - alarm->setDawn(m_dawn); - alarm->setSunset(m_sunset); - } - - // date - if (m_todayDevice != 0) - return; - - m_todayDevice->setStateValue(duskStateTypeId, m_dusk.toTime_t()); - m_todayDevice->setStateValue(sunriseStateTypeId, m_sunrise.toTime_t()); - m_todayDevice->setStateValue(noonStateTypeId, m_noon.toTime_t()); - m_todayDevice->setStateValue(dawnStateTypeId, m_dawn.toTime_t()); - m_todayDevice->setStateValue(sunsetStateTypeId, m_sunset.toTime_t()); - -} - void DevicePluginDateTime::onMinuteChanged() { QDateTime zoneTime = QDateTime::currentDateTime().toTimeZone(m_timeZone); @@ -467,9 +457,8 @@ void DevicePluginDateTime::onConfigValueChanged(const QString ¶mName, const void DevicePluginDateTime::validateTimeTypes(const QDateTime &dateTime) { - if (m_todayDevice == 0) { + if (m_todayDevice == 0) return; - } if (dateTime == m_dusk) { emit emitEvent(Event(duskEventTypeId, m_todayDevice->id())); @@ -482,4 +471,9 @@ void DevicePluginDateTime::validateTimeTypes(const QDateTime &dateTime) } else if (dateTime == m_sunset) { emit emitEvent(Event(sunsetEventTypeId, m_todayDevice->id())); } + + foreach (Device *device, deviceManager()->findConfiguredDevices(alarmDeviceClassId)) { + Alarm *alarm = m_alarms.value(device); + alarm->validateTimes(dateTime); + } } diff --git a/plugins/deviceplugins/datetime/deviceplugindatetime.h b/plugins/deviceplugins/datetime/deviceplugindatetime.h index 46f3f102..01848b60 100644 --- a/plugins/deviceplugins/datetime/deviceplugindatetime.h +++ b/plugins/deviceplugins/datetime/deviceplugindatetime.h @@ -79,7 +79,6 @@ signals: void noon(); void sunrise(); void dawn(); - void timeDataChanged(); void minuteChanged(); void hourChanged(); void dayChanged(); @@ -87,7 +86,6 @@ signals: private slots: void onTimeout(); void onAlarm(); - void onTimeDataUpdate(); void onMinuteChanged(); void onHourChanged(); void onDayChanged();