From 94fd3d51aa4c9972fccaaadab0aafdfcebcfe54e Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Sat, 13 Jun 2020 19:50:02 +0200 Subject: [PATCH] Add downloaded indicators in favorites view. --- .../apognu/otter/adapters/FavoritesAdapter.kt | 6 +++ .../otter/fragments/FavoritesFragment.kt | 11 ++++++ .../apognu/otter/fragments/TracksFragment.kt | 14 +++---- .../otter/repositories/FavoritesRepository.kt | 12 ++++-- .../otter/repositories/TracksRepository.kt | 38 ++++++++++--------- 5 files changed, 52 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/github/apognu/otter/adapters/FavoritesAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/FavoritesAdapter.kt index 09031f9..4b82f9f 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/FavoritesAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/FavoritesAdapter.kt @@ -74,6 +74,11 @@ class FavoritesAdapter(private val context: Context?, private val favoriteListen false -> holder.favorite.setColorFilter(context.getColor(R.color.colorSelected)) } + when (favorite.downloaded) { + true -> holder.title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.downloaded, 0, 0, 0) + false -> holder.title.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0) + } + holder.favorite.setOnClickListener { favoriteListener.onToggleFavorite(favorite.id, !favorite.favorite) @@ -91,6 +96,7 @@ class FavoritesAdapter(private val context: Context?, private val favoriteListen when (it.itemId) { R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(favorite))) R.id.track_play_next -> CommandBus.send(Command.PlayNext(favorite)) + R.id.track_pin -> CommandBus.send(Command.PinTrack(favorite)) R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(favorite)) } diff --git a/app/src/main/java/com/github/apognu/otter/fragments/FavoritesFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/FavoritesFragment.kt index 3a1c529..fe8479e 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/FavoritesFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/FavoritesFragment.kt @@ -5,6 +5,7 @@ import androidx.recyclerview.widget.RecyclerView import com.github.apognu.otter.R import com.github.apognu.otter.adapters.FavoritesAdapter import com.github.apognu.otter.repositories.FavoritesRepository +import com.github.apognu.otter.repositories.TracksRepository import com.github.apognu.otter.utils.* import kotlinx.android.synthetic.main.fragment_favorites.* import kotlinx.coroutines.Dispatchers.Main @@ -46,6 +47,16 @@ class FavoritesFragment : FunkwhaleFragment() { when (message) { is Event.TrackPlayed -> refreshCurrentTrack() is Event.RefreshTrack -> refreshCurrentTrack() + is Event.DownloadChanged -> { + val downloaded = TracksRepository.getDownloadedIds() ?: listOf() + + adapter.data = adapter.data.map { + it.downloaded = downloaded.contains(it.id) + it + }.toMutableList() + + adapter.notifyDataSetChanged() + } } } } diff --git a/app/src/main/java/com/github/apognu/otter/fragments/TracksFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/TracksFragment.kt index c18538d..87a7506 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/TracksFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/TracksFragment.kt @@ -123,16 +123,14 @@ class TracksFragment : FunkwhaleFragment() { is Event.TrackPlayed -> refreshCurrentTrack() is Event.RefreshTrack -> refreshCurrentTrack() is Event.DownloadChanged -> { - (repository as? TracksRepository)?.let { repository -> - val downloaded = repository.getDownloadedIds() ?: listOf() + val downloaded = TracksRepository.getDownloadedIds() ?: listOf() - adapter.data = adapter.data.map { - it.downloaded = downloaded.contains(it.id) - it - }.toMutableList() + adapter.data = adapter.data.map { + it.downloaded = downloaded.contains(it.id) + it + }.toMutableList() - adapter.notifyDataSetChanged() - } + adapter.notifyDataSetChanged() } } } diff --git a/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt b/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt index 6a13295..b2db91e 100644 --- a/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt +++ b/app/src/main/java/com/github/apognu/otter/repositories/FavoritesRepository.kt @@ -10,6 +10,7 @@ import com.google.gson.reflect.TypeToken import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import java.io.BufferedReader class FavoritesRepository(override val context: Context?) : Repository() { @@ -19,9 +20,14 @@ class FavoritesRepository(override val context: Context?) : Repository) = TracksCache(data) override fun uncache(reader: BufferedReader) = gsonDeserializerOf(TracksCache::class.java).deserialize(reader) - override fun onDataFetched(data: List) = data.map { - it.favorite = true - it + override fun onDataFetched(data: List): List = runBlocking { + val downloaded = TracksRepository.getDownloadedIds() ?: listOf() + + data.map { track -> + track.favorite = true + track.downloaded = downloaded.contains(track.id) + track + } } fun addFavorite(id: Int) { diff --git a/app/src/main/java/com/github/apognu/otter/repositories/TracksRepository.kt b/app/src/main/java/com/github/apognu/otter/repositories/TracksRepository.kt index 6e596cb..252d532 100644 --- a/app/src/main/java/com/github/apognu/otter/repositories/TracksRepository.kt +++ b/app/src/main/java/com/github/apognu/otter/repositories/TracksRepository.kt @@ -18,6 +18,26 @@ class TracksRepository(override val context: Context?, albumId: Int) : Repositor override fun cache(data: List) = TracksCache(data) override fun uncache(reader: BufferedReader) = gsonDeserializerOf(TracksCache::class.java).deserialize(reader) + companion object { + suspend fun getDownloadedIds(): List? { + return RequestBus.send(Request.GetDownloads).wait()?.let { response -> + val ids: MutableList = mutableListOf() + + while (response.cursor.moveToNext()) { + val download = response.cursor.download + + Gson().fromJson(String(download.request.data), DownloadInfo::class.java)?.let { + if (download.state == Download.STATE_COMPLETED) { + ids.add(it.id) + } + } + } + + ids + } + } + } + override fun onDataFetched(data: List): List = runBlocking { val favorites = FavoritedRepository(context).fetch(Origin.Network.origin) .map { it.data } @@ -32,22 +52,4 @@ class TracksRepository(override val context: Context?, albumId: Int) : Repositor track }.sortedBy { it.position } } - - suspend fun getDownloadedIds(): List? { - return RequestBus.send(Request.GetDownloads).wait()?.let { response -> - val ids: MutableList = mutableListOf() - - while (response.cursor.moveToNext()) { - val download = response.cursor.download - - Gson().fromJson(String(download.request.data), DownloadInfo::class.java)?.let { - if (download.state == Download.STATE_COMPLETED) { - ids.add(it.id) - } - } - } - - ids - } - } } \ No newline at end of file