wse-plugin-streampublisher
wse-plugin-streampublisher copied to clipboard
Refactor loading chronologically last passed schedule
Tested playlists:
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2060-01-14 14:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="1999-01-11 11:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2000-01-12 12:00:00">
result (logs):
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Wed Jan 12 12:00:00 CET 2000
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Wed Jan 14 14:00:00 CET 2060
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2060-01-14 14:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2020-01-11 11:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2000-01-12 12:00:00">
result (logs):
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Sat Jan 11 11:00:00 CET 2020
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Wed Jan 14 14:00:00 CET 2060
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="1999-01-11 11:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2000-01-12 12:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2060-01-14 14:00:00">
result (logs):
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Wed Jan 12 12:00:00 CET 2000
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Wed Jan 14 14:00:00 CET 2060
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2020-01-11 11:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2000-01-12 12:00:00">
<playlist name="schedule1" playOnStream="test" repeat="false" scheduled="2060-01-14 14:00:00">
result (logs):
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Sat Jan 11 11:00:00 CET 2020
ServerListenerStreamPublisher scheduled playlist: test on stream: test for:Wed Jan 14 14:00:00 CET 2060
It won't work for:
<playlist scheduled="2060-01-14 14:00:00">
<playlist scheduled="2022-01-11 11:00:00">
<playlist scheduled="2000-01-12 12:00:00">
all 3 playlists are started (including both past playlists).
We could split my condition into 2 different if
statements and introduce a local variable removed = schedules.removeIf(s -> s.start.before(schedule.start)
to make it more obvious.
@rogerlittin does the following look better to you?
schedules.add(schedule);
if (schedule.start.before(now))
schedules.stream()
.sorted()
.filter(s -> s.start.before(now) && s != schedule)
.findFirst()
.ifPresent(pastSchedule ->
{
if (pastSchedule.start.before(schedule.start))
schedules.remove(pastSchedule);
else
schedules.remove(schedule);
});
That's really just replacing one large block of code with another large block. The original PR is probably cleaner. I won't be able to merge it for at least a week so if you come up with a better solution in the meantime please update here.
Another idea: always keep the last past schedule at index 0:
if (!schedules.isEmpty() && schedule.start.before(now))
{
ScheduledItem lastPastSchedule = schedules.get(0);
if (!lastPastSchedule.start.before(now))
schedules.add(0, schedule);
else if (lastPastSchedule.start.before(schedule.start))
schedules.set(0, schedule);
} else
schedules.add(schedule);