diff --git a/CHANGELOG.md b/CHANGELOG.md index f71953b06..7f945a997 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - VAAPI: fix scaling image-based subtitles (e.g. dvdsub) - Fix HLS Segmenter (fmp4) on Windows - Playback troubleshooting: wait for at least 2 initial segments (up to configured initial segment count) to reduce stalls +- Fix Trakt List sync ### Changed - Do not use graphics engine for single, permanent watermark diff --git a/ErsatzTV.Infrastructure/Trakt/TraktApiClient.cs b/ErsatzTV.Infrastructure/Trakt/TraktApiClient.cs index 2ab1764d4..856ed1629 100644 --- a/ErsatzTV.Infrastructure/Trakt/TraktApiClient.cs +++ b/ErsatzTV.Infrastructure/Trakt/TraktApiClient.cs @@ -5,31 +5,22 @@ using ErsatzTV.Core.Trakt; using ErsatzTV.Infrastructure.Trakt.Models; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using Newtonsoft.Json; -using Refit; namespace ErsatzTV.Infrastructure.Trakt; -public class TraktApiClient : ITraktApiClient +public class TraktApiClient( + ITraktApi traktApi, + IOptions traktConfiguration, + ILogger logger) + : ITraktApiClient { - private readonly ILogger _logger; - private readonly IOptions _traktConfiguration; - - public TraktApiClient( - IOptions traktConfiguration, - ILogger logger) - { - _traktConfiguration = traktConfiguration; - _logger = logger; - } - public async Task> GetUserList(string user, string list) { try { TraktListResponse response = string.Equals(user, "official", StringComparison.OrdinalIgnoreCase) - ? await JsonService().GetOfficialList(_traktConfiguration.Value.ClientId, list) - : await JsonService().GetUserList(_traktConfiguration.Value.ClientId, user, list); + ? await traktApi.GetOfficialList(traktConfiguration.Value.ClientId, list) + : await traktApi.GetUserList(traktConfiguration.Value.ClientId, user, list); return new TraktList { @@ -47,7 +38,7 @@ public class TraktApiClient : ITraktApiClient } catch (Exception ex) { - _logger.LogError(ex, "Error getting trakt list"); + logger.LogError(ex, "Error getting trakt list"); return BaseError.New(ex.Message); } } @@ -59,8 +50,8 @@ public class TraktApiClient : ITraktApiClient var result = new List(); List apiItems = string.Equals(user, "official", StringComparison.OrdinalIgnoreCase) - ? await JsonService().GetOfficialListItems(_traktConfiguration.Value.ClientId, list) - : await JsonService().GetUserListItems(_traktConfiguration.Value.ClientId, user, list); + ? await traktApi.GetOfficialListItems(traktConfiguration.Value.ClientId, list) + : await traktApi.GetUserListItems(traktConfiguration.Value.ClientId, user, list); foreach (TraktListItemResponse apiItem in apiItems) { @@ -119,23 +110,11 @@ public class TraktApiClient : ITraktApiClient } catch (Exception ex) { - _logger.LogError(ex, "Error getting trakt list items"); + logger.LogError(ex, "Error getting trakt list items"); return BaseError.New(ex.Message); } } - private static ITraktApi JsonService() => - RestService.For( - "https://api.trakt.tv", - new RefitSettings - { - ContentSerializer = new NewtonsoftJsonContentSerializer( - new JsonSerializerSettings - { - ContractResolver = new SnakeCasePropertyNamesContractResolver() - }) - }); - private static List GuidsFromIds(TraktListItemIds ids) { var result = new List(); diff --git a/ErsatzTV/Startup.cs b/ErsatzTV/Startup.cs index 91bf70ca4..a749b2c13 100644 --- a/ErsatzTV/Startup.cs +++ b/ErsatzTV/Startup.cs @@ -352,10 +352,10 @@ public class Startup Console.OutputEncoding = Encoding.UTF8; - Log.Logger.Information( - "ErsatzTV version {Version}", - Assembly.GetEntryAssembly()?.GetCustomAttribute() - ?.InformationalVersion ?? "unknown"); + string etvVersion = Assembly.GetEntryAssembly()?.GetCustomAttribute() + ?.InformationalVersion ?? "unknown"; + + Log.Logger.Information("ErsatzTV version {Version}", etvVersion); Log.Logger.Warning( "Give feedback at {GitHub} or {Discord}", @@ -488,8 +488,20 @@ public class Startup services.AddRefitClient() .ConfigureHttpClient(c => c.BaseAddress = new Uri("https://plex.tv/api/v2")); - services.AddRefitClient() - .ConfigureHttpClient(c => c.BaseAddress = new Uri("https://api.trakt.tv")); + services.AddRefitClient( + new RefitSettings + { + ContentSerializer = new NewtonsoftJsonContentSerializer( + new JsonSerializerSettings + { + ContractResolver = new SnakeCasePropertyNamesContractResolver() + }) + }) + .ConfigureHttpClient(c => + { + c.BaseAddress = new Uri("https://api.trakt.tv"); + c.DefaultRequestHeaders.Add("User-Agent", $"ErsatzTV/{etvVersion}"); + }); services.Configure(Configuration.GetSection("Trakt"));