Skip to content

Commit 3e91f5f

Browse files
authored
Merge pull request #38 from adamint/dev
Request caching, custom HTTP library
2 parents d9be3e5 + bdfe025 commit 3e91f5f

File tree

15 files changed

+621
-149
lines changed

15 files changed

+621
-149
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ This library is available via Maven Central.
2222
<dependency>
2323
<groupId>com.adamratzman</groupId>
2424
<artifactId>spotify-api-kotlin</artifactId>
25-
<version>2.0.0</version>
25+
<version>2.0.1</version>
2626
</dependency>
2727
```
2828

2929
### Gradle
3030
```
31-
compile group: 'com.adamratzman', name: 'spotify-api-kotlin', version: '2.0.0'
31+
compile group: 'com.adamratzman', name: 'spotify-api-kotlin', version: '2.0.1'
3232
```
3333

3434
To use the latest snapshot instead, you must add the Jitpack repository

build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
}
88

99
group 'com.adamratzman'
10-
version '2.0.0'
10+
version '2.0.1'
1111

1212
archivesBaseName = 'spotify-api-kotlin'
1313

@@ -21,7 +21,6 @@ repositories {
2121
dependencies {
2222
// Actual library dependencies
2323
implementation(group: 'org.json', name: 'json', version: '20180130')
24-
implementation('org.jsoup:jsoup:1.10.3')
2524
implementation("com.google.code.gson:gson:2.8.1")
2625

2726
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.11"

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientPlayerAPI.kt

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,37 @@ import java.util.function.Supplier
3030
class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
3131
fun getDevices(): SpotifyRestAction<List<Device>> {
3232
return toAction(Supplier {
33-
get(EndpointBuilder("/me/player/devices").toString()).toInnerObject("devices", api, Device::class.java)
33+
get(EndpointBuilder("/me/player/devices").toString()).toInnerObject(
34+
"devices",
35+
api,
36+
mutableListOf<Device>().javaClass
37+
).toList()
3438
})
3539
}
3640

3741
fun getCurrentContext(): SpotifyRestAction<CurrentlyPlayingContext?> {
3842
return toAction(Supplier {
39-
val obj: CurrentlyPlayingContext? = get(EndpointBuilder("/me/player").toString()).toObject(api, CurrentlyPlayingContext::class.java)
43+
val obj: CurrentlyPlayingContext? =
44+
get(EndpointBuilder("/me/player").toString()).toObject(api, CurrentlyPlayingContext::class.java)
4045
if (obj?.timestamp == null) null else obj
4146
})
4247
}
4348

4449
fun getRecentlyPlayed(): SpotifyRestPagingAction<PlayHistory, CursorBasedPagingObject<PlayHistory>> {
4550
return toPagingObjectAction(Supplier {
46-
get(EndpointBuilder("/me/player/recently-played").toString()).toCursorBasedPagingObject(endpoint = this, tClazz = PlayHistory::class.java)
51+
get(EndpointBuilder("/me/player/recently-played").toString()).toCursorBasedPagingObject(
52+
endpoint = this,
53+
tClazz = PlayHistory::class.java
54+
)
4755
})
4856
}
4957

5058
fun getCurrentlyPlaying(): SpotifyRestAction<CurrentlyPlayingObject?> {
5159
return toAction(Supplier {
52-
val obj: CurrentlyPlayingObject? = get(EndpointBuilder("/me/player/currently-playing").toString()).toObject(api, CurrentlyPlayingObject::class.java)
60+
val obj: CurrentlyPlayingObject? = get(EndpointBuilder("/me/player/currently-playing").toString()).toObject(
61+
api,
62+
CurrentlyPlayingObject::class.java
63+
)
5364
if (obj?.timestamp == null) null else obj
5465
})
5566
}
@@ -64,22 +75,37 @@ class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
6475
fun seekPosition(positionMs: Long, deviceId: String? = null): SpotifyRestAction<Unit> {
6576
return toAction(Supplier {
6677
if (positionMs < 0) throw IllegalArgumentException("Position must not be negative!")
67-
put(EndpointBuilder("/me/player/seek").with("position_ms", positionMs).with("device_id", deviceId).toString())
78+
put(
79+
EndpointBuilder("/me/player/seek").with("position_ms", positionMs).with(
80+
"device_id",
81+
deviceId
82+
).toString()
83+
)
6884
Unit
6985
})
7086
}
7187

7288
fun setRepeatMode(state: PlayerRepeatState, deviceId: String? = null): SpotifyRestAction<Unit> {
7389
return toAction(Supplier {
74-
put(EndpointBuilder("/me/player/repeat").with("state", state.toString().toLowerCase()).with("device_id", deviceId).toString())
90+
put(
91+
EndpointBuilder("/me/player/repeat").with("state", state.toString().toLowerCase()).with(
92+
"device_id",
93+
deviceId
94+
).toString()
95+
)
7596
Unit
7697
})
7798
}
7899

79100
fun setVolume(volume: Int, deviceId: String? = null): SpotifyRestAction<Unit> {
80101
if (volume !in 0..100) throw IllegalArgumentException("Volume must be within 0 to 100 inclusive. Provided: $volume")
81102
return toAction(Supplier {
82-
put(EndpointBuilder("/me/player/volume").with("volume_percent", volume).with("device_id", deviceId).toString())
103+
put(
104+
EndpointBuilder("/me/player/volume").with("volume_percent", volume).with(
105+
"device_id",
106+
deviceId
107+
).toString()
108+
)
83109
Unit
84110
})
85111
}
@@ -162,8 +188,10 @@ class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
162188
fun transferPlayback(vararg deviceId: String, play: Boolean = true): SpotifyRestAction<Unit> {
163189
if (deviceId.size > 1) throw IllegalArgumentException("Although an array is accepted, only a single device_id is currently supported. Supplying more than one will 400 Bad Request")
164190
return toAction(Supplier {
165-
put(EndpointBuilder("/me/player").with("device_ids", deviceId.joinToString(",") { it.encode() })
166-
.with("play", play).toString())
191+
put(
192+
EndpointBuilder("/me/player").with("device_ids", deviceId.joinToString(",") { it.encode() })
193+
.with("play", play).toString()
194+
)
167195
Unit
168196
})
169197
}

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientPlaylistAPI.kt

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -265,10 +265,34 @@ class ClientPlaylistAPI(api: SpotifyAPI) : PlaylistsAPI(api) {
265265
})
266266
}
267267

268-
/*
269-
private fun removePlaylistTracks(
268+
fun removePlaylistTrack(
269+
playlist: String,
270+
track: String,
271+
positions: SpotifyTrackPositions,
272+
snapshotId: String? = null
273+
) = removePlaylistTracks(playlist, track to positions, snapshotId = snapshotId)
274+
275+
fun removePlaylistTrack(
270276
playlist: String,
271-
tracks: List<Pair<TrackURI, SpotifyTrackPositions?>>,
277+
track: String,
278+
snapshotId: String? = null
279+
) = removePlaylistTracks(playlist, track, snapshotId = snapshotId)
280+
281+
fun removePlaylistTracks(
282+
playlist: String,
283+
vararg tracks: String,
284+
snapshotId: String? = null
285+
) = removePlaylistTracksImpl(playlist, tracks.map { it to null }.toTypedArray(), snapshotId)
286+
287+
fun removePlaylistTracks(
288+
playlist: String,
289+
vararg tracks: Pair<String, SpotifyTrackPositions>,
290+
snapshotId: String? = null
291+
) = removePlaylistTracksImpl(playlist, tracks.toList().toTypedArray(), snapshotId)
292+
293+
private fun removePlaylistTracksImpl(
294+
playlist: String,
295+
tracks: Array<Pair<String, SpotifyTrackPositions?>>,
272296
snapshotId: String?
273297
): SpotifyRestAction<String> {
274298
return toAction(Supplier {
@@ -277,17 +301,14 @@ class ClientPlaylistAPI(api: SpotifyAPI) : PlaylistsAPI(api) {
277301
val json = JSONObject().also { if (snapshotId != null) it.put("snapshot_id", snapshotId) }
278302

279303
tracks.map { (track, positions) ->
280-
JSONObject().put("uri", track.uri)
304+
JSONObject().put("uri", TrackURI(track).uri)
281305
.also { if (positions?.positions?.isNotEmpty() == true) it.put("positions", positions.positions) }
282306
}.let { json.put("tracks", JSONArray(it)) }
283-
284307
delete(
285-
EndpointBuilder("/playlists/${PlaylistURI(playlist).id}/tracks").toString(), data = listOf(
286-
"tracks" to json.toString()
287-
)
308+
EndpointBuilder("/playlists/${PlaylistURI(playlist).id}/tracks").toString(), body = json.toString()
288309
)
289310
})
290-
}*/
311+
}
291312

292313
/*
293314
fun removeAllOccurances(user: String, playlist: String, vararg tracks: String): SpotifyRestAction<Unit> {

src/main/kotlin/com/adamratzman/spotify/endpoints/public/BrowseAPI.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.adamratzman.spotify.utils.SpotifyCategory
2020
import com.adamratzman.spotify.utils.SpotifyEndpoint
2121
import com.adamratzman.spotify.utils.TrackURI
2222
import com.adamratzman.spotify.utils.encode
23+
import com.adamratzman.spotify.utils.map
2324
import com.adamratzman.spotify.utils.toObject
2425
import com.adamratzman.spotify.utils.toPagingObject
2526
import org.json.JSONObject

0 commit comments

Comments
 (0)