[icalendar] Add relevant handling of last_update channel (#9616)
Also add migration for older things as compatible. Fixes #9613 Signed-off-by: Michael Wodniok <michi@noorganization.org>
This commit is contained in:
parent
43d1e43c33
commit
ede94354f3
@ -22,6 +22,7 @@ import org.openhab.core.thing.type.ChannelTypeUID;
|
|||||||
* used across the whole binding.
|
* used across the whole binding.
|
||||||
*
|
*
|
||||||
* @author Michael Wodniok - Initial contribution
|
* @author Michael Wodniok - Initial contribution
|
||||||
|
* @author Michael Wodniok - Added last_update related constants
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class ICalendarBindingConstants {
|
public class ICalendarBindingConstants {
|
||||||
@ -41,6 +42,7 @@ public class ICalendarBindingConstants {
|
|||||||
public static final String CHANNEL_NEXT_EVENT_START = "next_start";
|
public static final String CHANNEL_NEXT_EVENT_START = "next_start";
|
||||||
public static final String CHANNEL_NEXT_EVENT_END = "next_end";
|
public static final String CHANNEL_NEXT_EVENT_END = "next_end";
|
||||||
public static final String CHANNEL_LAST_UPDATE = "last_update";
|
public static final String CHANNEL_LAST_UPDATE = "last_update";
|
||||||
|
public static final ChannelTypeUID LAST_UPDATE_TYPE_UID = new ChannelTypeUID(BINDING_ID, "last_update");
|
||||||
|
|
||||||
// additional constants
|
// additional constants
|
||||||
public static final int HTTP_TIMEOUT_SECS = 60;
|
public static final int HTTP_TIMEOUT_SECS = 60;
|
||||||
|
|||||||
@ -49,6 +49,8 @@ import org.openhab.core.thing.ThingStatus;
|
|||||||
import org.openhab.core.thing.ThingStatusDetail;
|
import org.openhab.core.thing.ThingStatusDetail;
|
||||||
import org.openhab.core.thing.binding.BaseBridgeHandler;
|
import org.openhab.core.thing.binding.BaseBridgeHandler;
|
||||||
import org.openhab.core.thing.binding.ThingHandler;
|
import org.openhab.core.thing.binding.ThingHandler;
|
||||||
|
import org.openhab.core.thing.binding.builder.ChannelBuilder;
|
||||||
|
import org.openhab.core.thing.binding.builder.ThingBuilder;
|
||||||
import org.openhab.core.types.Command;
|
import org.openhab.core.types.Command;
|
||||||
import org.openhab.core.types.RefreshType;
|
import org.openhab.core.types.RefreshType;
|
||||||
import org.openhab.core.types.UnDefType;
|
import org.openhab.core.types.UnDefType;
|
||||||
@ -61,6 +63,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
*
|
*
|
||||||
* @author Michael Wodniok - Initial contribution
|
* @author Michael Wodniok - Initial contribution
|
||||||
* @author Andrew Fiddian-Green - Support for Command Tags embedded in the Event description
|
* @author Andrew Fiddian-Green - Support for Command Tags embedded in the Event description
|
||||||
|
* @author Michael Wodniok - Added last_update-channel and additional needed handling of it
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdateListener {
|
public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdateListener {
|
||||||
@ -110,6 +113,7 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
|
|||||||
case CHANNEL_NEXT_EVENT_TITLE:
|
case CHANNEL_NEXT_EVENT_TITLE:
|
||||||
case CHANNEL_NEXT_EVENT_START:
|
case CHANNEL_NEXT_EVENT_START:
|
||||||
case CHANNEL_NEXT_EVENT_END:
|
case CHANNEL_NEXT_EVENT_END:
|
||||||
|
case CHANNEL_LAST_UPDATE:
|
||||||
if (command instanceof RefreshType) {
|
if (command instanceof RefreshType) {
|
||||||
updateStates();
|
updateStates();
|
||||||
}
|
}
|
||||||
@ -121,6 +125,8 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
|
migrateLastUpdateChannel();
|
||||||
|
|
||||||
final ICalendarConfiguration currentConfiguration = getConfigAs(ICalendarConfiguration.class);
|
final ICalendarConfiguration currentConfiguration = getConfigAs(ICalendarConfiguration.class);
|
||||||
configuration = currentConfiguration;
|
configuration = currentConfiguration;
|
||||||
|
|
||||||
@ -259,6 +265,20 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migration for last_update-channel as this change is compatible to previous instances.
|
||||||
|
*/
|
||||||
|
private void migrateLastUpdateChannel() {
|
||||||
|
Thing thing = getThing();
|
||||||
|
if (thing.getChannel(CHANNEL_LAST_UPDATE) == null) {
|
||||||
|
logger.debug("last_update channel is missing in this Thing. Adding it.");
|
||||||
|
ThingBuilder thingBuilder = editThing();
|
||||||
|
ChannelBuilder channelBuilder = ChannelBuilder.create(new ChannelUID(thing.getUID(), CHANNEL_LAST_UPDATE));
|
||||||
|
thingBuilder.withChannel(channelBuilder.withType(LAST_UPDATE_TYPE_UID).build());
|
||||||
|
updateThing(thingBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reloads the calendar from local ical-file. Replaces the class internal calendar - if loading succeeds. Else
|
* Reloads the calendar from local ical-file. Replaces the class internal calendar - if loading succeeds. Else
|
||||||
* logging details at warn-level logger.
|
* logging details at warn-level logger.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user