Removed AlbumArtModel.AlbumArtCallback; use plain-old-lambdas instead!

This commit is contained in:
casey langen 2017-06-23 17:29:58 -07:00
parent 97af88ee15
commit 5cbfdb6458
3 changed files with 30 additions and 39 deletions

View File

@ -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()
}

View File

@ -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<Int, String>(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() }
}
}
}

View File

@ -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<String, GlideDrawable> {
override fun onException(e: Exception, model: String, target: Target<GlideDrawable>, first: Boolean): Boolean {
override fun onException(
e: Exception, model: String, target: Target<GlideDrawable>,
first: Boolean): Boolean {
setMetadataDisplayMode(DisplayMode.NoArtwork)
lastArtworkUrl = null
return false
}
override fun onResourceReady(resource: GlideDrawable, model: String, target: Target<GlideDrawable>, memory: Boolean, first: Boolean): Boolean {
override fun onResourceReady(
resource: GlideDrawable, model: String, target: Target<GlideDrawable>,
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()
}
}
}