mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-19 12:59:39 -07:00
fix(sync): Emby+Jellyfin - sync multi-episode files of 3+ episodes
* perf(sync): Emby+Jellyfin - use a more reliable filter to missing items * fix(sync): Emby+Jellyfin - sync multi-episode files of 3+ episodes [skip ci]
This commit is contained in:
parent
d03b29856d
commit
bd8fd89055
4 changed files with 44 additions and 41 deletions
|
@ -106,7 +106,7 @@ namespace Ombi.Api.Emby
|
||||||
|
|
||||||
request.AddQueryString("Fields", "ProviderIds,Overview");
|
request.AddQueryString("Fields", "ProviderIds,Overview");
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("IsMissing", "False");
|
||||||
|
|
||||||
return await Api.Request<EmbyItemContainer<EmbyMovie>>(request);
|
return await Api.Request<EmbyItemContainer<EmbyMovie>>(request);
|
||||||
}
|
}
|
||||||
|
@ -180,7 +180,7 @@ namespace Ombi.Api.Emby
|
||||||
request.AddQueryString("ParentId", parentIdFilder);
|
request.AddQueryString("ParentId", parentIdFilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("IsMissing", "False");
|
||||||
|
|
||||||
AddHeaders(request, apiKey);
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ namespace Ombi.Api.Emby
|
||||||
request.AddQueryString("IncludeItemTypes", type);
|
request.AddQueryString("IncludeItemTypes", type);
|
||||||
request.AddQueryString("Fields", includeOverview ? "ProviderIds,Overview" : "ProviderIds");
|
request.AddQueryString("Fields", includeOverview ? "ProviderIds,Overview" : "ProviderIds");
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("IsMissing", "False");
|
||||||
|
|
||||||
AddHeaders(request, apiKey);
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ namespace Ombi.Api.Emby
|
||||||
request.AddQueryString("ParentId", parentIdFilder);
|
request.AddQueryString("ParentId", parentIdFilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("isMissing", "False");
|
||||||
|
|
||||||
AddHeaders(request, apiKey);
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ namespace Ombi.Api.Jellyfin
|
||||||
|
|
||||||
request.AddQueryString("Fields", "ProviderIds,Overview");
|
request.AddQueryString("Fields", "ProviderIds,Overview");
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("isMissing", "False");
|
||||||
|
|
||||||
return await Api.Request<JellyfinItemContainer<JellyfinMovie>>(request);
|
return await Api.Request<JellyfinItemContainer<JellyfinMovie>>(request);
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ namespace Ombi.Api.Jellyfin
|
||||||
request.AddQueryString("IncludeItemTypes", type);
|
request.AddQueryString("IncludeItemTypes", type);
|
||||||
request.AddQueryString("Fields", includeOverview ? "ProviderIds,Overview" : "ProviderIds");
|
request.AddQueryString("Fields", includeOverview ? "ProviderIds,Overview" : "ProviderIds");
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("isMissing", "False");
|
||||||
|
|
||||||
AddHeaders(request, apiKey);
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ namespace Ombi.Api.Jellyfin
|
||||||
request.AddQueryString("ParentId", parentIdFilder);
|
request.AddQueryString("ParentId", parentIdFilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.AddQueryString("IsVirtualItem", "False");
|
request.AddQueryString("isMissing", "False");
|
||||||
|
|
||||||
AddHeaders(request, apiKey);
|
AddHeaders(request, apiKey);
|
||||||
|
|
||||||
|
|
|
@ -130,12 +130,6 @@ namespace Ombi.Schedule.Jobs.Emby
|
||||||
{
|
{
|
||||||
processed++;
|
processed++;
|
||||||
|
|
||||||
if (ep.LocationType?.Equals("Virtual", StringComparison.InvariantCultureIgnoreCase) ?? false)
|
|
||||||
{
|
|
||||||
// For some reason Emby is not respecting the `IsVirtualItem` field.
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's make sure we have the parent request, stop those pesky forign key errors,
|
// Let's make sure we have the parent request, stop those pesky forign key errors,
|
||||||
// Damn me having data integrity
|
// Damn me having data integrity
|
||||||
var parent = await _repo.GetByEmbyId(ep.SeriesId);
|
var parent = await _repo.GetByEmbyId(ep.SeriesId);
|
||||||
|
@ -176,10 +170,15 @@ namespace Ombi.Schedule.Jobs.Emby
|
||||||
|
|
||||||
if (ep.IndexNumberEnd.HasValue && ep.IndexNumberEnd.Value != ep.IndexNumber)
|
if (ep.IndexNumberEnd.HasValue && ep.IndexNumberEnd.Value != ep.IndexNumber)
|
||||||
{
|
{
|
||||||
|
int episodeNumber = ep.IndexNumber;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
_logger.LogDebug($"Multiple-episode file detected. Adding episode ${episodeNumber}");
|
||||||
|
episodeNumber++;
|
||||||
epToAdd.Add(new EmbyEpisode
|
epToAdd.Add(new EmbyEpisode
|
||||||
{
|
{
|
||||||
EmbyId = ep.Id,
|
EmbyId = ep.Id,
|
||||||
EpisodeNumber = ep.IndexNumberEnd.Value,
|
EpisodeNumber = episodeNumber,
|
||||||
SeasonNumber = ep.ParentIndexNumber,
|
SeasonNumber = ep.ParentIndexNumber,
|
||||||
ParentId = ep.SeriesId,
|
ParentId = ep.SeriesId,
|
||||||
TvDbId = ep.ProviderIds.Tvdb,
|
TvDbId = ep.ProviderIds.Tvdb,
|
||||||
|
@ -188,6 +187,9 @@ namespace Ombi.Schedule.Jobs.Emby
|
||||||
Title = ep.Name,
|
Title = ep.Name,
|
||||||
AddedAt = DateTime.UtcNow
|
AddedAt = DateTime.UtcNow
|
||||||
});
|
});
|
||||||
|
|
||||||
|
} while (episodeNumber < ep.IndexNumberEnd.Value);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,12 +106,6 @@ namespace Ombi.Schedule.Jobs.Jellyfin
|
||||||
{
|
{
|
||||||
processed++;
|
processed++;
|
||||||
|
|
||||||
if (ep.LocationType?.Equals("Virtual", StringComparison.InvariantCultureIgnoreCase) ?? false)
|
|
||||||
{
|
|
||||||
// For some reason Jellyfin is not respecting the `IsVirtualItem` field.
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's make sure we have the parent request, stop those pesky forign key errors,
|
// Let's make sure we have the parent request, stop those pesky forign key errors,
|
||||||
// Damn me having data integrity
|
// Damn me having data integrity
|
||||||
var parent = await _repo.GetByJellyfinId(ep.SeriesId);
|
var parent = await _repo.GetByJellyfinId(ep.SeriesId);
|
||||||
|
@ -152,10 +146,15 @@ namespace Ombi.Schedule.Jobs.Jellyfin
|
||||||
|
|
||||||
if (ep.IndexNumberEnd.HasValue && ep.IndexNumberEnd.Value != ep.IndexNumber)
|
if (ep.IndexNumberEnd.HasValue && ep.IndexNumberEnd.Value != ep.IndexNumber)
|
||||||
{
|
{
|
||||||
|
int episodeNumber = ep.IndexNumber;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
_logger.LogDebug($"Multiple-episode file detected. Adding episode ${episodeNumber}");
|
||||||
|
episodeNumber++;
|
||||||
epToAdd.Add(new JellyfinEpisode
|
epToAdd.Add(new JellyfinEpisode
|
||||||
{
|
{
|
||||||
JellyfinId = ep.Id,
|
JellyfinId = ep.Id,
|
||||||
EpisodeNumber = ep.IndexNumberEnd.Value,
|
EpisodeNumber = episodeNumber,
|
||||||
SeasonNumber = ep.ParentIndexNumber,
|
SeasonNumber = ep.ParentIndexNumber,
|
||||||
ParentId = ep.SeriesId,
|
ParentId = ep.SeriesId,
|
||||||
TvDbId = ep.ProviderIds.Tvdb,
|
TvDbId = ep.ProviderIds.Tvdb,
|
||||||
|
@ -164,6 +163,8 @@ namespace Ombi.Schedule.Jobs.Jellyfin
|
||||||
Title = ep.Name,
|
Title = ep.Name,
|
||||||
AddedAt = DateTime.UtcNow
|
AddedAt = DateTime.UtcNow
|
||||||
});
|
});
|
||||||
|
|
||||||
|
} while (episodeNumber < ep.IndexNumberEnd.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue