ReceiverNeed enum
This commit is contained in:
parent
6f66cc060c
commit
03631e17c2
@ -1,6 +1,7 @@
|
||||
package de.ph87.home.tvheadend;
|
||||
|
||||
import de.ph87.home.property.*;
|
||||
import de.ph87.home.tvheadend.api.ReceiverNeed;
|
||||
import de.ph87.home.tvheadend.api.TvheadendApiService;
|
||||
import de.ph87.home.tvheadend.api.TvheadendStatus;
|
||||
import jakarta.annotation.Nullable;
|
||||
@ -16,6 +17,7 @@ import java.time.Duration;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@ -37,7 +39,7 @@ public class TvheadendService {
|
||||
|
||||
private boolean receiverLastState = false;
|
||||
|
||||
@Scheduled(initialDelay = 0, fixedDelay = 5, timeUnit = TimeUnit.SECONDS)
|
||||
@Scheduled(initialDelay = 5, fixedDelay = 5, timeUnit = TimeUnit.SECONDS)
|
||||
public void update() {
|
||||
final TvheadendStatus status;
|
||||
try {
|
||||
@ -66,9 +68,11 @@ public class TvheadendService {
|
||||
final ZonedDateTime now = ZonedDateTime.now();
|
||||
final String shouldBeMessage;
|
||||
if (status.receiverNeeded) {
|
||||
shouldBeMessage = "Receiver is needed.";
|
||||
final String neededFor = status.receiverNeededFor.stream().map(ReceiverNeed::toString).collect(Collectors.joining(", "));
|
||||
shouldBeMessage = "Receiver is currently needed for: %s".formatted(neededFor);
|
||||
} else if (status.recordingNext != null) {
|
||||
shouldBeMessage = "Receiver is needed in %s".formatted(durationToString(Duration.between(now, status.recordingNext.getStart_real().minus(tvheadendConfig.getBEFORE_RECORDING()))));
|
||||
final String durationString = durationToString(Duration.between(now, status.recordingNext.getStart_real().minus(tvheadendConfig.getBEFORE_RECORDING())));
|
||||
shouldBeMessage = "Receiver is needed for %s in %s".formatted(ReceiverNeed.RECORDING, durationString);
|
||||
} else {
|
||||
shouldBeMessage = "Receiver is NOT needed.";
|
||||
}
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
package de.ph87.home.tvheadend.api;
|
||||
|
||||
public enum ReceiverNeed {
|
||||
RECORDING, STREAM, EPG, CONNECTION
|
||||
}
|
||||
@ -9,6 +9,7 @@ import lombok.NonNull;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
@ -38,6 +39,8 @@ public class TvheadendStatus {
|
||||
|
||||
public final boolean receiverNeeded;
|
||||
|
||||
public final List<ReceiverNeed> receiverNeededFor;
|
||||
|
||||
public TvheadendStatus(
|
||||
@NonNull final Duration beforeRecording,
|
||||
@NonNull final List<StatusInputs.Entry> inputList,
|
||||
@ -49,11 +52,27 @@ public class TvheadendStatus {
|
||||
this.subscriptionList = subscriptionList;
|
||||
this.inputList = inputList;
|
||||
this.recordingList = recordingList;
|
||||
this.recordingNext = recordingList.stream().min(Comparator.comparing(DvrEntryGridUpcoming.Entry::getStart_real)).orElse(null);
|
||||
this.receiverNeededForConnected = !connectionList.isEmpty();
|
||||
this.receiverNeededForSubscribed = !subscriptionList.isEmpty();
|
||||
this.receiverNeededForRecording = recordingNext != null && recordingNext.shouldBeOnForRecording(beforeRecording);
|
||||
this.receiverNeeded = this.receiverNeededForConnected || this.receiverNeededForSubscribed || this.receiverNeededForRecording;
|
||||
|
||||
recordingNext = recordingList.stream().min(Comparator.comparing(DvrEntryGridUpcoming.Entry::getStart_real)).orElse(null);
|
||||
receiverNeededForConnected = !connectionList.isEmpty();
|
||||
receiverNeededForSubscribed = !subscriptionList.isEmpty();
|
||||
receiverNeededForRecording = recordingNext != null && recordingNext.shouldBeOnForRecording(beforeRecording);
|
||||
receiverNeeded = receiverNeededForConnected || receiverNeededForSubscribed || receiverNeededForRecording;
|
||||
|
||||
final List<ReceiverNeed> needs = new ArrayList<>();
|
||||
if (receiverNeededForRecording) {
|
||||
needs.add(ReceiverNeed.RECORDING);
|
||||
}
|
||||
if (subscriptionList.stream().anyMatch(s -> !s.getTitle().equals("epggrab"))) {
|
||||
needs.add(ReceiverNeed.STREAM);
|
||||
}
|
||||
if (subscriptionList.stream().anyMatch(s -> s.getTitle().equals("epggrab"))) {
|
||||
needs.add(ReceiverNeed.EPG);
|
||||
}
|
||||
if (receiverNeededForConnected) {
|
||||
needs.add(ReceiverNeed.CONNECTION);
|
||||
}
|
||||
receiverNeededFor = needs;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user