From 0aac70285379d0167a3bc464d992528b1cf23718 Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Tue, 6 Apr 2021 07:42:21 -0500 Subject: [PATCH] search movies and music videos by language (#148) --- .../Data/Repositories/SearchRepository.cs | 4 ++++ ErsatzTV.Infrastructure/Search/SearchIndex.cs | 21 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ErsatzTV.Infrastructure/Data/Repositories/SearchRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/SearchRepository.cs index 59c504e38..6f888c8b0 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/SearchRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/SearchRepository.cs @@ -39,6 +39,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories .ThenInclude(mm => mm.Tags) .Include(mi => (mi as Movie).MovieMetadata) .ThenInclude(mm => mm.Studios) + .Include(mi => (mi as Movie).MediaVersions) + .ThenInclude(mm => mm.Streams) .Include(mi => (mi as Show).ShowMetadata) .ThenInclude(mm => mm.Genres) .Include(mi => (mi as Show).ShowMetadata) @@ -51,6 +53,8 @@ namespace ErsatzTV.Infrastructure.Data.Repositories .ThenInclude(mm => mm.Tags) .Include(mi => (mi as MusicVideo).MusicVideoMetadata) .ThenInclude(mm => mm.Studios) + .Include(mi => (mi as MusicVideo).MediaVersions) + .ThenInclude(mm => mm.Streams) .OrderBy(mi => mi.Id) .SingleOrDefaultAsync(mi => mi.Id == id) .Map(Optional); diff --git a/ErsatzTV.Infrastructure/Search/SearchIndex.cs b/ErsatzTV.Infrastructure/Search/SearchIndex.cs index 0dd540032..ad01f09d9 100644 --- a/ErsatzTV.Infrastructure/Search/SearchIndex.cs +++ b/ErsatzTV.Infrastructure/Search/SearchIndex.cs @@ -40,6 +40,7 @@ namespace ErsatzTV.Infrastructure.Search private const string JumpLetterField = "jump_letter"; private const string ReleaseDateField = "release_date"; private const string StudioField = "studio"; + private const string LanguageField = "language"; private const string MovieType = "movie"; private const string ShowType = "show"; @@ -52,7 +53,7 @@ namespace ErsatzTV.Infrastructure.Search public SearchIndex(ILogger logger) => _logger = logger; - public int Version => 2; + public int Version => 3; public Task Initialize(ILocalFileSystem localFileSystem) { @@ -231,6 +232,8 @@ namespace ErsatzTV.Infrastructure.Search new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES) }; + AddLanguages(doc, movie.MediaVersions); + if (metadata.ReleaseDate.HasValue) { doc.Add( @@ -270,6 +273,20 @@ namespace ErsatzTV.Infrastructure.Search } } + private void AddLanguages(Document doc, List mediaVersions) + { + Option maybeVersion = mediaVersions.HeadOrNone(); + if (maybeVersion.IsSome) + { + MediaVersion version = maybeVersion.ValueUnsafe(); + foreach (string lang in version.Streams.Map(ms => ms.Language).Distinct() + .Filter(s => !string.IsNullOrWhiteSpace(s))) + { + doc.Add(new StringField(LanguageField, lang, Field.Store.NO)); + } + } + } + private void UpdateShow(Show show) { Option maybeMetadata = show.ShowMetadata.HeadOrNone(); @@ -350,6 +367,8 @@ namespace ErsatzTV.Infrastructure.Search new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES) }; + AddLanguages(doc, musicVideo.MediaVersions); + if (metadata.ReleaseDate.HasValue) { doc.Add(