|
14 | 14 |
|
15 | 15 | import static org.openhab.binding.tivo.internal.TiVoBindingConstants.*; |
16 | 16 |
|
| 17 | +import java.util.Locale; |
17 | 18 | import java.util.Optional; |
18 | 19 | import java.util.concurrent.ScheduledFuture; |
19 | 20 | import java.util.concurrent.TimeUnit; |
@@ -82,30 +83,60 @@ public void handleCommand(ChannelUID channelUID, Command command) { |
82 | 83 | TivoStatusData currentStatus = tivoConnection.get().getServiceStatus(); |
83 | 84 | String commandKeyword = ""; |
84 | 85 |
|
85 | | - String commandParameter = command.toString().toUpperCase(); |
| 86 | + String commandParameter = command.toString().toUpperCase(Locale.ENGLISH); |
86 | 87 | if (command instanceof RefreshType) { |
87 | 88 | // Future enhancement, if we can come up with a sensible set of actions when a REFRESH is issued |
88 | 89 | logger.debug("TiVo '{}' skipping REFRESH command for channel: '{}'.", getThing().getUID(), |
89 | 90 | channelUID.getId()); |
90 | 91 | return; |
91 | 92 | } |
92 | 93 |
|
93 | | - switch (channelUID.getId()) { |
94 | | - case CHANNEL_TIVO_CHANNEL_FORCE: |
95 | | - commandKeyword = "FORCECH"; |
96 | | - break; |
97 | | - case CHANNEL_TIVO_CHANNEL_SET: |
98 | | - commandKeyword = "SETCH"; |
99 | | - break; |
100 | | - case CHANNEL_TIVO_TELEPORT: |
101 | | - commandKeyword = "TELEPORT"; |
102 | | - break; |
103 | | - case CHANNEL_TIVO_IRCMD: |
104 | | - commandKeyword = "IRCODE"; |
105 | | - break; |
106 | | - case CHANNEL_TIVO_KBDCMD: |
107 | | - commandKeyword = "KEYBOARD"; |
108 | | - break; |
| 94 | + // Handle search command |
| 95 | + if (CHANNEL_TIVO_SEARCH.equals(channelUID.getId())) { |
| 96 | + if (commandParameter.isBlank()) { |
| 97 | + logger.debug("Search string was blank"); |
| 98 | + return; |
| 99 | + } |
| 100 | + |
| 101 | + try { |
| 102 | + sendCommand("TELEPORT", "SEARCH", currentStatus); |
| 103 | + Thread.sleep(1000); |
| 104 | + |
| 105 | + for (int i = 0; i < commandParameter.length(); i++) { |
| 106 | + final String srchChar = commandParameter.substring(i, i + 1); |
| 107 | + |
| 108 | + if (srchChar.matches("[A-Z]")) { |
| 109 | + sendCommand(KEYBOARD, srchChar, currentStatus); |
| 110 | + } else if (srchChar.matches("[0-9]")) { |
| 111 | + sendCommand(KEYBOARD, "NUM" + srchChar, currentStatus); |
| 112 | + } else if (" ".equals(srchChar)) { |
| 113 | + sendCommand(KEYBOARD, "SPACE", currentStatus); |
| 114 | + } else { |
| 115 | + logger.debug("Search character not supported: {}", srchChar); |
| 116 | + } |
| 117 | + } |
| 118 | + } catch (InterruptedException e) { |
| 119 | + // TiVo handler disposed or openHAB exiting, do nothing |
| 120 | + } |
| 121 | + return; |
| 122 | + } else { |
| 123 | + switch (channelUID.getId()) { |
| 124 | + case CHANNEL_TIVO_CHANNEL_FORCE: |
| 125 | + commandKeyword = "FORCECH"; |
| 126 | + break; |
| 127 | + case CHANNEL_TIVO_CHANNEL_SET: |
| 128 | + commandKeyword = "SETCH"; |
| 129 | + break; |
| 130 | + case CHANNEL_TIVO_TELEPORT: |
| 131 | + commandKeyword = "TELEPORT"; |
| 132 | + break; |
| 133 | + case CHANNEL_TIVO_IRCMD: |
| 134 | + commandKeyword = "IRCODE"; |
| 135 | + break; |
| 136 | + case CHANNEL_TIVO_KBDCMD: |
| 137 | + commandKeyword = KEYBOARD; |
| 138 | + break; |
| 139 | + } |
109 | 140 | } |
110 | 141 | try { |
111 | 142 | sendCommand(commandKeyword, commandParameter, currentStatus); |
|
0 commit comments