Signed-off-by: Eugen Freiter <freiter@gmx.de>
This commit is contained in:
parent
94f6d6b291
commit
2716ffa669
@ -25,11 +25,13 @@ import java.util.concurrent.ScheduledExecutorService;
|
|||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.openhab.core.common.ThreadPoolManager;
|
import org.openhab.core.common.ThreadPoolManager;
|
||||||
|
import org.openhab.core.common.registry.RegistryChangeListener;
|
||||||
import org.openhab.core.items.GroupItem;
|
import org.openhab.core.items.GroupItem;
|
||||||
import org.openhab.core.items.Item;
|
import org.openhab.core.items.Item;
|
||||||
import org.openhab.core.items.ItemNotFoundException;
|
import org.openhab.core.items.ItemNotFoundException;
|
||||||
import org.openhab.core.items.ItemRegistry;
|
import org.openhab.core.items.ItemRegistry;
|
||||||
import org.openhab.core.items.ItemRegistryChangeListener;
|
import org.openhab.core.items.ItemRegistryChangeListener;
|
||||||
|
import org.openhab.core.items.Metadata;
|
||||||
import org.openhab.core.items.MetadataRegistry;
|
import org.openhab.core.items.MetadataRegistry;
|
||||||
import org.openhab.core.storage.Storage;
|
import org.openhab.core.storage.Storage;
|
||||||
import org.openhab.core.storage.StorageService;
|
import org.openhab.core.storage.StorageService;
|
||||||
@ -41,7 +43,7 @@ import io.github.hapjava.accessories.HomekitAccessory;
|
|||||||
import io.github.hapjava.server.impl.HomekitRoot;
|
import io.github.hapjava.server.impl.HomekitRoot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listens for changes to the item registry. When changes are detected, check
|
* Listens for changes to the item and metadata registry. When changes are detected, check
|
||||||
* for HomeKit tags and, if present, add the items to the HomekitAccessoryRegistry.
|
* for HomeKit tags and, if present, add the items to the HomekitAccessoryRegistry.
|
||||||
*
|
*
|
||||||
* @author Andy Lintner - Initial contribution
|
* @author Andy Lintner - Initial contribution
|
||||||
@ -55,6 +57,7 @@ public class HomekitChangeListener implements ItemRegistryChangeListener {
|
|||||||
private final HomekitAccessoryRegistry accessoryRegistry = new HomekitAccessoryRegistry();
|
private final HomekitAccessoryRegistry accessoryRegistry = new HomekitAccessoryRegistry();
|
||||||
private final MetadataRegistry metadataRegistry;
|
private final MetadataRegistry metadataRegistry;
|
||||||
private final Storage<String> storage;
|
private final Storage<String> storage;
|
||||||
|
private final RegistryChangeListener<Metadata> metadataChangeListener;
|
||||||
private HomekitAccessoryUpdater updater = new HomekitAccessoryUpdater();
|
private HomekitAccessoryUpdater updater = new HomekitAccessoryUpdater();
|
||||||
private HomekitSettings settings;
|
private HomekitSettings settings;
|
||||||
private int lastAccessoryCount;
|
private int lastAccessoryCount;
|
||||||
@ -82,8 +85,39 @@ public class HomekitChangeListener implements ItemRegistryChangeListener {
|
|||||||
storage = storageService.getStorage(HomekitAuthInfoImpl.STORAGE_KEY);
|
storage = storageService.getStorage(HomekitAuthInfoImpl.STORAGE_KEY);
|
||||||
this.applyUpdatesDebouncer = new Debouncer("update-homekit-devices", scheduler, Duration.ofMillis(1000),
|
this.applyUpdatesDebouncer = new Debouncer("update-homekit-devices", scheduler, Duration.ofMillis(1000),
|
||||||
Clock.systemUTC(), this::applyUpdates);
|
Clock.systemUTC(), this::applyUpdates);
|
||||||
|
metadataChangeListener = new RegistryChangeListener<Metadata>() {
|
||||||
|
@Override
|
||||||
|
public void added(final Metadata metadata) {
|
||||||
|
try {
|
||||||
|
markDirty(itemRegistry.getItem(metadata.getUID().getItemName()));
|
||||||
|
} catch (ItemNotFoundException e) {
|
||||||
|
logger.debug("Could not found item for metadata {}", metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removed(final Metadata metadata) {
|
||||||
|
try {
|
||||||
|
markDirty(itemRegistry.getItem(metadata.getUID().getItemName()));
|
||||||
|
} catch (ItemNotFoundException e) {
|
||||||
|
logger.debug("Could not found item for metadata {}", metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updated(final Metadata metadata, final Metadata e1) {
|
||||||
|
try {
|
||||||
|
markDirty(itemRegistry.getItem(metadata.getUID().getItemName()));
|
||||||
|
if (!metadata.getUID().getItemName().equals(e1.getUID().getItemName())) {
|
||||||
|
markDirty(itemRegistry.getItem(e1.getUID().getItemName()));
|
||||||
|
}
|
||||||
|
} catch (ItemNotFoundException e) {
|
||||||
|
logger.debug("Could not found item for metadata {}", metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
itemRegistry.addRegistryChangeListener(this);
|
itemRegistry.addRegistryChangeListener(this);
|
||||||
|
metadataRegistry.addRegistryChangeListener(metadataChangeListener);
|
||||||
itemRegistry.getItems().forEach(this::createRootAccessories);
|
itemRegistry.getItems().forEach(this::createRootAccessories);
|
||||||
initialiseRevision();
|
initialiseRevision();
|
||||||
logger.info("Created {} HomeKit items.", accessoryRegistry.getAllAccessories().size());
|
logger.info("Created {} HomeKit items.", accessoryRegistry.getAllAccessories().size());
|
||||||
@ -211,6 +245,7 @@ public class HomekitChangeListener implements ItemRegistryChangeListener {
|
|||||||
|
|
||||||
public void stop() {
|
public void stop() {
|
||||||
this.itemRegistry.removeRegistryChangeListener(this);
|
this.itemRegistry.removeRegistryChangeListener(this);
|
||||||
|
this.metadataRegistry.removeRegistryChangeListener(metadataChangeListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, HomekitAccessory> getAccessories() {
|
public Map<String, HomekitAccessory> getAccessories() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user