33
44package com.battlelancer.seriesguide.traktapi
55
6+ import com.battlelancer.seriesguide.traktapi.TraktTools4.awaitTraktCall
67import com.battlelancer.seriesguide.util.Errors
78import com.uwetrottmann.trakt5.TraktV2
89import com.uwetrottmann.trakt5.entities.AddNoteRequest
910import com.uwetrottmann.trakt5.entities.BaseShow
1011import com.uwetrottmann.trakt5.entities.Note
1112import com.uwetrottmann.trakt5.entities.Show
1213import com.uwetrottmann.trakt5.entities.ShowIds
14+ import com.uwetrottmann.trakt5.enums.Extended
1315import com.uwetrottmann.trakt5.services.Notes
1416import com.uwetrottmann.trakt5.services.Sync
1517import retrofit2.Call
1618import retrofit2.awaitResponse
17- import kotlin.collections.set
1819
1920/* *
2021 * Uses response classes inheriting from a Kotlin sealed interface.
@@ -48,31 +49,39 @@ object TraktTools4 {
4849 class Other <T > : TraktResponse <T >, TraktNonNullResponse <T >
4950 }
5051
51- suspend fun getWatchedShowsByTmdbId (
52- traktSync : Sync
53- ): TraktNonNullResponse <Map <Int , BaseShow >> {
54- val response = awaitTraktCallNonNull(
55- traktSync.watchedShows(null ),
52+ suspend fun getWatchedShows (
53+ traktSync : Sync ,
54+ noSeasons : Boolean
55+ ): TraktNonNullResponse <List <BaseShow >> {
56+ return awaitTraktCallNonNull(
57+ traktSync.watchedShows(if (noSeasons) Extended .NOSEASONS else null ),
5658 " get watched shows" ,
5759 reportIsNotVip = true // Should work even if not VIP
5860 )
61+ }
5962
63+ suspend fun getWatchedShowsByTmdbId (
64+ traktSync : Sync
65+ ): TraktNonNullResponse <Map <Int , BaseShow >> {
66+ val response = getWatchedShows(traktSync, noSeasons = false )
6067 return mapResponseData(response) { mapByTmdbId(it) }
6168 }
6269
63- /* *
64- * Get collected shows mapped by their TMDB ID.
65- */
66- suspend fun getCollectedShowsByTmdbId (
70+ suspend fun getCollectedShows (
6771 traktSync : Sync
68- ): TraktNonNullResponse <Map < Int , BaseShow >> {
69- val response = fetchAllPages(
72+ ): TraktNonNullResponse <List < BaseShow >> {
73+ return fetchAllPages(
7074 action = " get collected shows" ,
7175 reportIsNotVip = true // Should work even if not VIP
7276 ) { page ->
7377 traktSync.collectionShows(page, 1000 , null )
7478 }
79+ }
7580
81+ suspend fun getCollectedShowsByTmdbId (
82+ traktSync : Sync
83+ ): TraktNonNullResponse <Map <Int , BaseShow >> {
84+ val response = getCollectedShows(traktSync)
7685 return mapResponseData(response) { mapByTmdbId(it) }
7786 }
7887
@@ -106,6 +115,7 @@ object TraktTools4 {
106115 totalPageCount = response.pageCount
107116 currentPage++
108117 }
118+
109119 is TraktErrorResponse .IsNotVip -> return TraktErrorResponse .IsNotVip ()
110120 is TraktErrorResponse .IsUnauthorized -> return TraktErrorResponse .IsUnauthorized ()
111121 is TraktErrorResponse .IsAccountLimitExceeded -> return TraktErrorResponse .IsAccountLimitExceeded ()
@@ -128,6 +138,17 @@ object TraktTools4 {
128138 return traktShowsMap
129139 }
130140
141+ suspend fun getShowsOnWatchlist (
142+ traktSync : Sync
143+ ): TraktNonNullResponse <List <BaseShow >> {
144+ return awaitTraktCallNonNull(
145+ // Use Extended.FULL to get show metadata
146+ traktSync.watchlistShows(Extended .FULL ),
147+ " get shows on watchlist" ,
148+ reportIsNotVip = true // Should work even if not VIP
149+ )
150+ }
151+
131152 /* *
132153 * Adds or updates the note for the given show.
133154 *
@@ -256,6 +277,7 @@ object TraktTools4 {
256277 transform(response.data),
257278 response.pageCount
258279 )
280+
259281 is TraktErrorResponse .IsNotVip -> TraktErrorResponse .IsNotVip ()
260282 is TraktErrorResponse .IsUnauthorized -> TraktErrorResponse .IsUnauthorized ()
261283 is TraktErrorResponse .IsAccountLimitExceeded -> TraktErrorResponse .IsAccountLimitExceeded ()
0 commit comments