PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewFetcher.kt

49 lines
1.5 KiB
Kotlin

package code.name.monkey.retromusic.glide.playlistPreview
import android.content.Context
import android.graphics.Bitmap
import code.name.monkey.retromusic.util.AutoGeneratedPlaylistBitmap
import com.bumptech.glide.Priority
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.data.DataFetcher
import kotlinx.coroutines.*
import java.util.concurrent.Executors
class PlaylistPreviewFetcher(val context: Context, private val playlistPreview: PlaylistPreview) :
DataFetcher<Bitmap>, CoroutineScope by GlideScope() {
override fun loadData(priority: Priority, callback: DataFetcher.DataCallback<in Bitmap>) {
launch {
try {
val bitmap =
AutoGeneratedPlaylistBitmap.getBitmap(
context,
playlistPreview.songs.shuffled()
)
callback.onDataReady(bitmap)
} catch (e: Exception) {
callback.onLoadFailed(e)
}
}
}
override fun cleanup() {}
override fun cancel() {
cancel(null)
}
override fun getDataClass(): Class<Bitmap> {
return Bitmap::class.java
}
override fun getDataSource(): DataSource {
return DataSource.LOCAL
}
}
private val glideDispatcher: CoroutineDispatcher by lazy {
Executors.newFixedThreadPool(4).asCoroutineDispatcher()
}
@Suppress("FunctionName")
internal fun GlideScope(): CoroutineScope = CoroutineScope(SupervisorJob() + glideDispatcher)