diff --git a/src/main/java/com/uwetrottmann/trakt5/services/Sync.java b/src/main/java/com/uwetrottmann/trakt5/services/Sync.java index b9c57f6e..ae80b46d 100644 --- a/src/main/java/com/uwetrottmann/trakt5/services/Sync.java +++ b/src/main/java/com/uwetrottmann/trakt5/services/Sync.java @@ -18,6 +18,7 @@ import com.uwetrottmann.trakt5.entities.BaseMovie; import com.uwetrottmann.trakt5.entities.BaseShow; +import com.uwetrottmann.trakt5.entities.HistoryEntry; import com.uwetrottmann.trakt5.entities.LastActivities; import com.uwetrottmann.trakt5.entities.PlaybackResponse; import com.uwetrottmann.trakt5.entities.RatedEpisode; @@ -30,6 +31,7 @@ import com.uwetrottmann.trakt5.entities.WatchlistedSeason; import com.uwetrottmann.trakt5.enums.Extended; import com.uwetrottmann.trakt5.enums.RatingsFilter; +import org.threeten.bp.OffsetDateTime; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; @@ -121,7 +123,29 @@ Call> getPlayback( /** * OAuth Required * - *

Returns all playbacks; + *

Returns playbacks for a given period; + */ + @GET("sync/playback") + Call> getPlaybackPeriod( + @Query("start_at") OffsetDateTime startAt, + @Query("end_at") OffsetDateTime endAt + ); + + /** + * OAuth Required + * + *

+ * Returns playbacks since a date; + */ + @GET("sync/playback") + Call> getPlaybackSince( + @Query("start_at") OffsetDateTime startAt + ); + + /** + * OAuth Required + * + *

Returns all episodes playbacks; */ @GET("sync/playback/episodes") Call> getPlaybackEpisodes( @@ -131,11 +155,58 @@ Call> getPlaybackEpisodes( /** * OAuth Required * - *

Returns all playbacks; + *

+ * Returns episodes playbacks for a given period; + */ + @GET("sync/playback/episodes") + Call> getPlaybackEpisodesPeriod( + @Query("start_at") OffsetDateTime startAt, + @Query("end_at") OffsetDateTime endAt + ); + + /** + * OAuth Required + * + *

+ * Returns episodes playbacks for a since a date; + */ + @GET("sync/playback/episodes") + Call> getPlaybackEpisodesSince( + @Query("limit") Integer limit, + @Query("start_at") OffsetDateTime startAt + ); + + /** + * OAuth Required + * + *

+ * Returns all movies playbacks; */ @GET("sync/playback/movies") Call> getPlaybackMovies( - @Query("limit") Integer limit + @Query("limit") Integer limit); + + /** + * OAuth Required + * + *

+ * Returns movies playbacks for a given period; + */ + @GET("sync/playback/movies") + Call> getPlaybackMoviesPeriod( + @Query("start_at") OffsetDateTime startAt, + @Query("end_at") OffsetDateTime endAt + ); + + /** + * OAuth Required + * + *

+ * Returns movies playbacks since a date; + */ + @GET("sync/playback/movies") + Call> getPlaybackMoviesSince( + @Query("start_at") OffsetDateTime startAt ); /** @@ -160,6 +231,108 @@ Call> watchedShows( @Query(value = "extended", encoded = true) Extended extended ); + /** + * OAuth Required + * + *

+ * Returns watch history; + */ + @GET("sync/history") + Call> getWatchedHistory( + @Query("limit") Integer limit + ); + + /** + * OAuth Required + * + *

+ * Returns watch history since a date; + */ + @GET("sync/history") + Call> getWatchedHistorySince( + @Query("start_at") OffsetDateTime startAt + ); + + /** + * OAuth Required + * + *

+ * Returns watch history for a given period; + */ + @GET("sync/history") + Call> getWatchedHistoryPeriod( + @Query("start_at") OffsetDateTime startAt, + @Query("end_at") OffsetDateTime endAt + ); + + /** + * OAuth Required + * + *

+ * Returns movies watch history; + */ + @GET("sync/history/movies") + Call> getWatchedHistoryMovies( + @Query("limit") Integer limit + ); + + /** + * OAuth Required + * + *

+ * Returns movies watch history since a date; + */ + @GET("sync/history/movies") + Call> getWatchedHistoryMoviesSince( + @Query("start_at") OffsetDateTime startAt + ); + + /** + * OAuth Required + * + *

+ * Returns movies watch history for a given period; + */ + @GET("sync/history/movies") + Call> getWatchedHistoryMoviesPeriod( + @Query("start_at") OffsetDateTime startAt, + @Query("end_at") OffsetDateTime endAt + ); + + /** + * OAuth Required + * + *

+ * Returns episodes watch history; + */ + @GET("sync/history/episodes") + Call> getWatchedHistoryEpisodes( + @Query("limit") Integer limit + ); + + /** + * OAuth Required + * + *

+ * Returns episodes watch history since a date; + */ + @GET("sync/history/episodes") + Call> getWatchedHistoryEpisodesSince( + @Query("start_at") OffsetDateTime startAt + ); + + /** + * OAuth Required + * + *

+ * Returns episodes watch history for a given period; + */ + @GET("sync/history/episodes") + Call> getWatchedHistoryEpisodesPeriod( + @Query("start_at") OffsetDateTime startAt, + @Query("end_at") OffsetDateTime endAt + ); + /** * OAuth Required * diff --git a/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java b/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java index d1c657eb..83c7f109 100644 --- a/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java +++ b/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java @@ -21,6 +21,7 @@ import com.uwetrottmann.trakt5.entities.BaseMovie; import com.uwetrottmann.trakt5.entities.BaseShow; import com.uwetrottmann.trakt5.entities.EpisodeIds; +import com.uwetrottmann.trakt5.entities.HistoryEntry; import com.uwetrottmann.trakt5.entities.LastActivities; import com.uwetrottmann.trakt5.entities.LastActivity; import com.uwetrottmann.trakt5.entities.LastActivityAccount; @@ -624,4 +625,142 @@ private ShowIds buildShowIds() { return ShowIds.slug("the-walking-dead"); } + // Tests for new playback period/since methods + + @Test + public void test_getPlaybackPeriod() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + OffsetDateTime endAt = OffsetDateTime.now(); + + List playbacks = executeCall(getTrakt().sync().getPlaybackPeriod(startAt, endAt)); + assertThat(playbacks).isNotNull(); + assertPlaybackResponses(playbacks); + } + + @Test + public void test_getPlaybackSince() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + + List playbacks = executeCall(getTrakt().sync().getPlaybackSince(startAt)); + assertThat(playbacks).isNotNull(); + assertPlaybackResponses(playbacks); + } + + @Test + public void test_getPlaybackEpisodesPeriod() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + OffsetDateTime endAt = OffsetDateTime.now(); + + List playbacks = executeCall(getTrakt().sync().getPlaybackEpisodesPeriod(startAt, endAt)); + assertThat(playbacks).isNotNull(); + assertPlaybackResponses(playbacks); + } + + @Test + public void test_getPlaybackEpisodesSince() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + + List playbacks = executeCall(getTrakt().sync().getPlaybackEpisodesSince(10, startAt)); + assertThat(playbacks).isNotNull(); + assertPlaybackResponses(playbacks); + } + + @Test + public void test_getPlaybackMoviesPeriod() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + OffsetDateTime endAt = OffsetDateTime.now(); + + List playbacks = executeCall(getTrakt().sync().getPlaybackMoviesPeriod(startAt, endAt)); + assertThat(playbacks).isNotNull(); + assertPlaybackResponses(playbacks); + } + + @Test + public void test_getPlaybackMoviesSince() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + + List playbacks = executeCall(getTrakt().sync().getPlaybackMoviesSince(startAt)); + assertThat(playbacks).isNotNull(); + assertPlaybackResponses(playbacks); + } + + // Tests for new watched history period/since methods + + @Test + public void test_getWatchedHistorySince() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + + List history = executeCall(getTrakt().sync().getWatchedHistorySince(startAt)); + assertThat(history).isNotNull(); + assertHistoryEntries(history); + } + + @Test + public void test_getWatchedHistoryPeriod() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + OffsetDateTime endAt = OffsetDateTime.now(); + + List history = executeCall(getTrakt().sync().getWatchedHistoryPeriod(startAt, endAt)); + assertThat(history).isNotNull(); + assertHistoryEntries(history); + } + + @Test + public void test_getWatchedHistoryMoviesSince() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + + List history = executeCall(getTrakt().sync().getWatchedHistoryMoviesSince(startAt)); + assertThat(history).isNotNull(); + assertHistoryEntries(history); + } + + @Test + public void test_getWatchedHistoryMoviesPeriod() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + OffsetDateTime endAt = OffsetDateTime.now(); + + List history = executeCall(getTrakt().sync().getWatchedHistoryMoviesPeriod(startAt, endAt)); + assertThat(history).isNotNull(); + assertHistoryEntries(history); + } + + @Test + public void test_getWatchedHistoryEpisodesSince() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + + List history = executeCall(getTrakt().sync().getWatchedHistoryEpisodesSince(startAt)); + assertThat(history).isNotNull(); + assertHistoryEntries(history); + } + + @Test + public void test_getWatchedHistoryEpisodesPeriod() throws IOException { + OffsetDateTime startAt = OffsetDateTime.now().minusDays(30); + OffsetDateTime endAt = OffsetDateTime.now(); + + List history = executeCall(getTrakt().sync().getWatchedHistoryEpisodesPeriod(startAt, endAt)); + assertThat(history).isNotNull(); + assertHistoryEntries(history); + } + + // Helper methods for assertions + + private void assertPlaybackResponses(List playbacks) { + for (PlaybackResponse playback : playbacks) { + assertThat(playback.id).isNotNull(); + assertThat(playback.progress).isNotNull(); + assertThat(playback.paused_at).isNotNull(); + assertThat(playback.type).isNotNull(); + } + } + + private void assertHistoryEntries(List history) { + for (HistoryEntry entry : history) { + assertThat(entry.id).isNotNull(); + assertThat(entry.watched_at).isNotNull(); + assertThat(entry.action).isNotNull(); + assertThat(entry.type).isNotNull(); + } + } + }