Skip to content

Commit 5e179ef

Browse files
committed
Merge branch 'dev' of github.com:adamint/spotify-web-api-kotlin into dev
2 parents 8591740 + c1104f9 commit 5e179ef

File tree

11 files changed

+219
-162
lines changed

11 files changed

+219
-162
lines changed

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

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ data class SimpleAlbum(
3535
@SerialName("album_type") private val albumTypeString: String,
3636
@SerialName("available_markets") private val availableMarketsString: List<String> = listOf(),
3737
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
38-
@SerialName("href") override val href: String,
39-
@SerialName("id") override val id: String,
40-
@SerialName("uri") private val uriString: String,
38+
override val href: String,
39+
override val id: String,
40+
override val uri: AlbumUri,
4141

4242
val artists: List<SimpleArtist>,
4343
val images: List<SpotifyImage>,
@@ -48,9 +48,7 @@ data class SimpleAlbum(
4848
@SerialName("release_date_precision") val releaseDatePrecision: String,
4949
@SerialName("total_tracks") val totalTracks: Int? = null,
5050
@SerialName("album_group") private val albumGroupString: String? = null
51-
) : CoreObject(href, id, AlbumUri(uriString), externalUrlsString) {
52-
override val uri: AlbumUri get() = super.uri as AlbumUri
53-
51+
) : CoreObject() {
5452
@Transient
5553
val availableMarkets = availableMarketsString.map { Market.valueOf(it) }
5654

@@ -118,11 +116,11 @@ enum class AlbumResultType(internal val id: String) {
118116
data class Album(
119117
@SerialName("album_type") private val albumTypeString: String,
120118
@SerialName("available_markets") private val availableMarketsString: List<String> = listOf(),
121-
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
122119
@SerialName("external_ids") private val externalIdsString: Map<String, String> = hashMapOf(),
123-
@SerialName("href") override val href: String,
124-
@SerialName("id") override val id: String,
125-
@SerialName("uri") private val uriString: String,
120+
@SerialName("external_urls") override val externalUrlsString: Map<String, String> = mapOf(),
121+
override val href: String,
122+
override val id: String,
123+
override val uri: AlbumUri,
126124

127125
val artists: List<SimpleArtist>,
128126
val copyrights: List<SpotifyCopyright>,
@@ -137,8 +135,7 @@ data class Album(
137135
val type: String,
138136
@SerialName("total_tracks") val totalTracks: Int,
139137
val restrictions: Restrictions? = null
140-
) : CoreObject(href, id, AlbumUri(uriString), externalUrlsString) {
141-
override val uri: AlbumUri get() = super.uri as AlbumUri
138+
) : CoreObject() {
142139

143140
@Transient
144141
val availableMarkets = availableMarketsString.map { Market.valueOf(it) }

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@ import kotlinx.serialization.Serializable
1515
@Serializable
1616
data class SimpleArtist(
1717
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
18-
@SerialName("href") override val href: String,
19-
@SerialName("id") override val id: String,
20-
@SerialName("uri") private val uriString: String,
18+
override val href: String,
19+
override val id: String,
20+
override val uri: ArtistUri,
2121

2222
val name: String,
2323
val type: String
24-
) : CoreObject(href, id, ArtistUri(uriString), externalUrlsString) {
25-
override val uri: ArtistUri get() = super.uri as ArtistUri
24+
) : CoreObject() {
2625

2726
/**
2827
* Converts this [SimpleArtist] into a full [Artist] object
@@ -47,19 +46,17 @@ data class SimpleArtist(
4746
@Serializable
4847
data class Artist(
4948
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
50-
@SerialName("href") override val href: String,
51-
@SerialName("id") override val id: String,
52-
@SerialName("uri") private val uriString: String,
49+
override val href: String,
50+
override val id: String,
51+
override val uri: ArtistUri,
5352

5453
val followers: Followers,
5554
val genres: List<String>,
5655
val images: List<SpotifyImage>,
5756
val name: String,
5857
val popularity: Int,
5958
val type: String
60-
) : CoreObject(href, id, ArtistUri(uriString), externalUrlsString) {
61-
override val uri: ArtistUri get() = super.uri as ArtistUri
62-
}
59+
) : CoreObject()
6360

6461
@Serializable
6562
internal data class ArtistList(val artists: List<Artist?>)

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ import kotlinx.serialization.Serializable
1414
*/
1515
@Serializable
1616
data class SpotifyCategory(
17-
@SerialName("href") override val href: String,
18-
@SerialName("id") override val id: String,
17+
override val href: String,
18+
override val id: String,
1919

2020
val icons: List<SpotifyImage>,
2121
val name: String
22-
) : Identifiable(href, id)
22+
) : Identifiable()
2323

2424
/**
2525
* Seed from which the recommendation was constructed
@@ -42,7 +42,7 @@ data class RecommendationSeed(
4242
val afterFilteringSize: Int,
4343
val afterRelinkingSize: Int? = null,
4444
val type: String
45-
) : Identifiable(href, id)
45+
) : Identifiable()
4646

4747
/**
4848
* @property seeds An array of recommendation seed objects.

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

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,15 @@ import kotlinx.serialization.Transient
1212
* @property type The object type, e.g. “artist”, “playlist”, “album”.
1313
* @property href A link to the Web API endpoint providing full details of the track.
1414
*/
15-
@Serializable
15+
@Serializable // TODO remove id. It's wrong to extend CoreObject here, as it doesn't has any id
1616
data class PlayHistoryContext(
17-
@SerialName("href") override val href: String,
1817
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
19-
@SerialName("uri") private val uriString: String,
20-
21-
val type: String
22-
) : CoreObject(
23-
href, href, when (type) {
24-
"artist" -> ArtistUri(uriString)
25-
"playlist" -> PlaylistUri(uriString)
26-
else -> AlbumUri(uriString)
27-
}, externalUrlsString
28-
) {
29-
override val uri: TrackUri get() = super.uri as TrackUri
30-
}
18+
override val href: String,
19+
override val uri: SpotifyUri,
20+
21+
val type: String,
22+
override val id: String = TRANSIENT_EMPTY_STRING
23+
) : CoreObject()
3124

3225
/**
3326
* Information about a previously-played track
@@ -56,17 +49,18 @@ data class PlayHistory(
5649
*/
5750
@Serializable
5851
data class Device(
59-
@SerialName("id") override val id: String? = null,
60-
52+
override val id: String? = null,
6153
@SerialName("is_active") val isActive: Boolean,
6254
@SerialName("is_private_session") val isPrivateSession: Boolean,
6355
@SerialName("is_restricted") val isRestricted: Boolean,
6456
val name: String,
6557
val typeString: String,
6658
@SerialName("volume_percent") val volumePercent: Int
67-
) : IdentifiableNullable(null, id) {
59+
) : IdentifiableNullable() {
6860
@Transient
6961
val type: DeviceType = DeviceType.values().first { it.identifier.equals(typeString, true) }
62+
63+
override val href: String? = null
7064
}
7165

7266
/**

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ import kotlinx.serialization.Transient
3333
@Serializable
3434
data class SimplePlaylist(
3535
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
36-
@SerialName("href") override val href: String,
37-
@SerialName("id") override val id: String,
38-
@SerialName("uri") private val uriString: String,
36+
override val href: String,
37+
override val id: String,
38+
override val uri: PlaylistUri,
3939

4040
val collaborative: Boolean,
4141
val images: List<SpotifyImage>,
@@ -47,8 +47,7 @@ data class SimplePlaylist(
4747
@SerialName("snapshot_id") private val snapshotIdString: String,
4848
val tracks: PlaylistTrackInfo,
4949
val type: String
50-
) : CoreObject(href, id, PlaylistUri(uriString), externalUrlsString) {
51-
override val uri: PlaylistUri get() = super.uri as PlaylistUri
50+
) : CoreObject() {
5251

5352
@Transient
5453
val snapshot: PlaylistSnapshot = PlaylistSnapshot(snapshotIdString)
@@ -107,9 +106,9 @@ data class PlaylistTrack(
107106
@Serializable
108107
data class Playlist(
109108
@SerialName("external_urls") override val externalUrlsString: Map<String, String>,
110-
@SerialName("href") override val href: String,
111-
@SerialName("id") override val id: String,
112-
@SerialName("uri") private val uriString: String,
109+
override val href: String,
110+
override val id: String,
111+
override val uri: PlaylistUri,
113112

114113
val collaborative: Boolean,
115114
val description: String? = null,
@@ -122,8 +121,7 @@ data class Playlist(
122121
@SerialName("snapshot_id") private val snapshotIdString: String,
123122
val tracks: PagingObject<PlaylistTrack>,
124123
val type: String
125-
) : CoreObject(href, id, PlaylistUri(uriString), externalUrlsString) {
126-
override val uri: PlaylistUri get() = super.uri as PlaylistUri
124+
) : CoreObject() {
127125

128126
@Transient
129127
val snapshot: PlaylistSnapshot = PlaylistSnapshot(snapshotIdString)

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

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@ import kotlinx.serialization.Serializable
1010
import kotlinx.serialization.Transient
1111

1212
internal const val TRANSIENT_EMPTY_STRING = ""
13-
internal val TRANSIENT_NULL = null
14-
internal val TRANSIENT_URI = UserUri("TRANSIENT_URI")
1513

1614
/**
1715
* Represents an identifiable Spotify object such as an Album or Recommendation Seed
1816
*/
1917
@Serializable
20-
abstract class Identifiable(
21-
@Transient override val href: String? = TRANSIENT_NULL,
22-
@Transient override val id: String = TRANSIENT_EMPTY_STRING
23-
) : IdentifiableNullable(id, href)
18+
abstract class Identifiable : IdentifiableNullable() {
19+
abstract override val id: String
20+
}
2421

2522
/**
2623
* Represents an identifiable Spotify object such as an Album or Recommendation Seed
@@ -29,10 +26,10 @@ abstract class Identifiable(
2926
* @property id The Spotify id of the associated object
3027
*/
3128
@Serializable
32-
abstract class IdentifiableNullable(
33-
@Transient open val href: String? = TRANSIENT_NULL,
34-
@Transient open val id: String? = TRANSIENT_NULL
35-
) : NeedsApi()
29+
abstract class IdentifiableNullable : NeedsApi() {
30+
abstract val href: String?
31+
abstract val id: String?
32+
}
3633

3734
/**
3835
* Represents a core Spotify object such as a Track or Album
@@ -41,23 +38,16 @@ abstract class IdentifiableNullable(
4138
* @property externalUrls Known external URLs for this object
4239
*/
4340
@Serializable
44-
abstract class CoreObject(
45-
@Transient override val href: String = TRANSIENT_EMPTY_STRING,
46-
@Transient override val id: String = TRANSIENT_EMPTY_STRING,
47-
@Transient open val uri: SpotifyUri = TRANSIENT_URI,
48-
@Transient internal open val externalUrlsString: Map<String, String> = mapOf()
49-
) : Identifiable(href, id) {
41+
abstract class CoreObject : Identifiable() {
42+
protected abstract val externalUrlsString: Map<String, String>
43+
abstract override val href: String
44+
abstract val uri: SpotifyUri
5045
val externalUrls: List<ExternalUrl> get() = externalUrlsString.map { ExternalUrl(it.key, it.value) }
5146
}
5247

5348
@Serializable
54-
abstract class RelinkingAvailableResponse(
55-
@Transient val linkedTrack: LinkedTrack? = TRANSIENT_NULL,
56-
@Transient override val href: String = TRANSIENT_EMPTY_STRING,
57-
@Transient override val id: String = TRANSIENT_EMPTY_STRING,
58-
@Transient override val uri: SpotifyUri = TRANSIENT_URI,
59-
@Transient override val externalUrlsString: Map<String, String> = mapOf()
60-
) : CoreObject(href, id, uri, externalUrlsString) {
49+
abstract class RelinkingAvailableResponse : CoreObject() {
50+
@SerialName("linked_from") abstract val linkedTrack: LinkedTrack?
6151
fun isRelinked() = linkedTrack != null
6252
}
6353

@@ -80,6 +70,7 @@ class ExternalId(val key: String, val id: String)
8070
*
8171
* @property api The API client associated with the request
8272
*/
73+
@Serializable
8374
abstract class NeedsApi {
8475
@Transient
8576
lateinit var api: SpotifyApi<*, *>

0 commit comments

Comments
 (0)