Skip to content

Commit a13dee2

Browse files
committed
recursively instantiate api/pagingobject (fixes #237)
Signed-off-by: Adam Ratzman <[email protected]>
1 parent 692b46f commit a13dee2

27 files changed

+245
-192
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
id("io.codearte.nexus-staging") version "0.22.0"
99
id("com.android.library")
1010
kotlin("multiplatform") version "1.4.21"
11-
kotlin("plugin.serialization") version "1.4.21"
11+
kotlin("plugin.serialization") version "1.4.20"
1212
id("com.diffplug.gradle.spotless") version "4.4.0"
1313
id("com.moowork.node") version "1.3.1"
1414
id("org.jetbrains.dokka") version "1.4.20"
@@ -213,7 +213,7 @@ kotlin {
213213
sourceSets {
214214
val coroutineVersion = "1.4.2-native-mt"
215215
val serializationVersion = "1.0.1"
216-
val ktorVersion = "1.4.1"
216+
val ktorVersion = "1.5.0"
217217
val kotlinxDatetimeVersion = "0.1.1"
218218

219219
val commonMain by getting {

src/commonMain/kotlin/com.adamratzman.spotify/SpotifyApi.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public sealed class SpotifyApi<T : SpotifyApi<T, B>, B : ISpotifyApiBuilder<T, B
8484
*/
8585
internal val spotifyApiBase = "https://api.spotify.com/v1"
8686

87+
internal val defaultEndpoint get() = tracks
88+
8789
init {
8890
spotifyApiOptions.requiredScopes?.let { requiredScopes ->
8991
val tokenScopes = token.scopes ?: listOf()

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientFollowingApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public class ClientFollowingApi(api: GenericSpotifyApi) : FollowingApi(api) {
137137
"after",
138138
after
139139
).toString()
140-
).toCursorBasedPagingObject(Artist::class, Artist.serializer(), "artists", this, json)
140+
).toCursorBasedPagingObject(Artist::class, Artist.serializer(), "artists", api, json)
141141

142142
/**
143143
* Add the current user as a follower of another user

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientLibraryApi.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.SpotifyScope
77
import com.adamratzman.spotify.http.SpotifyEndpoint
88
import com.adamratzman.spotify.http.encodeUrl
9+
import com.adamratzman.spotify.models.AlbumUri
910
import com.adamratzman.spotify.models.PagingObject
11+
import com.adamratzman.spotify.models.PlayableUri
1012
import com.adamratzman.spotify.models.SavedAlbum
1113
import com.adamratzman.spotify.models.SavedTrack
1214
import com.adamratzman.spotify.models.serialization.toList
@@ -42,7 +44,7 @@ public class ClientLibraryApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
4244
): PagingObject<SavedTrack> = get(
4345
endpointBuilder("/me/tracks").with("limit", limit).with("offset", offset).with("market", market?.name)
4446
.toString()
45-
).toNonNullablePagingObject(SavedTrack.serializer(), endpoint = this, json = json)
47+
).toNonNullablePagingObject(SavedTrack.serializer(), api = api, json = json)
4648

4749
/**
4850
* Get a list of the albums saved in the current Spotify user’s ‘Your Music’ library.
@@ -65,7 +67,7 @@ public class ClientLibraryApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
6567
): PagingObject<SavedAlbum> = get(
6668
endpointBuilder("/me/albums").with("limit", limit).with("offset", offset).with("market", market?.name)
6769
.toString()
68-
).toNonNullablePagingObject(SavedAlbum.serializer(), endpoint = this, json = json)
70+
).toNonNullablePagingObject(SavedAlbum.serializer(), api = api, json = json)
6971

7072
/**
7173
* Check if the [LibraryType] with id [id] is already saved in the current Spotify user’s ‘Your Music’ library.

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPersonalizationApi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class ClientPersonalizationApi(api: GenericSpotifyApi) : SpotifyEndpoint(
6969
): PagingObject<Artist> = get(
7070
endpointBuilder("/me/top/artists").with("limit", limit).with("offset", offset)
7171
.with("time_range", timeRange).toString()
72-
).toNonNullablePagingObject(Artist.serializer(), endpoint = this, json = json)
72+
).toNonNullablePagingObject(Artist.serializer(), api = api, json = json)
7373

7474
/**
7575
* Get the current user’s top tracks based on calculated affinity.
@@ -99,5 +99,5 @@ public class ClientPersonalizationApi(api: GenericSpotifyApi) : SpotifyEndpoint(
9999
): PagingObject<Track> = get(
100100
endpointBuilder("/me/top/tracks").with("limit", limit).with("offset", offset)
101101
.with("time_range", timeRange).toString()
102-
).toNonNullablePagingObject(Track.serializer(), endpoint = this, json = json)
102+
).toNonNullablePagingObject(Track.serializer(), api = api, json = json)
103103
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlayerApi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import com.adamratzman.spotify.models.CursorBasedPagingObject
1313
import com.adamratzman.spotify.models.Device
1414
import com.adamratzman.spotify.models.PlayHistory
1515
import com.adamratzman.spotify.models.PlayableUri
16+
import com.adamratzman.spotify.models.serialization.mapToJsonString
1617
import com.adamratzman.spotify.models.serialization.toCursorBasedPagingObject
1718
import com.adamratzman.spotify.models.serialization.toInnerObject
18-
import com.adamratzman.spotify.models.serialization.mapToJsonString
1919
import com.adamratzman.spotify.models.serialization.toObject
2020
import com.adamratzman.spotify.utils.catch
2121
import com.adamratzman.spotify.utils.jsonMap
@@ -79,7 +79,7 @@ public class ClientPlayerApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
7979
): CursorBasedPagingObject<PlayHistory> = get(
8080
endpointBuilder("/me/player/recently-played")
8181
.with("limit", limit).with("before", before).with("after", after).toString()
82-
).toCursorBasedPagingObject(PlayHistory::class, PlayHistory.serializer(), endpoint = this, json = json)
82+
).toCursorBasedPagingObject(PlayHistory::class, PlayHistory.serializer(), api = api, json = json)
8383

8484
/**
8585
* Get the object currently being played on the user’s Spotify account.

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlaylistApi.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ import com.adamratzman.spotify.SpotifyClientApi
66
import com.adamratzman.spotify.SpotifyException.BadRequestException
77
import com.adamratzman.spotify.SpotifyScope
88
import com.adamratzman.spotify.endpoints.public.PlaylistApi
9+
import com.adamratzman.spotify.http.encodeUrl
910
import com.adamratzman.spotify.models.ErrorObject
1011
import com.adamratzman.spotify.models.PagingObject
12+
import com.adamratzman.spotify.models.PlayableUri
1113
import com.adamratzman.spotify.models.Playlist
14+
import com.adamratzman.spotify.models.PlaylistUri
1215
import com.adamratzman.spotify.models.SimplePlaylist
16+
import com.adamratzman.spotify.models.UserUri
1317
import com.adamratzman.spotify.models.serialization.mapToJsonString
14-
import com.adamratzman.spotify.models.serialization.toObject
1518
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
19+
import com.adamratzman.spotify.models.serialization.toObject
1620
import com.adamratzman.spotify.utils.BufferedImage
1721
import com.adamratzman.spotify.utils.File
1822
import com.adamratzman.spotify.utils.convertFileToBufferedImage
@@ -184,7 +188,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
184188
require(!(limit != null && limit !in 1..50)) { "Limit must be between 1 and 50. Provided $limit" }
185189
require(!(offset != null && offset !in 0..100000)) { "Offset must be between 0 and 100,000. Provided $limit" }
186190
return get(endpointBuilder("/me/playlists").with("limit", limit).with("offset", offset).toString())
187-
.toNonNullablePagingObject(SimplePlaylist.serializer(), endpoint = this, json = json)
191+
.toNonNullablePagingObject(SimplePlaylist.serializer(), api = api, json = json)
188192
}
189193

190194
/**

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientSearchApi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class ClientSearchApi(api: GenericSpotifyApi) : SearchApi(api) {
3939
offset: Int? = null,
4040
market: Market? = null
4141
): PagingObject<SimpleShow> = get(build(query, market, limit, offset, SearchType.SHOW))
42-
.toNonNullablePagingObject(SimpleShow.serializer(), "shows", this, json)
42+
.toNonNullablePagingObject(SimpleShow.serializer(), "shows", api, json)
4343

4444
/**
4545
* Get Spotify Catalog information about episodes that match the keyword string. See [SearchApi.search] for more information
@@ -63,5 +63,5 @@ public class ClientSearchApi(api: GenericSpotifyApi) : SearchApi(api) {
6363
offset: Int? = null,
6464
market: Market? = null
6565
): PagingObject<SimpleEpisode> = get(build(query, market, limit, offset, SearchType.EPISODE))
66-
.toNonNullablePagingObject(SimpleEpisode.serializer(), "episodes", this, json)
66+
.toNonNullablePagingObject(SimpleEpisode.serializer(), "episodes", api, json)
6767
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/public/AlbumApi.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ package com.adamratzman.spotify.endpoints.public
44
import com.adamratzman.spotify.GenericSpotifyApi
55
import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.http.SpotifyEndpoint
7+
import com.adamratzman.spotify.http.encodeUrl
78
import com.adamratzman.spotify.models.Album
9+
import com.adamratzman.spotify.models.AlbumUri
810
import com.adamratzman.spotify.models.AlbumsResponse
911
import com.adamratzman.spotify.models.PagingObject
1012
import com.adamratzman.spotify.models.SimpleTrack
11-
import com.adamratzman.spotify.models.serialization.toObject
1213
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
14+
import com.adamratzman.spotify.models.serialization.toObject
1315
import com.adamratzman.spotify.utils.Market
1416
import com.adamratzman.spotify.utils.catch
1517

@@ -83,5 +85,5 @@ public class AlbumApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
8385
offset
8486
).with("market", market?.name)
8587
.toString()
86-
).toNonNullablePagingObject(SimpleTrack.serializer(), endpoint = this, json = json)
88+
).toNonNullablePagingObject(SimpleTrack.serializer(), api = api, json = json)
8789
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/public/ArtistApi.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@ package com.adamratzman.spotify.endpoints.public
44
import com.adamratzman.spotify.GenericSpotifyApi
55
import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.http.SpotifyEndpoint
7+
import com.adamratzman.spotify.http.encodeUrl
78
import com.adamratzman.spotify.models.Artist
89
import com.adamratzman.spotify.models.ArtistList
10+
import com.adamratzman.spotify.models.ArtistUri
911
import com.adamratzman.spotify.models.CursorBasedPagingObject
1012
import com.adamratzman.spotify.models.PagingObject
1113
import com.adamratzman.spotify.models.SimpleAlbum
1214
import com.adamratzman.spotify.models.Track
1315
import com.adamratzman.spotify.models.serialization.toInnerArray
14-
import com.adamratzman.spotify.models.serialization.toObject
1516
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
17+
import com.adamratzman.spotify.models.serialization.toObject
1618
import com.adamratzman.spotify.utils.Market
1719
import com.adamratzman.spotify.utils.catch
1820
import kotlinx.serialization.builtins.ListSerializer
@@ -87,7 +89,7 @@ public class ArtistApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
8789
offset
8890
).with("market", market?.name)
8991
.with("include_groups", include.joinToString(",") { it.keyword }).toString()
90-
).toNonNullablePagingObject(SimpleAlbum.serializer(), null, this, json)
92+
).toNonNullablePagingObject(SimpleAlbum.serializer(), null, api, json)
9193

9294
/**
9395
* Describes object types to include when finding albums

0 commit comments

Comments
 (0)