Handle in-season specials as part of the season (#314)
Co-authored-by: rlauu <46294892+rlauu@users.noreply.github.com> Co-authored-by: Kilian von Pflugk <github@jumoog.io>
This commit is contained in:
parent
d2dc8daaed
commit
f4fd66e26e
@ -50,20 +50,15 @@ public class QueueManager(ILogger<QueueManager> logger, ILibraryManager libraryM
|
|||||||
|
|
||||||
_logger.LogInformation("Running enqueue of items in library {Name}", folder.Name);
|
_logger.LogInformation("Running enqueue of items in library {Name}", folder.Name);
|
||||||
|
|
||||||
|
// Some virtual folders don't have a proper item id.
|
||||||
|
if (!Guid.TryParse(folder.ItemId, out var folderId))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
foreach (var location in folder.Locations)
|
QueueLibraryContents(folderId);
|
||||||
{
|
|
||||||
var item = _libraryManager.FindByPath(location, true);
|
|
||||||
|
|
||||||
if (item is null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Unable to find linked item at path {0}", location);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
QueueLibraryContents(item.Id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -126,7 +121,7 @@ public class QueueManager(ILogger<QueueManager> logger, ILibraryManager libraryM
|
|||||||
{
|
{
|
||||||
// Order by series name, season, and then episode number so that status updates are logged in order
|
// Order by series name, season, and then episode number so that status updates are logged in order
|
||||||
ParentId = id,
|
ParentId = id,
|
||||||
OrderBy = [(ItemSortBy.SeriesSortName, SortOrder.Ascending), (ItemSortBy.ParentIndexNumber, SortOrder.Ascending), (ItemSortBy.IndexNumber, SortOrder.Ascending),],
|
OrderBy = [(ItemSortBy.SeriesSortName, SortOrder.Ascending), (ItemSortBy.ParentIndexNumber, SortOrder.Descending), (ItemSortBy.IndexNumber, SortOrder.Ascending),],
|
||||||
IncludeItemTypes = [BaseItemKind.Episode],
|
IncludeItemTypes = [BaseItemKind.Episode],
|
||||||
Recursive = true,
|
Recursive = true,
|
||||||
IsVirtualItem = false
|
IsVirtualItem = false
|
||||||
@ -172,10 +167,11 @@ public class QueueManager(ILogger<QueueManager> logger, ILibraryManager libraryM
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allocate a new list for each new season
|
// Allocate a new list for each new season
|
||||||
if (!_queuedEpisodes.TryGetValue(episode.SeasonId, out var seasonEpisodes))
|
var seasonId = GetSeasonId(episode);
|
||||||
|
if (!_queuedEpisodes.TryGetValue(seasonId, out var seasonEpisodes))
|
||||||
{
|
{
|
||||||
seasonEpisodes = [];
|
seasonEpisodes = [];
|
||||||
_queuedEpisodes[episode.SeasonId] = seasonEpisodes;
|
_queuedEpisodes[seasonId] = seasonEpisodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seasonEpisodes.Any(e => e.EpisodeId == episode.Id))
|
if (seasonEpisodes.Any(e => e.EpisodeId == episode.Id))
|
||||||
@ -214,6 +210,24 @@ public class QueueManager(ILogger<QueueManager> logger, ILibraryManager libraryM
|
|||||||
pluginInstance.TotalQueued++;
|
pluginInstance.TotalQueued++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Guid GetSeasonId(Episode episode)
|
||||||
|
{
|
||||||
|
if (episode.ParentIndexNumber == 0 && episode.AiredSeasonNumber != 0) // In-season special
|
||||||
|
{
|
||||||
|
foreach (var kvp in _queuedEpisodes)
|
||||||
|
{
|
||||||
|
var first = kvp.Value.FirstOrDefault();
|
||||||
|
if (first?.SeriesId == episode.SeriesId &&
|
||||||
|
first.SeasonNumber == episode.AiredSeasonNumber)
|
||||||
|
{
|
||||||
|
return kvp.Key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return episode.SeasonId;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Verify that a collection of queued media items still exist in Jellyfin and in storage.
|
/// Verify that a collection of queued media items still exist in Jellyfin and in storage.
|
||||||
/// This is done to ensure that we don't analyze items that were deleted between the call to GetMediaItems() and popping them from the queue.
|
/// This is done to ensure that we don't analyze items that were deleted between the call to GetMediaItems() and popping them from the queue.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user