예제 #1
0
        /// <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));
            }
        }
예제 #2
0
    /// <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);
        }
    }
예제 #3
0
        /// <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));
            }
        }