private void AttachSoundtrackIds(BaseItemDto dto, Movie item, User user) { var tmdb = item.GetProviderId(MetadataProviders.Tmdb); if (string.IsNullOrEmpty(tmdb)) { return; } var recursiveChildren = user == null ? _libraryManager.RootFolder.RecursiveChildren : user.RootFolder.GetRecursiveChildren(user); dto.SoundtrackIds = recursiveChildren .Where(i => { if (!string.IsNullOrEmpty(tmdb) && string.Equals(tmdb, i.GetProviderId(MetadataProviders.Tmdb), StringComparison.OrdinalIgnoreCase) && i is MusicAlbum) { return true; } return false; }) .Select(GetClientItemId) .ToArray(); }
// /// <summary> // /// Return information about the user, including ratings format // /// </summary> // /// <param name="traktUser"></param> // /// <returns></returns> // public async Task<AccountSettingsDataContract> GetUserAccount(TraktUser traktUser) // { // var data = new Dictionary<string, string> { { "username", traktUser.UserName }, { "password", traktUser.Password } }; // // var response = // await // _httpClient.Post(TraktUris.AccountSettings, data, Plugin.Instance.TraktResourcePool, // CancellationToken.None).ConfigureAwait(false); // // return _jsonSerializer.DeserializeFromStream<AccountSettingsDataContract>(response); // } // // // // /// <summary> // /// Return a list of the users friends // /// </summary> // /// <param name="traktUser">The user who's friends you want to retrieve</param> // /// <returns>A TraktFriendDataContract</returns> // public async Task<TraktFriendDataContract> GetUserFriends(TraktUser traktUser) // { // var data = new Dictionary<string, string> { { "username", traktUser.UserName }, { "password", traktUser.Password } }; // // var response = await _httpClient.Post(string.Format(TraktUris.Friends, traktUser.UserName), data, Plugin.Instance.TraktResourcePool, // CancellationToken.None).ConfigureAwait(false); // // return _jsonSerializer.DeserializeFromStream<TraktFriendDataContract>(response); // // } // // // /// <summary> /// Report to trakt.tv that a movie is being watched, or has been watched. /// </summary> /// <param name="movie">The movie being watched/scrobbled</param> /// <param name="mediaStatus">MediaStatus enum dictating whether item is being watched or scrobbled</param> /// <param name="traktUser">The user that watching the current movie</param> /// <param name="progressPercent"></param> /// <returns>A standard TraktResponse Data Contract</returns> public async Task<TraktScrobbleResponse> SendMovieStatusUpdateAsync(Movie movie, MediaStatus mediaStatus, TraktUser traktUser, float progressPercent) { var movieData = new TraktScrobbleMovie { AppDate = DateTime.Today.ToString("yyyy-MM-dd"), AppVersion = _appHost.ApplicationVersion.ToString(), Progress = progressPercent, Movie = new TraktMovie { Title = movie.Name, Year = movie.ProductionYear, Ids = new TraktMovieId { Imdb = movie.GetProviderId(MetadataProviders.Imdb), Tmdb = movie.GetProviderId(MetadataProviders.Tmdb).ConvertToInt() } } }; string url; switch (mediaStatus) { case MediaStatus.Watching: url = TraktUris.ScrobbleStart; break; case MediaStatus.Paused: url = TraktUris.ScrobblePause; break; default: url = TraktUris.ScrobbleStop; break; } var response = await PostToTrakt(url, movieData, CancellationToken.None, traktUser); return _jsonSerializer.DeserializeFromStream<TraktScrobbleResponse>(response); }
/// <summary> /// Report to trakt.tv that a movie is being watched, or has been watched. /// </summary> /// <param name="movie">The movie being watched/scrobbled</param> /// <param name="mediaStatus">MediaStatus enum dictating whether item is being watched or scrobbled</param> /// <param name="traktUser">The user that watching the current movie</param> /// <returns>A standard TraktResponse Data Contract</returns> public async Task<TraktResponseDataContract> SendMovieStatusUpdateAsync(Movie movie, MediaStatus mediaStatus, TraktUser traktUser) { var data = new Dictionary<string,string> { {"username", traktUser.UserName}, {"password", traktUser.PasswordHash}, {"imdb_id", movie.GetProviderId(MetadataProviders.Imdb)} }; if (movie.ProviderIds != null && movie.ProviderIds.ContainsKey("Tmdb")) { data.Add("tmdb_id", movie.ProviderIds["Tmdb"]); } data.Add("title", movie.Name); data.Add("year", movie.ProductionYear != null ? movie.ProductionYear.ToString() : ""); data.Add("duration", movie.RunTimeTicks != null ? ((int)((movie.RunTimeTicks / 10000000) / 60)).ToString(CultureInfo.InvariantCulture) : ""); Stream response = null; if (mediaStatus == MediaStatus.Watching) response = await _httpClient.Post(TraktUris.MovieWatching, data, Plugin.Instance.TraktResourcePool, CancellationToken.None).ConfigureAwait(false); else if (mediaStatus == MediaStatus.Scrobble) response = await _httpClient.Post(TraktUris.MovieScrobble, data, Plugin.Instance.TraktResourcePool, CancellationToken.None).ConfigureAwait(false); return _jsonSerializer.DeserializeFromStream<TraktResponseDataContract>(response); }