Skip to content

Commit 2dd9221

Browse files
authored
[samsungtv] Fix NullPointerException (openhab#17454)
* Fix NPE Signed-off-by: Leo Siepel <[email protected]>
1 parent ec59011 commit 2dd9221

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

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

+17-14
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,15 +472,14 @@ public String getTvChannelName() {
470472
}
471473
}
472474

473-
public Number parseTVChannel(@Nullable String channel) {
475+
public static Number parseTVChannel(@Nullable String channel) {
474476
try {
475-
return channel != null
476-
? Float.parseFloat(
477-
channel.replaceAll("\\D+", ".").replaceFirst("^\\D*((\\d+\\.\\d+)|(\\d+)).*", "$1"))
478-
: -1f;
477+
return (channel == null || channel.isBlank()) ? -1f
478+
: Float.parseFloat(
479+
channel.replaceAll("\\D+", ".").replaceFirst("^\\D*((\\d+\\.\\d+)|(\\d+)).*", "$1"));
479480
} catch (NumberFormatException ignore) {
480481
}
481-
return -1;
482+
return -1f;
482483
}
483484

484485
public void updateTV() {
@@ -790,10 +791,12 @@ synchronized void processSSEEvent(Optional<byte[]> bytes) {
790791
}
791792
Number tvChannel = d.getTvChannel();
792793
if (tvChannel.intValue() != -1) {
794+
logger.trace("{}: SSE Got TV Channel: {}", host, tvChannel);
793795
updateState(CHANNEL, tvChannel);
794-
String tvChannelName = d.getTvChannelName();
795-
logger.trace("{}: SSE Got TV Channel Name: {} Channel: {}", host, tvChannelName,
796-
tvChannel);
796+
}
797+
String tvChannelName = d.getTvChannelName();
798+
if (!tvChannelName.isBlank()) {
799+
logger.trace("{}: SSE Got TV Channel Name: {}", host, tvChannelName);
797800
updateState(CHANNEL_NAME, tvChannelName);
798801
}
799802
String Power = d.getSwitch();

0 commit comments

Comments
 (0)