Skip to content

Commit

Permalink
[icalendar] Add relevant handling of last_update channel (#9616)
Browse files Browse the repository at this point in the history
Also add migration for older things as compatible.
Fixes #9613

Signed-off-by: Michael Wodniok <[email protected]>
  • Loading branch information
daMihe authored Dec 31, 2020
1 parent 43d1e43 commit ede9435
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
* used across the whole binding.
*
* @author Michael Wodniok - Initial contribution
* @author Michael Wodniok - Added last_update related constants
*/
@NonNullByDefault
public class ICalendarBindingConstants {
Expand All @@ -41,6 +42,7 @@ public class ICalendarBindingConstants {
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_LAST_UPDATE = "last_update";
public static final ChannelTypeUID LAST_UPDATE_TYPE_UID = new ChannelTypeUID(BINDING_ID, "last_update");

// additional constants
public static final int HTTP_TIMEOUT_SECS = 60;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.binding.BaseBridgeHandler;
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.RefreshType;
import org.openhab.core.types.UnDefType;
Expand All @@ -61,6 +63,7 @@
*
* @author Michael Wodniok - Initial contribution
* @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
public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdateListener {
Expand Down Expand Up @@ -110,6 +113,7 @@ public void handleCommand(ChannelUID channelUID, Command command) {
case CHANNEL_NEXT_EVENT_TITLE:
case CHANNEL_NEXT_EVENT_START:
case CHANNEL_NEXT_EVENT_END:
case CHANNEL_LAST_UPDATE:
if (command instanceof RefreshType) {
updateStates();
}
Expand All @@ -121,6 +125,8 @@ public void handleCommand(ChannelUID channelUID, Command command) {

@Override
public void initialize() {
migrateLastUpdateChannel();

final ICalendarConfiguration currentConfiguration = getConfigAs(ICalendarConfiguration.class);
configuration = currentConfiguration;

Expand Down Expand Up @@ -259,6 +265,20 @@ private void executeEventCommands(List<Event> events, CommandTagType execTime) {
}
}

/**
* 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
* logging details at warn-level logger.
Expand Down

0 comments on commit ede9435

Please sign in to comment.