Skip to content

Commit 5435d63

Browse files
authored
Fix NPE (openhab#17475)
Signed-off-by: Leo Siepel <[email protected]>
1 parent 6528e84 commit 5435d63

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

bundles/org.openhab.binding.samsungtv/src/main/java/org/openhab/binding/samsungtv/internal/service/SmartThingsApiService.java

+16-11
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ class MediaInputSource {
147147
class TvChannel {
148148
Values tvChannel;
149149
Values tvChannelName;
150+
151+
public String getChannelNum() {
152+
return Optional.ofNullable(tvChannel).map(a -> a.value).orElse("");
153+
}
150154
}
151155

152156
class Values {
@@ -246,8 +250,7 @@ public int getInputSourceId() {
246250
}
247251

248252
public Number getTvChannel() {
249-
return Optional.ofNullable(tvChannel).map(a -> a.tvChannel).map(a -> a.value).filter(i -> !i.isBlank())
250-
.map(j -> parseTVChannel(j)).orElse(-1f);
253+
return Optional.ofNullable(tvChannel).map(a -> a.getChannelNum()).map(j -> parseTVChannel(j)).orElse(-1f);
251254
}
252255

253256
public String getTvChannelName() {
@@ -456,10 +459,9 @@ public int getInputSourceId() {
456459

457460
public Number getTvChannel() {
458461
if (getCapabilityAttribute("tvChannel", "tvChannel")) {
459-
return Optional.ofNullable(deviceEvent).map(a -> a.getValue()).filter(i -> !i.isBlank())
460-
.map(j -> parseTVChannel(j)).orElse(-1f);
462+
return Optional.ofNullable(deviceEvent).map(a -> a.getValue()).map(j -> parseTVChannel(j)).orElse(-1f);
461463
}
462-
return -1;
464+
return -1f;
463465
}
464466

465467
public String getTvChannelName() {
@@ -470,14 +472,14 @@ public String getTvChannelName() {
470472
}
471473
}
472474

473-
public Number parseTVChannel(String channel) {
475+
public static Number parseTVChannel(String channel) {
474476
try {
475-
return Optional.ofNullable(channel)
476-
.map(a -> a.replaceAll("\\D+", ".").replaceFirst("^\\D*((\\d+\\.\\d+)|(\\d+)).*", "$1"))
477-
.map(Float::parseFloat).orElse(-1f);
477+
return (channel == null || channel.isBlank()) ? -1f
478+
: Float.parseFloat(
479+
channel.replaceAll("\\D+", ".").replaceFirst("^\\D*((\\d+\\.\\d+)|(\\d+)).*", "$1"));
478480
} catch (NumberFormatException ignore) {
479481
}
480-
return -1;
482+
return -1f;
481483
}
482484

483485
public void updateTV() {
@@ -789,8 +791,11 @@ synchronized void processSSEEvent(Optional<byte[]> bytes) {
789791
}
790792
Number tvChannel = d.getTvChannel();
791793
if (tvChannel.intValue() != -1) {
794+
logger.trace("{}: SSE Got TV Channel: {}", host, tvChannel);
792795
updateState(CHANNEL, tvChannel);
793-
String tvChannelName = d.getTvChannelName();
796+
}
797+
String tvChannelName = d.getTvChannelName();
798+
if (!tvChannelName.isBlank()) {
794799
logger.trace("{}: SSE Got TV Channel Name: {} Channel: {}", host, tvChannelName,
795800
tvChannel);
796801
updateState(CHANNEL_NAME, tvChannelName);

0 commit comments

Comments
 (0)