fix: playlist allocates inaccurate time to smartblocks #3026
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
In the existing logic of
retrieveMediaFiles
, the time remaining in show is calculated incorrectly in some scenarios. Each time a duration is subtracted fromshowLimit
, it is not the duration of the files just added, but instead the length of all files scheduled. This can cause cases where a smart block set to "time remaining in show" fails to completely fill the program.For example, given a 30 minute show, and a playlist like follows:
When item 1 is added,
showLimit
is reduced by 5 minutes as expected. When item 2 is added,showLimit
is reduced by 10 minutes (as both items 1 and 2 are counted). As a result, the smart block is only run to fill 15 minutes, leaving 5 minutes unfilled.This PR resolves this issue, by recalculating
showLimit
from the original duration rather than subtracting from a running total.This change not does implement a new feature and should not require any changes to documentation.
Testing Notes
What I did:
Also repeated this testing with sample data from our production instance.
Here is a sample schedule of the "before" case with sample data, showing the issue

The smartblock that scheduled the music is set to allow last track to overflow, but 3m55s was left unscheduled.
Using the same playlist and same track library, here is a sample schedule after the PR applied:

As expected, the show is fully scheduled with the last track overflowing.
Additionally, I've applied this PR as a hot fix to our production instance, where it has been running for a week without issue.
Also performed spot tests of playlists without smart blocks, smart blocks scheduled directly (not in playlists) and autoloading playlists, with no change in behaviour observed as a result of this change.
How you can replicate my testing:
Same test steps as I followed should be able to reproduce issue & validate fix on any instance.
Links
Not directly related to issue fixed by #3019, but also addresses the issue of dead air left at end of blocks.