wse-plugin-streampublisher icon indicating copy to clipboard operation
wse-plugin-streampublisher copied to clipboard

Refactor loading chronologically last passed schedule

Open pszemus opened this issue 2 years ago • 4 comments

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

pszemus avatar Feb 24 '23 10:02 pszemus

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.

pszemus avatar Feb 24 '23 13:02 pszemus

@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);
	});

pszemus avatar Feb 24 '23 14:02 pszemus

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.

rogerlittin avatar Feb 24 '23 16:02 rogerlittin

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);

pszemus avatar Mar 01 '23 08:03 pszemus