public async Task Test_TraktSyncModule_GetWatchlist_With_Type_And_Sort_And_Page() { TraktClient client = TestUtility.GetOAuthMockClient( $"{GET_WATCHLIST_URI}/{WATCHLIST_ITEM_TYPE.UriName}/{WATCHLIST_SORT_ORDER.UriName}?page={PAGE}", WATCHLIST_JSON, PAGE, 10, 1, ITEM_COUNT, sortBy: WATCHLIST_SORT_BY, sortHow: WATCHLIST_SORT_HOW); var pagedParameters = new TraktPagedParameters(PAGE); TraktPagedResponse <ITraktWatchlistItem> response = await client.Sync.GetWatchlistAsync(WATCHLIST_ITEM_TYPE, WATCHLIST_SORT_ORDER, null, pagedParameters); response.Should().NotBeNull(); response.IsSuccess.Should().BeTrue(); response.HasValue.Should().BeTrue(); response.Value.Should().NotBeNull().And.HaveCount(ITEM_COUNT); response.ItemCount.Should().HaveValue().And.Be(ITEM_COUNT); response.Limit.Should().Be(10u); response.Page.Should().Be(PAGE); response.PageCount.Should().HaveValue().And.Be(1); response.SortBy.Should().NotBeNull().And.Be(WATCHLIST_SORT_BY); response.SortHow.Should().NotBeNull().And.Be(WATCHLIST_SORT_HOW); }
public async Task Test_TraktSyncModule_GetWatchlist_With_Type_And_ExtendedInfo_And_Limit() { TraktClient client = TestUtility.GetOAuthMockClient( $"{GET_WATCHLIST_URI}/{WATCHLIST_ITEM_TYPE.UriName}?extended={EXTENDED_INFO}&limit={LIMIT}", WATCHLIST_JSON, 1, LIMIT, 1, ITEM_COUNT, sortBy: WATCHLIST_SORT_BY, sortHow: WATCHLIST_SORT_HOW); var pagedParameters = new TraktPagedParameters(null, LIMIT); TraktPagedResponse <ITraktWatchlistItem> response = await client.Sync.GetWatchlistAsync(WATCHLIST_ITEM_TYPE, null, EXTENDED_INFO, pagedParameters); response.Should().NotBeNull(); response.IsSuccess.Should().BeTrue(); response.HasValue.Should().BeTrue(); response.Value.Should().NotBeNull().And.HaveCount(ITEM_COUNT); response.ItemCount.Should().HaveValue().And.Be(ITEM_COUNT); response.Limit.Should().Be(LIMIT); response.Page.Should().Be(1u); response.PageCount.Should().HaveValue().And.Be(1); response.SortBy.Should().NotBeNull().And.Be(WATCHLIST_SORT_BY); response.SortHow.Should().NotBeNull().And.Be(WATCHLIST_SORT_HOW); }
public async Task Test_TraktUsersModule_GetWatchlist_With_Page_And_Limit() { TraktClient client = TestUtility.GetMockClient( $"{GET_WATCHLIST_URI}?page={PAGE}&limit={WATCHLIST_LIMIT}", WATCHLIST_JSON, PAGE, WATCHLIST_LIMIT, 1, WATCHLIST_ITEM_COUNT, sortBy: SORT_BY, sortHow: SORT_HOW); var pagedParameters = new TraktPagedParameters(PAGE, WATCHLIST_LIMIT); TraktPagedResponse <ITraktWatchlistItem> response = await client.Users.GetWatchlistAsync(USERNAME, null, null, null, pagedParameters); response.Should().NotBeNull(); response.IsSuccess.Should().BeTrue(); response.HasValue.Should().BeTrue(); response.Value.Should().NotBeNull().And.HaveCount(WATCHLIST_ITEM_COUNT); response.ItemCount.Should().HaveValue().And.Be(WATCHLIST_ITEM_COUNT); response.Limit.Should().Be(WATCHLIST_LIMIT); response.Page.Should().Be(PAGE); response.PageCount.Should().HaveValue().And.Be(1); response.SortBy.Should().NotBeNull().And.Be(SORT_BY); response.SortHow.Should().NotBeNull().And.Be(SORT_HOW); }
public async Task Test_TraktUsersModule_GetRatings_Complete() { var ratingsFilter = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; TraktClient client = TestUtility.GetMockClient( $"{GET_RATINGS_URI}/{RATINGS_ITEM_TYPE.UriName}" + $"/{BuildRatingsFilterString(ratingsFilter)}?extended={EXTENDED_INFO}&page={PAGE}&limit={LIMIT}", RATINGS_JSON, 1, 10, 1, RATINGS_ITEM_COUNT); var pagedParameters = new TraktPagedParameters(PAGE, LIMIT); TraktPagedResponse <ITraktRatingsItem> response = await client.Users.GetRatingsAsync(USERNAME, RATINGS_ITEM_TYPE, ratingsFilter, EXTENDED_INFO, pagedParameters); response.Should().NotBeNull(); response.IsSuccess.Should().BeTrue(); response.HasValue.Should().BeTrue(); response.Value.Should().NotBeNull().And.HaveCount(4); response.ItemCount.Should().HaveValue().And.Be(RATINGS_ITEM_COUNT); response.Limit.Should().Be(10u); response.Page.Should().Be(1u); response.PageCount.Should().HaveValue().And.Be(1); }
public async Task Test_TraktUsersModule_GetWatchlist_With_Type_And_ExtendedInfo_And_Page() { TraktClient client = TestUtility.GetMockClient( $"{GET_WATCHLIST_URI}/{WATCHLIST_ITEM_TYPE.UriName}?extended={EXTENDED_INFO}&page={PAGE}", WATCHLIST_JSON, PAGE, 10, 1, WATCHLIST_ITEM_COUNT, sortBy: SORT_BY, sortHow: SORT_HOW); var pagedParameters = new TraktPagedParameters(PAGE); TraktPagedResponse <ITraktWatchlistItem> response = await client.Users.GetWatchlistAsync(USERNAME, WATCHLIST_ITEM_TYPE, null, EXTENDED_INFO, pagedParameters); response.Should().NotBeNull(); response.IsSuccess.Should().BeTrue(); response.HasValue.Should().BeTrue(); response.Value.Should().NotBeNull().And.HaveCount(WATCHLIST_ITEM_COUNT); response.ItemCount.Should().HaveValue().And.Be(WATCHLIST_ITEM_COUNT); response.Limit.Should().Be(10u); response.Page.Should().Be(PAGE); response.PageCount.Should().HaveValue().And.Be(1); response.SortBy.Should().NotBeNull().And.Be(SORT_BY); response.SortHow.Should().NotBeNull().And.Be(SORT_HOW); }
/// <summary> /// Gets replies for comment with the given id. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/comments/replies/get-replies-for-a-comment">"Trakt API Doc - Comments: Replies"</a> for more information. /// </para> /// </summary> /// <param name="commentId">The id of the comment, for which the replies should be queried.</param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktComment}"/> instance containing the queried replies and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktComment" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> /// <exception cref="ArgumentException">Thrown, if the given comment id is null, empty or contains spaces.</exception> public Task <TraktPagedResponse <ITraktComment> > GetCommentRepliesAsync(uint commentId, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { ValidateId(commentId); var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new CommentRepliesRequest { Id = commentId.ToString(), Page = pagedParameters?.Page, Limit = pagedParameters?.Limit, }, cancellationToken)); }
/// <summary> /// Gets trending comments. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="https://trakt.docs.apiary.io/#reference/comments/trending/get-trending-comments">"Trakt API Doc - Comments: Trending"</a> for more information. /// </para> /// </summary> /// <param name="commentType">Determines, which type of comments should be queried. See also <seealso cref="TraktCommentType" />.</param> /// <param name="objectType">Determines, for which object types comments should be queried. See also <seealso cref="TraktObjectType" />.</param> /// <param name="includeReplies">Determines, whether replies should be retrieved alongside with comments.</param> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the commented objects should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktUserComment}"/> instance containing the queried trending comments and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktUserComment" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktUserComment> > GetTrendingCommentsAsync(TraktCommentType commentType = null, TraktObjectType objectType = null, bool?includeReplies = null, TraktExtendedInfo extendedInfo = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new CommentsTrendingRequest { CommentType = commentType, ObjectType = objectType, IncludeReplies = includeReplies, ExtendedInfo = extendedInfo, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Gets updated shows since the given <paramref name="startDate" />. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/shows/anticipated/get-recently-updated-shows">"Trakt API Doc - Shows: Updates"</a> for more information. /// </para> /// </summary> /// <param name="startDate">The start date, after which updated shows should be queried. Will be converted to the Trakt UTC-datetime and -format.</param> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the shows should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktRecentlyUpdatedShow}"/> instance containing the queried updated shows and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktRecentlyUpdatedShow" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktRecentlyUpdatedShow> > GetRecentlyUpdatedShowsAsync(DateTime?startDate = null, TraktExtendedInfo extendedInfo = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new ShowsRecentlyUpdatedRequest { StartDate = startDate, ExtendedInfo = extendedInfo, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Gets the most anticipated shows. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/shows/anticipated/get-the-most-anticipated-shows">"Trakt API Doc - Shows: Anticipated"</a> for more information. /// </para> /// </summary> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the shows should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="filter">Optional filters for genres, languages, year, runtimes, ratings, etc. See also <seealso cref="TraktShowFilter" />.</param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktMostAnticipatedShow}"/> instance containing the queried most anticipated shows and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktMostAnticipatedShow" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktMostAnticipatedShow> > GetMostAnticipatedShowsAsync(TraktExtendedInfo extendedInfo = null, TraktShowFilter filter = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new ShowsMostAnticipatedRequest { ExtendedInfo = extendedInfo, Filter = filter, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Searches for movies, shows, episodes, people and / or lists with the given search query. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/search/text-query/get-text-query-results">"Trakt API Doc - Search: Text Query"</a> for more information. /// </para> /// </summary> /// <param name="searchResultTypes"> /// The object type(s), for which will be searched. See also <seealso cref="TraktSearchResultType" />. /// Multiple <see cref="TraktSearchResultType" /> values can be combined with a binary operator, like this: TraktSearchResultType.Movie | TraktSearchResultType.Show. /// </param> /// <param name="searchQuery">The query, for which will be searched.</param> /// <param name="searchFields">Determines the text fields, which will be searched. See also <seealso cref="TraktSearchField" />.</param> /// <param name="filter">Optional filter for genres, year, runtimes, ratings, etc. See also <seealso cref="TraktSearchFilter" />.</param> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the movies, shows, episodes, people and / or lists should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktSearchResult}"/> instance containing the found movies, shows, episodes, people and / or lists and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktSearchResult" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> /// <exception cref="ArgumentException"> /// Thrown, if the given searchQuery is null, empty or contains spaces. /// Thrown, if the given searchResultType is unspecified. /// </exception> /// <exception cref="ArgumentNullException">Thrown, if the given searchResultType is null</exception> public Task <TraktPagedResponse <ITraktSearchResult> > GetTextQueryResultsAsync(TraktSearchResultType searchResultTypes, string searchQuery, TraktSearchField searchFields = null, TraktSearchFilter filter = null, TraktExtendedInfo extendedInfo = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new SearchTextQueryRequest { ResultTypes = searchResultTypes, Query = searchQuery, SearchFields = searchFields, Filter = filter, ExtendedInfo = extendedInfo, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Looks up items by their Trakt-, IMDB-, TMDB-, TVDB- or TVRage-Id. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/search/text-query/get-id-lookup-results">"Trakt API Doc - Search: Id Lookup"</a> for more information. /// </para> /// </summary> /// <param name="searchIdType">The id type, which should be looked up. See also <seealso cref="TraktSearchIdType" />.</param> /// <param name="lookupId">The Trakt-, IMDB-, TMDB-, TVDB- or TVRage-Id, which will be looked up.</param> /// <param name="searchResultTypes">The object type(s), which will be looked up. See also <seealso cref="TraktSearchResultType" />.</param> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the lookup object(s) should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktSearchResult}"/> instance containing the found movies, shows, episodes, people and / or lists and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktSearchResult" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> /// <exception cref="ArgumentException"> /// Thrown, if the given lookupId is null, empty or contains spaces. /// Thrown, if the given searchIdType is unspecified. /// </exception> /// <exception cref="ArgumentNullException">Thrown, if the given searchIdType is null.</exception> public Task <TraktPagedResponse <ITraktSearchResult> > GetIdLookupResultsAsync(TraktSearchIdType searchIdType, string lookupId, TraktSearchResultType searchResultTypes = null, TraktExtendedInfo extendedInfo = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new SearchIdLookupRequest { IdType = searchIdType, LookupId = lookupId, ResultTypes = searchResultTypes, ExtendedInfo = extendedInfo, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Gets the most collected movies. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/movies/watched/get-the-most-collected-movies">"Trakt API Doc - Movies: Collected"</a> for more information. /// </para> /// </summary> /// <param name="period">The time period, for which the most collected movies should be queried. See also <seealso cref="TraktTimePeriod" />.</param> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the movies should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="filter">Optional filters for genres, languages, year, runtimes, ratings, etc. See also <seealso cref="TraktMovieFilter" />.</param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktMostPWCMovie}"/> instance containing the queried most collected movies and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktMostPWCMovie" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktMostPWCMovie> > GetMostCollectedMoviesAsync(TraktTimePeriod period = null, TraktExtendedInfo extendedInfo = null, TraktMovieFilter filter = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new MoviesMostCollectedRequest { Period = period, ExtendedInfo = extendedInfo, Filter = filter, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Gets trending movies. /// <para>OAuth authorization not required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/movies/trending/get-trending-movies">"Trakt API Doc - Movies: Trending"</a> for more information. /// </para> /// </summary> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the movies should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="filter">Optional filters for genres, languages, year, runtimes, ratings, etc. See also <seealso cref="TraktMovieFilter" />.</param> /// <param name="pagedParameters"></param> /// <param name="cancellationToken"></param> /// <returns> /// An <see cref="TraktPagedResponse{ITraktTrendingMovie}"/> instance containing the queried trending movies and which also /// contains the queried page number, the page's item count, maximum page count and maximum item count. /// <para> /// See also <seealso cref="TraktPagedResponse{ListItem}" /> and <seealso cref="ITraktTrendingMovie" />. /// </para> /// </returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktTrendingMovie> > GetTrendingMoviesAsync(TraktExtendedInfo extendedInfo = null, TraktMovieFilter filter = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new MoviesTrendingRequest { ExtendedInfo = extendedInfo, Filter = filter, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Gets an user's personal recommendations for movies and / or shows. /// <para>OAuth authorization required.</para> /// <para> /// See <a href="https://trakt.docs.apiary.io/#reference/sync/get-personal-recommendations/get-personal-recommendations">"Trakt API Doc - Sync: Personal Recommendations"</a> for more information. /// </para> /// </summary> /// <param name="recommendationObjectType">Determines, which type of recommendation items should be queried. See also <seealso cref="TraktRecommendationObjectType" />.</param> /// <param name="sortOrder"> /// The recommendations sort order. See also <seealso cref="TraktWatchlistSortOrder" />. /// Will be ignored, if the given array contains a number higher than 10 or below 1 or if it contains more than ten numbers. /// Will be ignored, if the given <paramref name="recommendationObjectType" /> is null or unspecified. /// </param> /// <param name="extendedInfo"> /// The extended info, which determines how much data about the recommendation items should be queried. /// See also <seealso cref="TraktExtendedInfo" />. /// </param> /// <param name="pagedParameters">Specifies pagination parameters. <see cref="TraktPagedParameters" />.</param> /// <param name="cancellationToken"> /// Propagates notification that the request should be canceled.<para/> /// If provided, the exception <see cref="OperationCanceledException" /> should be catched. /// </param> /// <returns>A list of <see cref="ITraktRecommendation" /> instances.</returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktRecommendation> > GetPersonalRecommendationsAsync(TraktRecommendationObjectType recommendationObjectType = null, TraktWatchlistSortOrder sortOrder = null, TraktExtendedInfo extendedInfo = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new SyncPersonalRecommendationsRequest { Type = recommendationObjectType, Sort = sortOrder, ExtendedInfo = extendedInfo, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }
/// <summary> /// Gets the user's saved playback progress of scrobbles that are paused. /// <para>OAuth authorization required.</para> /// <para> /// See <a href="http://docs.trakt.apiary.io/#reference/sync/last-activities/get-playback-progress">"Trakt API Doc - Sync: Playback"</a> for more information. /// </para> /// </summary> /// <param name="objectType">Determines, which type of items should be queried. By default, all types will be returned. See also <seealso cref="TraktSyncType" />.</param> /// <param name="startAt">Determines an optional start date and time for a range of the returned playback progress.</param> /// <param name="endAt">Determines an optional end date and time for a range of the returned playback progress.</param> /// <param name="pagedParameters">Specifies pagination parameters. <see cref="TraktPagedParameters" />.</param> /// <param name="cancellationToken"> /// Propagates notification that the request should be canceled.<para/> /// If provided, the exception <see cref="OperationCanceledException" /> should be catched. /// </param> /// <returns>A list of <see cref="ITraktSyncPlaybackProgressItem" /> instances.</returns> /// <exception cref="TraktException">Thrown, if the request fails.</exception> public Task <TraktPagedResponse <ITraktSyncPlaybackProgressItem> > GetPlaybackProgressAsync(TraktSyncType objectType = null, DateTime?startAt = null, DateTime?endAt = null, TraktPagedParameters pagedParameters = null, CancellationToken cancellationToken = default) { var requestHandler = new RequestHandler(Client); return(requestHandler.ExecutePagedRequestAsync(new SyncPlaybackProgressRequest { Type = objectType, StartAt = startAt, EndAt = endAt, Page = pagedParameters?.Page, Limit = pagedParameters?.Limit }, cancellationToken)); }