fix postsetup after loading the devices

pull/135/head
Simon Stürz 2015-06-27 21:29:06 +02:00 committed by Michael Zanetti
parent 9ee5eb20a9
commit e678370ecd
4 changed files with 44 additions and 50 deletions

View File

@ -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();
}

View File

@ -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();
}
}

View File

@ -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 &paramName, 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);
}
}

View File

@ -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();