diff --git a/src/Ombi.Core/Engine/V2/MultiSearchEngine.cs b/src/Ombi.Core/Engine/V2/MultiSearchEngine.cs index 985e07cb2..8d2e0b497 100644 --- a/src/Ombi.Core/Engine/V2/MultiSearchEngine.cs +++ b/src/Ombi.Core/Engine/V2/MultiSearchEngine.cs @@ -23,7 +23,7 @@ namespace Ombi.Core.Engine.V2 { public MultiSearchEngine(IPrincipal identity, IRequestServiceMain requestService, IRuleEvaluator rules, OmbiUserManager um, ICacheService cache, ISettingsService ombiSettings, IRepository sub, - IMovieDbApi movieDbApi, ISettingsService lidarrSettings, IMusicBrainzApi musicApi) + IMovieDbApi movieDbApi, ISettingsService lidarrSettings, IMusicBrainzApi musicApi) : base(identity, requestService, rules, um, cache, ombiSettings, sub) { _movieDbApi = movieDbApi; @@ -36,12 +36,12 @@ namespace Ombi.Core.Engine.V2 private readonly IMusicBrainzApi _musicApi; - public async Task> MultiSearch(string searchTerm, CancellationToken cancellationToken, string lang = "en") + public async Task> MultiSearch(string searchTerm, CancellationToken cancellationToken, string lang = "en") { var model = new List(); var movieDbData = (await _movieDbApi.MultiSearch(searchTerm, lang, cancellationToken)).results; - + var lidarrSettings = await _lidarrSettings.GetSettingsAsync(); if (lidarrSettings.Enabled) { @@ -51,7 +51,8 @@ namespace Ombi.Core.Engine.V2 model.Add(new MultiSearchResult { MediaType = "Artist", - Title = artist.name + Title = artist.name, + Id = artist.id }); } } @@ -67,10 +68,36 @@ namespace Ombi.Core.Engine.V2 { if (multiSearch.release_date.HasValue() && DateTime.TryParse(multiSearch.release_date, out var releaseDate)) { - result.Title = + result.Title = $"{multiSearch.title} ({releaseDate.Year})"; + } + else + { + result.Title = multiSearch.title; } } + + if (multiSearch.media_type.Equals("tv", StringComparison.InvariantCultureIgnoreCase)) + { + if (multiSearch.release_date.HasValue() && DateTime.TryParse(multiSearch.release_date, out var releaseDate)) + { + result.Title = $"{multiSearch.name} ({releaseDate.Year})"; + } + else + { + result.Title = multiSearch.name; + } + } + + if (multiSearch.media_type.Equals("person", StringComparison.InvariantCultureIgnoreCase)) + { + result.Title = multiSearch.name; + } + + result.Id = multiSearch.id.ToString(); + model.Add(result); } + + return model; } } } diff --git a/src/Ombi.Core/Models/Search/V2/MultiSearchResult.cs b/src/Ombi.Core/Models/Search/V2/MultiSearchResult.cs index 171cec9cb..e514095c9 100644 --- a/src/Ombi.Core/Models/Search/V2/MultiSearchResult.cs +++ b/src/Ombi.Core/Models/Search/V2/MultiSearchResult.cs @@ -2,6 +2,7 @@ { public class MultiSearchResult { + public string Id { get; set; } public string MediaType { get; set; } public string Title { get; set; } } diff --git a/src/Ombi.Mapping/Profiles/MovieProfile.cs b/src/Ombi.Mapping/Profiles/MovieProfile.cs index 7d981a7bc..7027f3aed 100644 --- a/src/Ombi.Mapping/Profiles/MovieProfile.cs +++ b/src/Ombi.Mapping/Profiles/MovieProfile.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using AutoMapper; using Ombi.Api.TheMovieDb.Models; using Ombi.Core.Models.Search; @@ -101,6 +102,7 @@ namespace Ombi.Mapping.Profiles .ForMember(x => x.Id, o => o.MapFrom(s => s.id)) .ForMember(x => x.Overview, o => o.MapFrom(s => s.overview)) .ForMember(x => x.PosterPath, o => o.MapFrom(s => s.poster_path)) + .ForMember(x => x.ReleaseDate, o => o.MapFrom(s => DateTime.Parse(s.release_date))) .ForMember(x => x.Title, o => o.MapFrom(s => s.title)); CreateMap().ReverseMap(); diff --git a/src/Ombi/ClientApp/src/app/interfaces/ISearchMovieResult.ts b/src/Ombi/ClientApp/src/app/interfaces/ISearchMovieResult.ts index 67ebbf0dc..e52bdd8dc 100644 --- a/src/Ombi/ClientApp/src/app/interfaces/ISearchMovieResult.ts +++ b/src/Ombi/ClientApp/src/app/interfaces/ISearchMovieResult.ts @@ -35,25 +35,9 @@ } export interface IMultiSearchResult { - original_name: string; - id: number; - media_type: string; - name: string; - vote_count: number; - vote_average: number; - poster_path: string; - first_air_date: string; - popularity: number; - genre_ids: number[]; - original_language: string; - backdrop_path: string; - overview: string; - origin_country: string[]; - video: true; - title: string; - original_title: string; - adult: true; - release_date: string; + id: string; + mediaType: string; + title: string; } export interface ILanguageRefine { diff --git a/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.html b/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.html index 33930ebbb..f60441d29 100644 --- a/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.html +++ b/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.html @@ -4,24 +4,19 @@ -
+
  - - {{result.title}} ({{result.release_date.slice(0,4)}}) - - {{result.title}} + {{result.title}}
-
+
  - - {{result.name}} ({{result.release_date.slice(0,4)}}) - - {{result.name}} + + {{result.title}}
-
+
  - {{result.name}} + {{result.title}}
diff --git a/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts b/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts index ca55d0058..29199220a 100644 --- a/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts +++ b/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts @@ -15,27 +15,12 @@ import { NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap'; export class NavSearchComponent { public selectedItem: string; - public searching = false; public searchFailed = false; public formatter = (result: IMultiSearchResult) => { - if(result.media_type === "movie") { - let title = result.title; - if(result.release_date) { - title += ` (${result.release_date.slice(0,4)})`; - } - return title; - } else if (result.media_type === "tv") { - let title = result.name; - if(result.release_date) { - title += ` (${result.release_date.slice(0,4)})`; - } - return title; - } else if(result.media_type === "person"){ - return result.name; - } + return result.title; } public searchModel = (text$: Observable) => @@ -54,13 +39,13 @@ export class NavSearchComponent { public selected(event: NgbTypeaheadSelectItemEvent) { - if (event.item.media_type == "movie") { + if (event.item.mediaType == "movie") { this.router.navigate([`details/movie/${event.item.id}`]); return; - } else if (event.item.media_type == "tv") { + } else if (event.item.mediaType == "tv") { this.router.navigate([`details/tv/${event.item.id}/true`]); return; - } else if (event.item.media_type == "person") { + } else if (event.item.mediaType == "person") { this.router.navigate([`discover/actor/${event.item.id}`]); return; }