Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
27fa65c
make credentials and clientAuthentication vars private
adamint Dec 28, 2018
de364ed
expose refreshToken functions
adamint Dec 29, 2018
7e40bd0
add documentation for authentication
adamint Dec 29, 2018
9586314
allow building API without clientId/secret
adamint Dec 29, 2018
778d9ed
Fix crash if given token is expired
molikuner Dec 28, 2018
e49347f
Merge branch 'dev' into dev
molikuner Dec 29, 2018
4576fcd
Merge pull request #30 from molikuner/dev
adamint Dec 29, 2018
601b985
Revert "Fix refresh token"
adamint Dec 29, 2018
42420fd
Merge pull request #31 from adamint/revert-30-dev
adamint Dec 29, 2018
c7ba1ba
Fix refresh token
molikuner Dec 29, 2018
50883e5
cache is built
adamint Dec 29, 2018
e9a0d76
implement cache
adamint Dec 29, 2018
fe26c83
Merge remote-tracking branch 'origin/dev' into dev
adamint Dec 29, 2018
3fb8ca5
Merge pull request #32 from molikuner/dev
adamint Dec 29, 2018
e226d8e
Rework Endpoint#execute()
molikuner Dec 29, 2018
d669f1d
Fix crash on android
molikuner Dec 29, 2018
e0a0f86
Merge pull request #33 from molikuner/fixAndroidJSONArray
adamint Dec 29, 2018
62fb117
Merge pull request #34 from molikuner/dev
adamint Dec 29, 2018
65fab80
allow users to toggle cache
adamint Dec 29, 2018
4b6677d
implement HttpConnection class & track deletion (not all tested)
adamint Dec 30, 2018
8988a72
fix inner objects
adamint Dec 30, 2018
7f78198
Test HttpConnection
molikuner Dec 30, 2018
3c45b0d
Remove Jsoup
molikuner Dec 30, 2018
60ad384
clean up SpotifyAPI classes
adamint Dec 31, 2018
55eb953
Merge pull request #37 from adamint/molikuner-dev
adamint Dec 31, 2018
bdfe025
update version
adamint Dec 31, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ This library is available via Maven Central.
<dependency>
<groupId>com.adamratzman</groupId>
<artifactId>spotify-api-kotlin</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</dependency>
```

### Gradle
```
compile group: 'com.adamratzman', name: 'spotify-api-kotlin', version: '2.0.0'
compile group: 'com.adamratzman', name: 'spotify-api-kotlin', version: '2.0.1'
```

To use the latest snapshot instead, you must add the Jitpack repository
Expand Down
3 changes: 1 addition & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
}

group 'com.adamratzman'
version '2.0.0'
version '2.0.1'

archivesBaseName = 'spotify-api-kotlin'

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

compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.11"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,37 @@ import java.util.function.Supplier
class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
fun getDevices(): SpotifyRestAction<List<Device>> {
return toAction(Supplier {
get(EndpointBuilder("/me/player/devices").toString()).toInnerObject("devices", api, Device::class.java)
get(EndpointBuilder("/me/player/devices").toString()).toInnerObject(
"devices",
api,
mutableListOf<Device>().javaClass
).toList()
})
}

fun getCurrentContext(): SpotifyRestAction<CurrentlyPlayingContext?> {
return toAction(Supplier {
val obj: CurrentlyPlayingContext? = get(EndpointBuilder("/me/player").toString()).toObject(api, CurrentlyPlayingContext::class.java)
val obj: CurrentlyPlayingContext? =
get(EndpointBuilder("/me/player").toString()).toObject(api, CurrentlyPlayingContext::class.java)
if (obj?.timestamp == null) null else obj
})
}

fun getRecentlyPlayed(): SpotifyRestPagingAction<PlayHistory, CursorBasedPagingObject<PlayHistory>> {
return toPagingObjectAction(Supplier {
get(EndpointBuilder("/me/player/recently-played").toString()).toCursorBasedPagingObject(endpoint = this, tClazz = PlayHistory::class.java)
get(EndpointBuilder("/me/player/recently-played").toString()).toCursorBasedPagingObject(
endpoint = this,
tClazz = PlayHistory::class.java
)
})
}

fun getCurrentlyPlaying(): SpotifyRestAction<CurrentlyPlayingObject?> {
return toAction(Supplier {
val obj: CurrentlyPlayingObject? = get(EndpointBuilder("/me/player/currently-playing").toString()).toObject(api, CurrentlyPlayingObject::class.java)
val obj: CurrentlyPlayingObject? = get(EndpointBuilder("/me/player/currently-playing").toString()).toObject(
api,
CurrentlyPlayingObject::class.java
)
if (obj?.timestamp == null) null else obj
})
}
Expand All @@ -64,22 +75,37 @@ class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
fun seekPosition(positionMs: Long, deviceId: String? = null): SpotifyRestAction<Unit> {
return toAction(Supplier {
if (positionMs < 0) throw IllegalArgumentException("Position must not be negative!")
put(EndpointBuilder("/me/player/seek").with("position_ms", positionMs).with("device_id", deviceId).toString())
put(
EndpointBuilder("/me/player/seek").with("position_ms", positionMs).with(
"device_id",
deviceId
).toString()
)
Unit
})
}

fun setRepeatMode(state: PlayerRepeatState, deviceId: String? = null): SpotifyRestAction<Unit> {
return toAction(Supplier {
put(EndpointBuilder("/me/player/repeat").with("state", state.toString().toLowerCase()).with("device_id", deviceId).toString())
put(
EndpointBuilder("/me/player/repeat").with("state", state.toString().toLowerCase()).with(
"device_id",
deviceId
).toString()
)
Unit
})
}

fun setVolume(volume: Int, deviceId: String? = null): SpotifyRestAction<Unit> {
if (volume !in 0..100) throw IllegalArgumentException("Volume must be within 0 to 100 inclusive. Provided: $volume")
return toAction(Supplier {
put(EndpointBuilder("/me/player/volume").with("volume_percent", volume).with("device_id", deviceId).toString())
put(
EndpointBuilder("/me/player/volume").with("volume_percent", volume).with(
"device_id",
deviceId
).toString()
)
Unit
})
}
Expand Down Expand Up @@ -162,8 +188,10 @@ class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
fun transferPlayback(vararg deviceId: String, play: Boolean = true): SpotifyRestAction<Unit> {
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")
return toAction(Supplier {
put(EndpointBuilder("/me/player").with("device_ids", deviceId.joinToString(",") { it.encode() })
.with("play", play).toString())
put(
EndpointBuilder("/me/player").with("device_ids", deviceId.joinToString(",") { it.encode() })
.with("play", play).toString()
)
Unit
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,10 +265,34 @@ class ClientPlaylistAPI(api: SpotifyAPI) : PlaylistsAPI(api) {
})
}

/*
private fun removePlaylistTracks(
fun removePlaylistTrack(
playlist: String,
track: String,
positions: SpotifyTrackPositions,
snapshotId: String? = null
) = removePlaylistTracks(playlist, track to positions, snapshotId = snapshotId)

fun removePlaylistTrack(
playlist: String,
tracks: List<Pair<TrackURI, SpotifyTrackPositions?>>,
track: String,
snapshotId: String? = null
) = removePlaylistTracks(playlist, track, snapshotId = snapshotId)

fun removePlaylistTracks(
playlist: String,
vararg tracks: String,
snapshotId: String? = null
) = removePlaylistTracksImpl(playlist, tracks.map { it to null }.toTypedArray(), snapshotId)

fun removePlaylistTracks(
playlist: String,
vararg tracks: Pair<String, SpotifyTrackPositions>,
snapshotId: String? = null
) = removePlaylistTracksImpl(playlist, tracks.toList().toTypedArray(), snapshotId)

private fun removePlaylistTracksImpl(
playlist: String,
tracks: Array<Pair<String, SpotifyTrackPositions?>>,
snapshotId: String?
): SpotifyRestAction<String> {
return toAction(Supplier {
Expand All @@ -277,17 +301,14 @@ class ClientPlaylistAPI(api: SpotifyAPI) : PlaylistsAPI(api) {
val json = JSONObject().also { if (snapshotId != null) it.put("snapshot_id", snapshotId) }

tracks.map { (track, positions) ->
JSONObject().put("uri", track.uri)
JSONObject().put("uri", TrackURI(track).uri)
.also { if (positions?.positions?.isNotEmpty() == true) it.put("positions", positions.positions) }
}.let { json.put("tracks", JSONArray(it)) }

delete(
EndpointBuilder("/playlists/${PlaylistURI(playlist).id}/tracks").toString(), data = listOf(
"tracks" to json.toString()
)
EndpointBuilder("/playlists/${PlaylistURI(playlist).id}/tracks").toString(), body = json.toString()
)
})
}*/
}

/*
fun removeAllOccurances(user: String, playlist: String, vararg tracks: String): SpotifyRestAction<Unit> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.adamratzman.spotify.utils.SpotifyCategory
import com.adamratzman.spotify.utils.SpotifyEndpoint
import com.adamratzman.spotify.utils.TrackURI
import com.adamratzman.spotify.utils.encode
import com.adamratzman.spotify.utils.map
import com.adamratzman.spotify.utils.toObject
import com.adamratzman.spotify.utils.toPagingObject
import org.json.JSONObject
Expand Down
Loading