Improve the extension function by making it call-chainable

This commit is contained in:
tzugen 2021-06-09 17:36:11 +02:00
parent a60a843edf
commit 620239f859
No known key found for this signature in database
GPG Key ID: 61E9C34BC10EC930
2 changed files with 36 additions and 85 deletions

View File

@ -40,11 +40,11 @@ fun Response<out ResponseBody>.toStreamResponse(): StreamResponse {
* It creates Exceptions from the results returned by the Subsonic API * It creates Exceptions from the results returned by the Subsonic API
*/ */
@Suppress("ThrowsCount") @Suppress("ThrowsCount")
fun Response<out SubsonicResponse>.throwOnFailure(): Response<out SubsonicResponse> { fun <T : SubsonicResponse> Response<out T>.throwOnFailure(): Response<out T> {
val response = this val response = this
if (response.isSuccessful && response.body()!!.status === SubsonicResponse.Status.OK) { if (response.isSuccessful && response.body()!!.status === SubsonicResponse.Status.OK) {
return this return this as Response<T>
} }
if (!response.isSuccessful) { if (!response.isSuccessful) {
throw IOException("Server error, code: " + response.code()) throw IOException("Server error, code: " + response.code())

View File

@ -69,8 +69,7 @@ open class RESTMusicService(
@Throws(Exception::class) @Throws(Exception::class)
override fun isLicenseValid(): Boolean { override fun isLicenseValid(): Boolean {
val response = API.getLicense().execute() val response = API.getLicense().execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.license.valid return response.body()!!.license.valid
} }
@ -85,8 +84,7 @@ open class RESTMusicService(
if (cachedMusicFolders != null && !refresh) return cachedMusicFolders if (cachedMusicFolders != null && !refresh) return cachedMusicFolders
val response = API.getMusicFolders().execute() val response = API.getMusicFolders().execute().throwOnFailure()
response.throwOnFailure()
val musicFolders = response.body()!!.musicFolders.toDomainEntityList() val musicFolders = response.body()!!.musicFolders.toDomainEntityList()
fileStorage.store(MUSIC_FOLDER_STORAGE_NAME, musicFolders, getMusicFolderListSerializer()) fileStorage.store(MUSIC_FOLDER_STORAGE_NAME, musicFolders, getMusicFolderListSerializer())
@ -104,8 +102,7 @@ open class RESTMusicService(
val cachedIndexes = fileStorage.load(indexName, getIndexesSerializer()) val cachedIndexes = fileStorage.load(indexName, getIndexesSerializer())
if (cachedIndexes != null && !refresh) return cachedIndexes if (cachedIndexes != null && !refresh) return cachedIndexes
val response = API.getIndexes(musicFolderId, null).execute() val response = API.getIndexes(musicFolderId, null).execute().throwOnFailure()
response.throwOnFailure()
val indexes = response.body()!!.indexes.toDomainEntity() val indexes = response.body()!!.indexes.toDomainEntity()
fileStorage.store(indexName, indexes, getIndexesSerializer()) fileStorage.store(indexName, indexes, getIndexesSerializer())
@ -119,8 +116,7 @@ open class RESTMusicService(
val cachedArtists = fileStorage.load(ARTISTS_STORAGE_NAME, getIndexesSerializer()) val cachedArtists = fileStorage.load(ARTISTS_STORAGE_NAME, getIndexesSerializer())
if (cachedArtists != null && !refresh) return cachedArtists if (cachedArtists != null && !refresh) return cachedArtists
val response = API.getArtists(null).execute() val response = API.getArtists(null).execute().throwOnFailure()
response.throwOnFailure()
val indexes = response.body()!!.indexes.toDomainEntity() val indexes = response.body()!!.indexes.toDomainEntity()
fileStorage.store(ARTISTS_STORAGE_NAME, indexes, getIndexesSerializer()) fileStorage.store(ARTISTS_STORAGE_NAME, indexes, getIndexesSerializer())
@ -159,8 +155,7 @@ open class RESTMusicService(
name: String?, name: String?,
refresh: Boolean refresh: Boolean
): MusicDirectory { ): MusicDirectory {
val response = API.getMusicDirectory(id).execute() val response = API.getMusicDirectory(id).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.musicDirectory.toDomainEntity() return response.body()!!.musicDirectory.toDomainEntity()
} }
@ -171,8 +166,7 @@ open class RESTMusicService(
name: String?, name: String?,
refresh: Boolean refresh: Boolean
): MusicDirectory { ): MusicDirectory {
val response = API.getArtist(id).execute() val response = API.getArtist(id).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.artist.toMusicDirectoryDomainEntity() return response.body()!!.artist.toMusicDirectoryDomainEntity()
} }
@ -183,8 +177,7 @@ open class RESTMusicService(
name: String?, name: String?,
refresh: Boolean refresh: Boolean
): MusicDirectory { ): MusicDirectory {
val response = API.getAlbum(id).execute() val response = API.getAlbum(id).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.album.toMusicDirectoryDomainEntity() return response.body()!!.album.toMusicDirectoryDomainEntity()
} }
@ -214,8 +207,7 @@ open class RESTMusicService(
): SearchResult { ): SearchResult {
val response = val response =
API.search(null, null, null, criteria.query, criteria.songCount, null, null) API.search(null, null, null, criteria.query, criteria.songCount, null, null)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.searchResult.toDomainEntity() return response.body()!!.searchResult.toDomainEntity()
} }
@ -231,9 +223,7 @@ open class RESTMusicService(
val response = API.search2( val response = API.search2(
criteria.query, criteria.artistCount, null, criteria.albumCount, null, criteria.query, criteria.artistCount, null, criteria.albumCount, null,
criteria.songCount, null criteria.songCount, null
).execute() ).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.searchResult.toDomainEntity() return response.body()!!.searchResult.toDomainEntity()
} }
@ -246,9 +236,7 @@ open class RESTMusicService(
val response = API.search3( val response = API.search3(
criteria.query, criteria.artistCount, null, criteria.albumCount, null, criteria.query, criteria.artistCount, null, criteria.albumCount, null,
criteria.songCount, null criteria.songCount, null
).execute() ).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.searchResult.toDomainEntity() return response.body()!!.searchResult.toDomainEntity()
} }
@ -258,8 +246,7 @@ open class RESTMusicService(
id: String, id: String,
name: String name: String
): MusicDirectory { ): MusicDirectory {
val response = API.getPlaylist(id).execute() val response = API.getPlaylist(id).execute().throwOnFailure()
response.throwOnFailure()
val playlist = response.body()!!.playlist.toMusicDirectoryDomainEntity() val playlist = response.body()!!.playlist.toMusicDirectoryDomainEntity()
savePlaylist(name, playlist) savePlaylist(name, playlist)
@ -304,8 +291,7 @@ open class RESTMusicService(
override fun getPlaylists( override fun getPlaylists(
refresh: Boolean refresh: Boolean
): List<Playlist> { ): List<Playlist> {
val response = API.getPlaylists(null).execute() val response = API.getPlaylists(null).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.playlists.toDomainEntitiesList() return response.body()!!.playlists.toDomainEntitiesList()
} }
@ -347,8 +333,7 @@ open class RESTMusicService(
override fun getPodcastsChannels( override fun getPodcastsChannels(
refresh: Boolean refresh: Boolean
): List<PodcastsChannel> { ): List<PodcastsChannel> {
val response = API.getPodcasts(false, null).execute() val response = API.getPodcasts(false, null).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.podcastChannels.toDomainEntitiesList() return response.body()!!.podcastChannels.toDomainEntitiesList()
} }
@ -357,8 +342,7 @@ open class RESTMusicService(
override fun getPodcastEpisodes( override fun getPodcastEpisodes(
podcastChannelId: String? podcastChannelId: String?
): MusicDirectory { ): MusicDirectory {
val response = API.getPodcasts(true, podcastChannelId).execute() val response = API.getPodcasts(true, podcastChannelId).execute().throwOnFailure()
response.throwOnFailure()
val podcastEntries = response.body()!!.podcastChannels[0].episodeList val podcastEntries = response.body()!!.podcastChannels[0].episodeList
val musicDirectory = MusicDirectory() val musicDirectory = MusicDirectory()
@ -382,8 +366,7 @@ open class RESTMusicService(
artist: String, artist: String,
title: String title: String
): Lyrics { ): Lyrics {
val response = API.getLyrics(artist, title).execute() val response = API.getLyrics(artist, title).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.lyrics.toDomainEntity() return response.body()!!.lyrics.toDomainEntity()
} }
@ -411,9 +394,7 @@ open class RESTMusicService(
null, null,
null, null,
musicFolderId musicFolderId
).execute() ).execute().throwOnFailure()
response.throwOnFailure()
val childList = response.body()!!.albumList.toDomainEntityList() val childList = response.body()!!.albumList.toDomainEntityList()
val result = MusicDirectory() val result = MusicDirectory()
@ -437,9 +418,7 @@ open class RESTMusicService(
null, null,
null, null,
musicFolderId musicFolderId
).execute() ).execute().throwOnFailure()
response.throwOnFailure()
val result = MusicDirectory() val result = MusicDirectory()
result.addAll(response.body()!!.albumList.toDomainEntityList()) result.addAll(response.body()!!.albumList.toDomainEntityList())
@ -457,9 +436,7 @@ open class RESTMusicService(
null, null,
null, null,
null null
).execute() ).execute().throwOnFailure()
response.throwOnFailure()
val result = MusicDirectory() val result = MusicDirectory()
result.addAll(response.body()!!.songsList.toDomainEntityList()) result.addAll(response.body()!!.songsList.toDomainEntityList())
@ -469,18 +446,14 @@ open class RESTMusicService(
@Throws(Exception::class) @Throws(Exception::class)
override fun getStarred(): SearchResult { override fun getStarred(): SearchResult {
val response = API.getStarred(null).execute() val response = API.getStarred(null).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.starred.toDomainEntity() return response.body()!!.starred.toDomainEntity()
} }
@Throws(Exception::class) @Throws(Exception::class)
override fun getStarred2(): SearchResult { override fun getStarred2(): SearchResult {
val response = API.getStarred2(null).execute() val response = API.getStarred2(null).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.starred2.toDomainEntity() return response.body()!!.starred2.toDomainEntity()
} }
@ -543,9 +516,7 @@ open class RESTMusicService(
ids: List<String>? ids: List<String>?
): JukeboxStatus { ): JukeboxStatus {
val response = API.jukeboxControl(JukeboxAction.SET, null, null, ids, null) val response = API.jukeboxControl(JukeboxAction.SET, null, null, ids, null)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.jukebox.toDomainEntity() return response.body()!!.jukebox.toDomainEntity()
} }
@ -556,9 +527,7 @@ open class RESTMusicService(
offsetSeconds: Int offsetSeconds: Int
): JukeboxStatus { ): JukeboxStatus {
val response = API.jukeboxControl(JukeboxAction.SKIP, index, offsetSeconds, null, null) val response = API.jukeboxControl(JukeboxAction.SKIP, index, offsetSeconds, null, null)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.jukebox.toDomainEntity() return response.body()!!.jukebox.toDomainEntity()
} }
@ -566,9 +535,7 @@ open class RESTMusicService(
@Throws(Exception::class) @Throws(Exception::class)
override fun stopJukebox(): JukeboxStatus { override fun stopJukebox(): JukeboxStatus {
val response = API.jukeboxControl(JukeboxAction.STOP, null, null, null, null) val response = API.jukeboxControl(JukeboxAction.STOP, null, null, null, null)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.jukebox.toDomainEntity() return response.body()!!.jukebox.toDomainEntity()
} }
@ -576,9 +543,7 @@ open class RESTMusicService(
@Throws(Exception::class) @Throws(Exception::class)
override fun startJukebox(): JukeboxStatus { override fun startJukebox(): JukeboxStatus {
val response = API.jukeboxControl(JukeboxAction.START, null, null, null, null) val response = API.jukeboxControl(JukeboxAction.START, null, null, null, null)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.jukebox.toDomainEntity() return response.body()!!.jukebox.toDomainEntity()
} }
@ -586,9 +551,7 @@ open class RESTMusicService(
@Throws(Exception::class) @Throws(Exception::class)
override fun getJukeboxStatus(): JukeboxStatus { override fun getJukeboxStatus(): JukeboxStatus {
val response = API.jukeboxControl(JukeboxAction.STATUS, null, null, null, null) val response = API.jukeboxControl(JukeboxAction.STATUS, null, null, null, null)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.jukebox.toDomainEntity() return response.body()!!.jukebox.toDomainEntity()
} }
@ -598,9 +561,7 @@ open class RESTMusicService(
gain: Float gain: Float
): JukeboxStatus { ): JukeboxStatus {
val response = API.jukeboxControl(JukeboxAction.SET_GAIN, null, null, null, gain) val response = API.jukeboxControl(JukeboxAction.SET_GAIN, null, null, null, gain)
.execute() .execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.jukebox.toDomainEntity() return response.body()!!.jukebox.toDomainEntity()
} }
@ -609,8 +570,7 @@ open class RESTMusicService(
override fun getShares( override fun getShares(
refresh: Boolean refresh: Boolean
): List<Share> { ): List<Share> {
val response = API.getShares().execute() val response = API.getShares().execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.shares.toDomainEntitiesList() return response.body()!!.shares.toDomainEntitiesList()
} }
@ -619,8 +579,7 @@ open class RESTMusicService(
override fun getGenres( override fun getGenres(
refresh: Boolean refresh: Boolean
): List<Genre>? { ): List<Genre>? {
val response = API.getGenres().execute() val response = API.getGenres().execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.genresList.toDomainEntityList() return response.body()!!.genresList.toDomainEntityList()
} }
@ -631,8 +590,7 @@ open class RESTMusicService(
count: Int, count: Int,
offset: Int offset: Int
): MusicDirectory { ): MusicDirectory {
val response = API.getSongsByGenre(genre, count, offset, null).execute() val response = API.getSongsByGenre(genre, count, offset, null).execute().throwOnFailure()
response.throwOnFailure()
val result = MusicDirectory() val result = MusicDirectory()
result.addAll(response.body()!!.songsList.toDomainEntityList()) result.addAll(response.body()!!.songsList.toDomainEntityList())
@ -644,9 +602,7 @@ open class RESTMusicService(
override fun getUser( override fun getUser(
username: String username: String
): UserInfo { ): UserInfo {
val response = API.getUser(username).execute() val response = API.getUser(username).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.user.toDomainEntity() return response.body()!!.user.toDomainEntity()
} }
@ -655,9 +611,7 @@ open class RESTMusicService(
override fun getChatMessages( override fun getChatMessages(
since: Long? since: Long?
): List<ChatMessage> { ): List<ChatMessage> {
val response = API.getChatMessages(since).execute() val response = API.getChatMessages(since).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.chatMessages.toDomainEntitiesList() return response.body()!!.chatMessages.toDomainEntitiesList()
} }
@ -671,8 +625,7 @@ open class RESTMusicService(
@Throws(Exception::class) @Throws(Exception::class)
override fun getBookmarks(): List<Bookmark> { override fun getBookmarks(): List<Bookmark> {
val response = API.getBookmarks().execute() val response = API.getBookmarks().execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.bookmarkList.toDomainEntitiesList() return response.body()!!.bookmarkList.toDomainEntitiesList()
} }
@ -696,8 +649,7 @@ open class RESTMusicService(
override fun getVideos( override fun getVideos(
refresh: Boolean refresh: Boolean
): MusicDirectory { ): MusicDirectory {
val response = API.getVideos().execute() val response = API.getVideos().execute().throwOnFailure()
response.throwOnFailure()
val musicDirectory = MusicDirectory() val musicDirectory = MusicDirectory()
musicDirectory.addAll(response.body()!!.videosList.toDomainEntityList()) musicDirectory.addAll(response.body()!!.videosList.toDomainEntityList())
@ -711,8 +663,7 @@ open class RESTMusicService(
description: String?, description: String?,
expires: Long? expires: Long?
): List<Share> { ): List<Share> {
val response = API.createShare(ids, description, expires).execute() val response = API.createShare(ids, description, expires).execute().throwOnFailure()
response.throwOnFailure()
return response.body()!!.shares.toDomainEntitiesList() return response.body()!!.shares.toDomainEntitiesList()
} }