aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Jellyfin.LiveTv/Guide/GuideManager.cs19
-rw-r--r--src/Jellyfin.LiveTv/Listings/XmlTvProgramEtag.cs24
2 files changed, 22 insertions, 21 deletions
diff --git a/src/Jellyfin.LiveTv/Guide/GuideManager.cs b/src/Jellyfin.LiveTv/Guide/GuideManager.cs
index d59eb9c18f..e0d9b323be 100644
--- a/src/Jellyfin.LiveTv/Guide/GuideManager.cs
+++ b/src/Jellyfin.LiveTv/Guide/GuideManager.cs
@@ -495,8 +495,6 @@ public class GuideManager : IGuideManager
DateCreated = DateTime.UtcNow,
DateModified = DateTime.UtcNow
};
-
- item.TrySetProviderId(EtagKey, info.Etag);
}
else if (XmlTvProgramEtag.MatchesStored(info.Etag, item.GetProviderId(EtagKey)))
{
@@ -629,13 +627,9 @@ public class GuideManager : IGuideManager
forceUpdate |= UpdateImages(item, info);
- if (isNew)
- {
- item.OnMetadataChanged();
-
- return (item, true, false);
- }
-
+ // Restore the etag wiped by `item.ProviderIds = info.ProviderIds` above and
+ // persist it on new items so they join the fast path on the next refresh
+ // instead of taking an extra full processing cycle.
var isUpdated = forceUpdate;
var etag = info.Etag;
if (string.IsNullOrWhiteSpace(etag))
@@ -648,6 +642,13 @@ public class GuideManager : IGuideManager
isUpdated = true;
}
+ if (isNew)
+ {
+ item.OnMetadataChanged();
+
+ return (item, true, false);
+ }
+
if (isUpdated)
{
item.OnMetadataChanged();
diff --git a/src/Jellyfin.LiveTv/Listings/XmlTvProgramEtag.cs b/src/Jellyfin.LiveTv/Listings/XmlTvProgramEtag.cs
index b128b0ff9c..b5ddb1530f 100644
--- a/src/Jellyfin.LiveTv/Listings/XmlTvProgramEtag.cs
+++ b/src/Jellyfin.LiveTv/Listings/XmlTvProgramEtag.cs
@@ -128,6 +128,18 @@ namespace Jellyfin.LiveTv.Listings
private static void AppendValue(StringBuilder builder, string name, DateTime? value)
=> AppendValue(builder, name, value.HasValue ? FormatDateTime(value.Value) : null);
+ private static void AppendValue(StringBuilder builder, string name, bool value)
+ => AppendValue(builder, name, value ? "true" : "false");
+
+ private static void AppendValue(StringBuilder builder, string name, bool? value)
+ => AppendValue(builder, name, value switch { true => "true", false => "false", null => null });
+
+ private static void AppendValue(StringBuilder builder, string name, int? value)
+ => AppendValue(builder, name, value?.ToString(CultureInfo.InvariantCulture));
+
+ private static void AppendValue(StringBuilder builder, string name, float? value)
+ => AppendValue(builder, name, value?.ToString("R", CultureInfo.InvariantCulture));
+
// Treat Unspecified as UTC so the etag does not vary with the server's local timezone.
private static string FormatDateTime(DateTime value)
{
@@ -141,18 +153,6 @@ namespace Jellyfin.LiveTv.Listings
return utc.ToString("O", CultureInfo.InvariantCulture);
}
- private static void AppendValue(StringBuilder builder, string name, bool value)
- => AppendValue(builder, name, value ? "true" : "false");
-
- private static void AppendValue(StringBuilder builder, string name, bool? value)
- => AppendValue(builder, name, value switch { true => "true", false => "false", null => null });
-
- private static void AppendValue(StringBuilder builder, string name, int? value)
- => AppendValue(builder, name, value?.ToString(CultureInfo.InvariantCulture));
-
- private static void AppendValue(StringBuilder builder, string name, float? value)
- => AppendValue(builder, name, value?.ToString("R", CultureInfo.InvariantCulture));
-
private static void AppendList(StringBuilder builder, string name, IReadOnlyList<string> values)
{
AppendValue(builder, name + ".Count", values.Count.ToString(CultureInfo.InvariantCulture));