Skip to content

Commit 43c1e1b

Browse files
committed
add convenience getters for artist, episode, track, show models
Signed-off-by: Adam Ratzman <[email protected]>
1 parent ad36734 commit 43c1e1b

File tree

13 files changed

+60
-14
lines changed

13 files changed

+60
-14
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ repositories {
3939
jcenter()
4040
}
4141
42-
compile group: 'com.adamratzman', name: 'spotify-api-kotlin-core', version: '3.2.13'
42+
compile group: 'com.adamratzman', name: 'spotify-api-kotlin-core', version: '3.2.14'
4343
```
4444

4545
Note that images and profiles are not supported on the Kotlin/JS target.

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import com.adamratzman.spotify.models.serialization.toObject
2323
import com.adamratzman.spotify.utils.catch
2424
import com.adamratzman.spotify.utils.jsonMap
2525
import kotlinx.serialization.builtins.ListSerializer
26-
import kotlinx.serialization.builtins.list
2726
import kotlinx.serialization.json.JsonArray
2827
import kotlinx.serialization.json.JsonPrimitive
2928
import kotlinx.serialization.json.buildJsonObject

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import com.adamratzman.spotify.models.serialization.toPagingObject
2121
import com.adamratzman.spotify.utils.Market
2222
import com.adamratzman.spotify.utils.catch
2323
import kotlinx.serialization.builtins.ListSerializer
24-
import kotlinx.serialization.builtins.list
2524

2625
@Deprecated("Endpoint name has been updated for kotlin convention consistency", ReplaceWith("ArtistApi"))
2726
typealias ArtistsAPI = ArtistApi

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ import com.adamratzman.spotify.models.serialization.toPagingObject
2525
import com.adamratzman.spotify.utils.Locale
2626
import com.adamratzman.spotify.utils.Market
2727
import com.adamratzman.spotify.utils.formatDate
28-
import kotlinx.serialization.builtins.ListSerializer
2928
import kotlin.reflect.KClass
30-
import kotlinx.serialization.builtins.list
29+
import kotlinx.serialization.builtins.ListSerializer
3130
import kotlinx.serialization.builtins.serializer
3231

3332
@Deprecated("Endpoint name has been updated for kotlin convention consistency", ReplaceWith("BrowseApi"))

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import com.adamratzman.spotify.models.PlaylistUri
1111
import com.adamratzman.spotify.models.UserUri
1212
import com.adamratzman.spotify.models.serialization.toList
1313
import kotlinx.serialization.builtins.ListSerializer
14-
import kotlinx.serialization.builtins.list
1514
import kotlinx.serialization.builtins.serializer
1615

1716
@Deprecated("Endpoint name has been updated for kotlin convention consistency", ReplaceWith("FollowingApi"))

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import com.adamratzman.spotify.models.serialization.toPagingObject
2222
import com.adamratzman.spotify.utils.Market
2323
import com.adamratzman.spotify.utils.catch
2424
import kotlinx.serialization.builtins.ListSerializer
25-
import kotlinx.serialization.builtins.list
2625

2726
@Deprecated("Endpoint name has been updated for kotlin convention consistency", ReplaceWith("PlaylistApi"))
2827
typealias PlaylistAPI = PlaylistApi

src/commonMain/kotlin/com.adamratzman.spotify/models/Artists.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,15 @@ data class SimpleArtist(
2323
val type: String
2424
) : CoreObject() {
2525

26+
/**
27+
* This [SimpleArtist] into a full [Artist] object
28+
*/
29+
val fullArtist by lazy { api.artists.getArtist(id) }
30+
2631
/**
2732
* Converts this [SimpleArtist] into a full [Artist] object
2833
*/
34+
@Deprecated("Replaced with a lazy fullArtist property", ReplaceWith("fullArtist"))
2935
fun toFullArtist() = api.artists.getArtist(id)
3036
}
3137

src/commonMain/kotlin/com.adamratzman.spotify/models/Episode.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
/* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2020; Original author: Adam Ratzman */
22
package com.adamratzman.spotify.models
33

4+
import com.adamratzman.spotify.SpotifyClientApi
45
import com.adamratzman.spotify.SpotifyScope
56
import com.adamratzman.spotify.utils.Locale
7+
import com.adamratzman.spotify.utils.Market
68
import kotlinx.serialization.SerialName
79
import kotlinx.serialization.Serializable
810
import kotlinx.serialization.Transient
@@ -104,6 +106,13 @@ data class SimpleEpisode(
104106
val languages
105107
get() = (language?.let { showLanguagesPrivate + it } ?: showLanguagesPrivate)
106108
.map { Locale.valueOf(it.replace("-", "_")) }
109+
110+
/**
111+
* Converts this [SimpleEpisode] into a full [Episode] object
112+
*
113+
* @param market Provide this parameter if you want the list of returned items to be relevant to a particular country.
114+
*/
115+
fun toFullEpisode(market: Market? = null) = (api as? SpotifyClientApi)?.episodes?.getEpisode(id, market)
107116
}
108117

109118
/**

src/commonMain/kotlin/com.adamratzman.spotify/models/LocalTracks.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* Spotify Web API, Kotlin Wrapper; MIT License, 2017-2020; Original author: Adam Ratzman */
22
package com.adamratzman.spotify.models
33

4+
import com.adamratzman.spotify.utils.Market
45
import kotlinx.serialization.SerialName
56
import kotlinx.serialization.Serializable
67

@@ -68,4 +69,15 @@ data class LocalTrack(
6869
@SerialName("track_number") val trackNumber: Int? = null,
6970
override val type: String,
7071
override val uri: LocalTrackUri
71-
) : IdentifiableNullable(), Playable
72+
) : IdentifiableNullable(), Playable {
73+
74+
/**
75+
* Search for this local track by name in Spotify's track catalog.
76+
*
77+
* @param limit The number of objects to return. Default: 50 (or api limit). Minimum: 1. Maximum: 50.
78+
* @param offset The index of the first item to return. Default: 0. Use with limit to get the next set of items
79+
* @param market Provide this parameter if you want the list of returned items to be relevant to a particular country.
80+
* If omitted, the returned items will be relevant to all countries.
81+
*/
82+
fun searchForSpotifyTrack(limit: Int? = null, offset: Int? = null, market: Market? = null) = api.search.searchTrack(name, limit, offset, market)
83+
}

src/commonMain/kotlin/com.adamratzman.spotify/models/Playable.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ import kotlinx.serialization.json.JsonObject
1010
import kotlinx.serialization.json.contentOrNull
1111
import kotlinx.serialization.json.jsonPrimitive
1212

13+
/**
14+
* A Playable object represents a [Track], [Episode], or [LocalTrack] that has been returned by the Spotify api.
15+
*
16+
* @property href A link to the Web API endpoint providing full details of the album.
17+
* @property id The Spotify ID for the album.
18+
* @property uri The URI associated with the object
19+
* @property type The object type
20+
*/
1321
interface Playable {
1422
val href: String?
1523
val id: String?
@@ -33,4 +41,19 @@ interface Playable {
3341
}
3442
}
3543
}
44+
45+
/**
46+
* This Playable object as a [LocalTrack]
47+
*/
48+
val asLocalTrack get() = this as LocalTrack
49+
50+
/**
51+
* This Playable object as a [Track]
52+
*/
53+
val asTrack get() = this as Track
54+
55+
/**
56+
* This Playable object as an [Episode]
57+
*/
58+
val asEpisode get() = this as Episode
3659
}

0 commit comments

Comments
 (0)