/// <summary> /// Rate an item /// </summary> /// <param name="item"></param> /// <param name="rating"></param> /// <param name="traktUser"></param> /// <returns></returns> public async Task <TraktSyncResponse> SendItemRating(BaseItem item, int rating, TraktUser traktUser) { object data = new { }; if (item is Movie) { data = new { movies = new[] { new TraktMovieRated { title = item.Name, year = item.ProductionYear, ids = new TraktMovieId { imdb = item.GetProviderId(MetadataProvider.Imdb), tmdb = item.GetProviderId(MetadataProvider.Tmdb).ConvertToInt() }, rating = rating } } }; } else if (item is Episode) { var episode = item as Episode; if (string.IsNullOrEmpty(episode.GetProviderId(MetadataProvider.Tvdb))) { if (episode.IndexNumber.HasValue) { var indexNumber = episode.IndexNumber.Value; var show = new TraktShowRated { ids = new TraktShowId { tvdb = episode.Series.GetProviderId(MetadataProvider.Tvdb).ConvertToInt(), imdb = episode.Series.GetProviderId(MetadataProvider.Imdb), tvrage = episode.Series.GetProviderId(MetadataProvider.TvRage).ConvertToInt() }, seasons = new List <TraktShowRated.TraktSeasonRated> { new TraktShowRated.TraktSeasonRated { number = episode.GetSeasonNumber(), episodes = new List <TraktEpisodeRated> { new TraktEpisodeRated { number = indexNumber, rating = rating } } } } }; data = new { shows = new[] { show } }; } } else { data = new { episodes = new[] { new TraktEpisodeRated { rating = rating, ids = new TraktEpisodeId { tvdb = episode.GetProviderId(MetadataProvider.Tvdb).ConvertToInt() } } } }; } } else // It's a Series { data = new { shows = new[] { new TraktShowRated { rating = rating, title = item.Name, year = item.ProductionYear, ids = new TraktShowId { imdb = item.GetProviderId(MetadataProvider.Imdb), tvdb = item.GetProviderId(MetadataProvider.Tvdb).ConvertToInt() } } } }; } using (var response = await PostToTrakt(TraktUris.SyncRatingsAdd, data, traktUser).ConfigureAwait(false)) { return(await JsonSerializer.DeserializeAsync <TraktSyncResponse>(response, _jsonOptions).ConfigureAwait(false)); } }
/// <summary> /// Rate an item /// </summary> /// <param name="item"></param> /// <param name="rating"></param> /// <param name="traktUser"></param> /// <returns></returns> public async Task <TraktSyncResponse> SendItemRating(BaseItem item, int rating, TraktUser traktUser, bool useEpisodeProviderIDs = true) { object data = new { }; if (item is Movie) { data = new { movies = new[] { new TraktMovieRated { Title = item.Name, Year = item.ProductionYear, Ids = GetTraktIMDBTMDBIds <Movie, TraktMovieId>((Movie)item), Rating = rating } } }; } else if (item is Episode episode) { if (useEpisodeProviderIDs && HasAnyProviderTvIds(episode)) { data = new { episodes = new[] { new TraktEpisodeRated { Rating = rating, Ids = GetTraktTvIds <Episode, TraktEpisodeId>(episode) } } }; } else { if (episode.IndexNumber.HasValue) { var show = new TraktShowRated { Ids = GetTraktTvIds <Series, TraktShowId>(episode.Series), Seasons = new List <TraktSeasonRated> { new TraktSeasonRated { Number = episode.GetSeasonNumber(), Episodes = new List <TraktEpisodeRated> { new TraktEpisodeRated { Number = episode.IndexNumber, Rating = rating } } } } }; data = new { shows = new[] { show } }; } } } else // It's a Series { data = new { shows = new[] { new TraktShowRated { Rating = rating, Title = item.Name, Year = item.ProductionYear, Ids = GetTraktTvIds <Series, TraktShowId>((Series)item) } } }; } using (var response = await PostToTrakt(TraktUris.SyncRatingsAdd, data, traktUser).ConfigureAwait(false)) { var tsr = await JsonSerializer.DeserializeAsync <TraktSyncResponse>(response, _jsonOptions).ConfigureAwait(false); if (item is Episode && useEpisodeProviderIDs && tsr.NotFound.Episodes.Count > 0) { // try without IDs to see if that matches _logger.LogDebug("Resend episode rating, without episode IDs"); return(await SendItemRating(item, rating, traktUser, false).ConfigureAwait(false)); } return(tsr); } }
/// <summary> /// Rate an item /// </summary> /// <param name="item"></param> /// <param name="rating"></param> /// <param name="traktUser"></param> /// <returns></returns> public async Task <TraktSyncResponse> SendItemRating(BaseItem item, int rating, TraktUser traktUser) { object data = new {}; if (item is Movie) { data = new { movies = new[] { new TraktMovieRated { Title = item.Name, Year = item.ProductionYear, Ids = new TraktMovieId { Imdb = item.GetProviderId(MetadataProviders.Imdb), Tmdb = item.GetProviderId(MetadataProviders.Tmdb).ConvertToInt() }, Rating = rating } } }; } else if (item is Episode) { var episode = item as Episode; if (string.IsNullOrEmpty(episode.GetProviderId(MetadataProviders.Tvdb))) { if (episode.IndexNumber.HasValue) { var indexNumber = episode.IndexNumber.Value; var show = new TraktShowRated { Ids = new TraktShowId { Tvdb = episode.Series.GetProviderId(MetadataProviders.Tvdb).ConvertToInt(), Imdb = episode.Series.GetProviderId(MetadataProviders.Imdb), TvRage = episode.Series.GetProviderId(MetadataProviders.TvRage).ConvertToInt() }, Seasons = new List <TraktShowRated.TraktSeasonRated> { new TraktShowRated.TraktSeasonRated { Number = episode.GetSeasonNumber(), Episodes = new List <TraktEpisodeRated> { new TraktEpisodeRated { Number = indexNumber, Rating = rating } } } } }; data = new { shows = new[] { show } }; } } else { data = new { episodes = new[] { new TraktEpisodeRated { Rating = rating, Ids = new TraktEpisodeId { Tvdb = episode.GetProviderId(MetadataProviders.Tvdb).ConvertToInt() } } } }; } } else // It's a Series { data = new { shows = new[] { new TraktShowRated { Rating = rating, Title = item.Name, Year = item.ProductionYear, Ids = new TraktShowId { Imdb = item.GetProviderId(MetadataProviders.Imdb), Tvdb = item.GetProviderId(MetadataProviders.Tvdb).ConvertToInt() } } } }; } using (var response = await PostToTrakt(TraktUris.SyncRatingsAdd, data, traktUser)) { return(_jsonSerializer.DeserializeFromStream <TraktSyncResponse>(response)); } }