From 61fdb116add83720bb4f68e723e6b7df6cc96eeb Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Sat, 11 Jul 2020 16:56:09 +0200 Subject: [PATCH] Fixed an issue where favorited tracks would not show up erroneously in track lists. --- .../github/apognu/otter/activities/MainActivity.kt | 7 +++---- .../github/apognu/otter/fragments/TracksFragment.kt | 9 ++++++++- .../apognu/otter/repositories/FavoritesRepository.kt | 12 ++++++++++-- .../apognu/otter/repositories/TracksRepository.kt | 2 +- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt b/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt index bb7b56b..af09cce 100644 --- a/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt +++ b/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt @@ -43,7 +43,6 @@ import kotlinx.coroutines.Dispatchers.Default import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -53,7 +52,7 @@ class MainActivity : AppCompatActivity() { } private val favoriteRepository = FavoritesRepository(this) - private val favoriteCheckRepository = FavoritedRepository(this) + private val favoritedRepository = FavoritedRepository(this) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -78,7 +77,7 @@ class MainActivity : AppCompatActivity() { override fun onResume() { super.onResume() - favoriteCheckRepository.fetch().map { Cache.set(this, favoriteCheckRepository.cacheId, Gson().toJson(favoriteCheckRepository.cache(it.data)).toByteArray()) } + favoritedRepository.update(this, lifecycleScope) startService(Intent(this, PlayerService::class.java)) DownloadService.start(this, PinService::class.java) @@ -427,7 +426,7 @@ class MainActivity : AppCompatActivity() { } now_playing_details_favorite?.let { now_playing_details_favorite -> - favoriteCheckRepository.fetch().untilNetwork(lifecycleScope, IO) { favorites, _, _, _ -> + favoritedRepository.fetch().untilNetwork(lifecycleScope, IO) { favorites, _, _, _ -> lifecycleScope.launch(Main) { track.favorite = favorites.contains(track.id) 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 178362f..077f975 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 @@ -9,6 +9,7 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import com.github.apognu.otter.R import com.github.apognu.otter.adapters.TracksAdapter +import com.github.apognu.otter.repositories.FavoritedRepository import com.github.apognu.otter.repositories.FavoritesRepository import com.github.apognu.otter.repositories.TracksRepository import com.github.apognu.otter.utils.* @@ -27,6 +28,7 @@ class TracksFragment : OtterFragment() { override val recycler: RecyclerView get() = tracks lateinit var favoritesRepository: FavoritesRepository + lateinit var favoritedRepository: FavoritedRepository private var albumId = 0 private var albumArtist = "" @@ -59,6 +61,7 @@ class TracksFragment : OtterFragment() { adapter = TracksAdapter(context, FavoriteListener()) repository = TracksRepository(context, albumId) favoritesRepository = FavoritesRepository(context) + favoritedRepository = FavoritedRepository(context) watchEventBus() } @@ -147,7 +150,10 @@ class TracksFragment : OtterFragment() { lifecycleScope.launch(Main) { CommandBus.get().collect { command -> when (command) { - is Command.RefreshTrack -> refreshCurrentTrack(command.track) + is Command.RefreshTrack -> { + log("${command.track?.title} -> ${command.track?.favorite}") + refreshCurrentTrack(command.track) + } } } } @@ -185,6 +191,7 @@ class TracksFragment : OtterFragment() { adapter.currentTrack = track.apply { current = true } + 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 960d39a..c72ab56 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 @@ -1,6 +1,7 @@ package com.github.apognu.otter.repositories import android.content.Context +import androidx.lifecycle.lifecycleScope import com.github.apognu.otter.Otter import com.github.apognu.otter.utils.* import com.github.kittinunf.fuel.Fuel @@ -8,6 +9,7 @@ import com.github.kittinunf.fuel.coroutines.awaitByteArrayResponseResult import com.github.kittinunf.fuel.gson.gsonDeserializerOf import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch @@ -55,7 +57,7 @@ class FavoritesRepository(override val context: Context?) : Repository) = FavoritedCache(data) override fun uncache(reader: BufferedReader) = gsonDeserializerOf(FavoritedCache::class.java).deserialize(reader) + + fun update(context: Context?, scope: CoroutineScope) { + fetch(Origin.Network.origin).untilNetwork(scope, IO) { favorites, _, _, _ -> + Cache.set(context, cacheId, Gson().toJson(cache(favorites)).toByteArray()) + } + } } 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 27c3531..ddc6d2c 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 @@ -38,7 +38,7 @@ class TracksRepository(override val context: Context?, albumId: Int) : Repositor } override fun onDataFetched(data: List): List = runBlocking { - val favorites = FavoritedRepository(context).fetch(Origin.Network.origin) + val favorites = FavoritedRepository(context).fetch(Origin.Cache.origin) .map { it.data } .toList() .flatten()