From 184c21a91b71585ef736ff836077058c27985c4c Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sun, 21 Nov 2021 06:13:28 -0600 Subject: [PATCH] optimize trakt matching (#487) --- CHANGELOG.md | 1 + .../Commands/MatchTraktListItemsHandler.cs | 2 +- .../MediaCollections/Commands/TraktCommandBase.cs | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3551e5ed6..ed39b1d35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Include other video title in channel guide (xmltv) - Fix bug introduced with 0.2.4-alpha that caused some playouts to build from year 0 +- Use less memory matching Trakt list items ### Added - Build osx-arm64 packages on release diff --git a/ErsatzTV.Application/MediaCollections/Commands/MatchTraktListItemsHandler.cs b/ErsatzTV.Application/MediaCollections/Commands/MatchTraktListItemsHandler.cs index 3bcab45ed..d9251e202 100644 --- a/ErsatzTV.Application/MediaCollections/Commands/MatchTraktListItemsHandler.cs +++ b/ErsatzTV.Application/MediaCollections/Commands/MatchTraktListItemsHandler.cs @@ -39,7 +39,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands { try { - await using TvContext dbContext = _dbContextFactory.CreateDbContext(); + await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); Validation validation = await TraktListMustExist(dbContext, request.TraktListId); return await validation.Match( diff --git a/ErsatzTV.Application/MediaCollections/Commands/TraktCommandBase.cs b/ErsatzTV.Application/MediaCollections/Commands/TraktCommandBase.cs index 4a6b79b46..85f263a51 100644 --- a/ErsatzTV.Application/MediaCollections/Commands/TraktCommandBase.cs +++ b/ErsatzTV.Application/MediaCollections/Commands/TraktCommandBase.cs @@ -208,6 +208,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands var guids = item.Guids.Map(g => g.Guid).ToList(); Option maybeMovieByGuid = await dbContext.MovieMetadata + .AsNoTracking() .Filter(mm => mm.Guids.Any(g => guids.Contains(g.Guid))) .FirstOrDefaultAsync() .Map(Optional) @@ -220,6 +221,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands } Option maybeMovieByTitleYear = await dbContext.MovieMetadata + .AsNoTracking() .Filter(mm => mm.Title == item.Title && mm.Year == item.Year) .FirstOrDefaultAsync() .Map(Optional) @@ -241,6 +243,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands var guids = item.Guids.Map(g => g.Guid).ToList(); Option maybeShowByGuid = await dbContext.ShowMetadata + .AsNoTracking() .Filter(sm => sm.Guids.Any(g => guids.Contains(g.Guid))) .FirstOrDefaultAsync() .Map(Optional) @@ -253,6 +256,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands } Option maybeShowByTitleYear = await dbContext.ShowMetadata + .AsNoTracking() .Filter(sm => sm.Title == item.Title && sm.Year == item.Year) .FirstOrDefaultAsync() .Map(Optional) @@ -274,6 +278,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands var guids = item.Guids.Map(g => g.Guid).ToList(); Option maybeSeasonByGuid = await dbContext.SeasonMetadata + .AsNoTracking() .Filter(sm => sm.Guids.Any(g => guids.Contains(g.Guid))) .FirstOrDefaultAsync() .Map(Optional) @@ -286,6 +291,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands } Option maybeSeasonByTitleYear = await dbContext.SeasonMetadata + .AsNoTracking() .Filter(sm => sm.Season.Show.ShowMetadata.Any(s => s.Title == item.Title && s.Year == item.Year)) .Filter(sm => sm.Season.SeasonNumber == item.Season) .FirstOrDefaultAsync() @@ -308,6 +314,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands var guids = item.Guids.Map(g => g.Guid).ToList(); Option maybeEpisodeByGuid = await dbContext.EpisodeMetadata + .AsNoTracking() .Filter(em => em.Guids.Any(g => guids.Contains(g.Guid))) .FirstOrDefaultAsync() .Map(Optional) @@ -320,6 +327,7 @@ namespace ErsatzTV.Application.MediaCollections.Commands } Option maybeEpisodeByTitleYear = await dbContext.EpisodeMetadata + .AsNoTracking() .Filter(sm => sm.Episode.Season.Show.ShowMetadata.Any(s => s.Title == item.Title && s.Year == item.Year)) .Filter(em => em.Episode.Season.SeasonNumber == item.Season) .Filter(sm => sm.Episode.EpisodeMetadata.Any(e => e.EpisodeNumber == item.Episode))