diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/playback/SystemService.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/playback/SystemService.kt index 57ac30177..f60f93d72 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/playback/SystemService.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/playback/SystemService.kt @@ -203,8 +203,8 @@ class SystemService : Service() { private fun downloadAlbumArt(title: String, artist: String, album: String, duration: Int) { recycleAlbumArt() - albumArtModel = AlbumArtModel(title, artist, album, AlbumArtModel.Size.Mega, object: AlbumArtModel.AlbumArtCallback { - override fun onFinished(model: AlbumArtModel, url: String?) { + albumArtModel = AlbumArtModel(title, artist, album, AlbumArtModel.Size.Mega) { + _: AlbumArtModel, url: String? -> if (albumArtModel.matches(artist, album)) { handler.post { if (albumArtRequest != null && albumArtRequest?.request != null) { @@ -227,8 +227,7 @@ class SystemService : Service() { }) } } - } - }) + } albumArtModel.fetch() } diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/model/AlbumArtModel.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/model/AlbumArtModel.kt index 7bdd7fd6e..10f371954 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/model/AlbumArtModel.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/model/AlbumArtModel.kt @@ -15,10 +15,9 @@ import java.util.regex.Pattern class AlbumArtModel(val track: String, private val artist: String = "", private val album: String = "", - desiredSize: AlbumArtModel.Size, - callback: AlbumArtModel.AlbumArtCallback?) + private val desiredSize: AlbumArtModel.Size, + private var callback: ((AlbumArtModel, String?) -> Unit)? = null) { - private var callback: AlbumArtCallback? = null private var fetching: Boolean = false private var noart: Boolean = false @@ -61,17 +60,13 @@ class AlbumArtModel(val track: String, this.album.equals(album, ignoreCase = true) } - interface AlbumArtCallback { /* TODO: remove this after converting everything to Kotlin */ - fun onFinished(model: AlbumArtModel, url: String?) - } - @Synchronized fun fetch(): AlbumArtModel { if (this.fetching || this.noart) { return this } if (!Strings.empty(this.url)) { - callback?.onFinished(this, this.url) + callback?.invoke(this, this.url) } else if (Strings.notEmpty(this.artist) && Strings.notEmpty(this.album)) { val requestUrl: String @@ -95,7 +90,7 @@ class AlbumArtModel(val track: String, OK_HTTP.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { fetching = false - callback?.onFinished(this@AlbumArtModel, null) + callback?.invoke(this@AlbumArtModel, null) } @Throws(IOException::class) @@ -120,7 +115,6 @@ class AlbumArtModel(val track: String, if (imageList.size > 0) { /* find the image with the closest to the requested size. exact match preferred. */ - val desiredSize = Size.Mega var closest = imageList[0] var lastDelta = Integer.MAX_VALUE for (check in imageList) { @@ -143,7 +137,7 @@ class AlbumArtModel(val track: String, fetching = false this@AlbumArtModel.url = closest.url - callback?.onFinished(this@AlbumArtModel, closest.url) + callback?.invoke(this@AlbumArtModel, closest.url) return } } @@ -154,12 +148,12 @@ class AlbumArtModel(val track: String, fetching = false } - callback?.onFinished(this@AlbumArtModel, null) + callback?.invoke(this@AlbumArtModel, null) } }) } else { - callback?.onFinished(this, null) + callback?.invoke(this, null) } return this @@ -175,10 +169,7 @@ class AlbumArtModel(val track: String, private var OK_HTTP: OkHttpClient private val URL_CACHE = LruCache(500) - private val DEFAULT_CALLBACK = object : AlbumArtCallback { - override fun onFinished(model: AlbumArtModel, url: String?) { - } - } + private val DEFAULT_CALLBACK: (AlbumArtModel, String?) -> Unit = { _, _ -> } init { OK_HTTP = OkHttpClient.Builder() @@ -223,7 +214,7 @@ class AlbumArtModel(val track: String, for (pattern in BAD_PATTERNS) { result = pattern.matcher(result).replaceAll("") } - return result.trim { it <= ' ' } + return result.trim { it.isWhitespace() } } } } diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/view/MainMetadataView.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/view/MainMetadataView.kt index 47a327e82..15e2190d8 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/view/MainMetadataView.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/view/MainMetadataView.kt @@ -27,7 +27,6 @@ import io.casey.musikcube.remote.ui.activity.AlbumBrowseActivity import io.casey.musikcube.remote.ui.activity.TrackListActivity import io.casey.musikcube.remote.ui.extension.getColorCompat import io.casey.musikcube.remote.ui.model.AlbumArtModel -import io.casey.musikcube.remote.ui.model.AlbumArtModel.AlbumArtCallback import io.casey.musikcube.remote.util.Strings import io.casey.musikcube.remote.websocket.Messages import io.casey.musikcube.remote.websocket.Prefs @@ -241,13 +240,17 @@ class MainMetadataView : FrameLayout { .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .listener(object : RequestListener { - override fun onException(e: Exception, model: String, target: Target, first: Boolean): Boolean { + override fun onException( + e: Exception, model: String, target: Target, + first: Boolean): Boolean { setMetadataDisplayMode(DisplayMode.NoArtwork) lastArtworkUrl = null return false } - override fun onResourceReady(resource: GlideDrawable, model: String, target: Target, memory: Boolean, first: Boolean): Boolean { + override fun onResourceReady( + resource: GlideDrawable, model: String, target: Target, + memory: Boolean, first: Boolean): Boolean { if (!isPaused) { preloadNextImage() } @@ -285,16 +288,15 @@ class MainMetadataView : FrameLayout { val album = track.optString(Metadata.Track.ALBUM, "") if (!albumArtModel.matches(artist, album)) { - AlbumArtModel("", artist, album, AlbumArtModel.Size.Mega, object: AlbumArtCallback { - override fun onFinished(model: AlbumArtModel, url: String?) { + AlbumArtModel("", artist, album, AlbumArtModel.Size.Mega) { + _: AlbumArtModel, url: String? -> val width = albumArtImageView!!.width val height = albumArtImageView!!.height Glide.with(context).load(url).downloadOnly(width, height) } - }) + } } } - } } private fun init() { @@ -353,16 +355,15 @@ class MainMetadataView : FrameLayout { override fun onInvalidPassword() {} } - private var albumArtRetrieved = object : AlbumArtCallback { - override fun onFinished(model: AlbumArtModel, url: String?) { - handler.post { - if (model === albumArtModel) { - if (Strings.empty(model.url)) { - setMetadataDisplayMode(DisplayMode.NoArtwork) - } - else { - updateAlbumArt() - } + private var albumArtRetrieved: (AlbumArtModel, String?) -> Unit = { + model: AlbumArtModel, _: String? -> + handler.post { + if (model === albumArtModel) { + if (Strings.empty(model.url)) { + setMetadataDisplayMode(DisplayMode.NoArtwork) + } + else { + updateAlbumArt() } } }