Skip to content

Commit

Permalink
fixed: boken last voice command on Fire TV Cube
Browse files Browse the repository at this point in the history
Signed-off-by: Tom Blum <[email protected]>
  • Loading branch information
Trinitus01 committed Oct 4, 2024
1 parent 132e430 commit 472bd09
Showing 1 changed file with 27 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@
import java.time.chrono.ChronoZonedDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand Down Expand Up @@ -141,6 +144,8 @@ public class AccountHandler extends BaseBridgeHandler implements PushConnection.
private boolean disposing = false;
private @Nullable AccountTO accountInformation;

Set<String> deviceSerialNumbers = Collections.synchronizedSet(new LinkedHashSet<>());

public AccountHandler(Bridge bridge, Storage<String> stateStorage, Gson gson, HttpClient httpClient,
HTTP2Client http2Client, AmazonEchoControlCommandDescriptionProvider commandDescriptionProvider) {
super(bridge);
Expand Down Expand Up @@ -593,7 +598,8 @@ private EnabledFeedTO copyFeed(EnabledFeedTO feed) {
public void onPushCommandReceived(PushCommandTO pushCommand) {
logger.debug("Processing {}", pushCommand);
String payload = pushCommand.payload;
switch (pushCommand.command) {
String command = pushCommand.command;
switch (command) {
case "PUSH_ACTIVITY":
// currently unused, seems to be removed, log a warning if it re-appears
logger.warn("Activity detected: {}", pushCommand);
Expand Down Expand Up @@ -624,15 +630,15 @@ public void onPushCommandReceived(PushCommandTO pushCommand) {
if (echoHandler == null) {
return;
}
echoHandler.handlePushCommand(pushCommand.command, payload);
if ("PUSH_EQUALIZER_STATE_CHANGE".equals(pushCommand.command)
|| "PUSH_VOLUME_CHANGE".equals(pushCommand.command)) {
echoHandler.handlePushCommand(command, payload);
if ("PUSH_EQUALIZER_STATE_CHANGE".equals(command) || "PUSH_VOLUME_CHANGE".equals(command)) {
deviceSerialNumbers.add(dopplerId.deviceSerialNumber);
ScheduledFuture<?> refreshActivityJob = this.refreshActivityJob;
if (refreshActivityJob != null) {
refreshActivityJob.cancel(false);
}
this.refreshActivityJob = scheduler.schedule(
() -> handlePushActivity(dopplerId.deviceSerialNumber, pushCommand.timeStamp),
() -> handlePushActivity(deviceSerialNumbers, pushCommand.timeStamp),
handlerConfig.activityRequestDelay, TimeUnit.SECONDS);
}
}
Expand Down Expand Up @@ -670,15 +676,24 @@ private List<CustomerHistoryRecordTO> getCustomerActivity(@Nullable Long timesta
return connection.getActivities(startTimestamp, endTimestamp);
}

private void handlePushActivity(String deviceSerialNumber, @Nullable Long timestamp) {
private void handlePushActivity(Set<String> deviceSerialNumbers, @Nullable Long timestamp) {
List<CustomerHistoryRecordTO> activityRecords = getCustomerActivity(timestamp);
EchoHandler echoHandler = echoHandlers.get(deviceSerialNumber);
if (echoHandler == null) {
logger.warn("Could not find thing handler for serialnumber {}", deviceSerialNumber);
return;

Iterator<String> iterator = deviceSerialNumbers.iterator();
while (iterator.hasNext()) {
try {
String deviceSerialNumber = iterator.next();
EchoHandler echoHandler = echoHandlers.get(deviceSerialNumber);
if (echoHandler == null) {
logger.warn("Could not find thing handler for serialnumber {}", deviceSerialNumber);
return;
}
activityRecords.stream().filter(r -> r.recordKey.endsWith(deviceSerialNumber))
.forEach(echoHandler::handlePushActivity);
} finally {
iterator.remove();
}
}
activityRecords.stream().filter(r -> r.recordKey.endsWith(deviceSerialNumber))
.forEach(echoHandler::handlePushActivity);
}

private @Nullable SmartHomeBaseDevice findSmartHomeDeviceJson(SmartHomeDeviceHandler handler) {
Expand Down

0 comments on commit 472bd09

Please sign in to comment.