Fixed an issue where favorited tracks would not show up erroneously in track lists.
This commit is contained in:
parent
d75e8ae17f
commit
61fdb116ad
|
@ -43,7 +43,6 @@ import kotlinx.coroutines.Dispatchers.Default
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import kotlinx.coroutines.flow.collect
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.flow.map
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
|
@ -53,7 +52,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private val favoriteRepository = FavoritesRepository(this)
|
private val favoriteRepository = FavoritesRepository(this)
|
||||||
private val favoriteCheckRepository = FavoritedRepository(this)
|
private val favoritedRepository = FavoritedRepository(this)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -78,7 +77,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.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))
|
startService(Intent(this, PlayerService::class.java))
|
||||||
DownloadService.start(this, PinService::class.java)
|
DownloadService.start(this, PinService::class.java)
|
||||||
|
@ -427,7 +426,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
now_playing_details_favorite?.let { now_playing_details_favorite ->
|
now_playing_details_favorite?.let { now_playing_details_favorite ->
|
||||||
favoriteCheckRepository.fetch().untilNetwork(lifecycleScope, IO) { favorites, _, _, _ ->
|
favoritedRepository.fetch().untilNetwork(lifecycleScope, IO) { favorites, _, _, _ ->
|
||||||
lifecycleScope.launch(Main) {
|
lifecycleScope.launch(Main) {
|
||||||
track.favorite = favorites.contains(track.id)
|
track.favorite = favorites.contains(track.id)
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.github.apognu.otter.R
|
import com.github.apognu.otter.R
|
||||||
import com.github.apognu.otter.adapters.TracksAdapter
|
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.FavoritesRepository
|
||||||
import com.github.apognu.otter.repositories.TracksRepository
|
import com.github.apognu.otter.repositories.TracksRepository
|
||||||
import com.github.apognu.otter.utils.*
|
import com.github.apognu.otter.utils.*
|
||||||
|
@ -27,6 +28,7 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() {
|
||||||
override val recycler: RecyclerView get() = tracks
|
override val recycler: RecyclerView get() = tracks
|
||||||
|
|
||||||
lateinit var favoritesRepository: FavoritesRepository
|
lateinit var favoritesRepository: FavoritesRepository
|
||||||
|
lateinit var favoritedRepository: FavoritedRepository
|
||||||
|
|
||||||
private var albumId = 0
|
private var albumId = 0
|
||||||
private var albumArtist = ""
|
private var albumArtist = ""
|
||||||
|
@ -59,6 +61,7 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() {
|
||||||
adapter = TracksAdapter(context, FavoriteListener())
|
adapter = TracksAdapter(context, FavoriteListener())
|
||||||
repository = TracksRepository(context, albumId)
|
repository = TracksRepository(context, albumId)
|
||||||
favoritesRepository = FavoritesRepository(context)
|
favoritesRepository = FavoritesRepository(context)
|
||||||
|
favoritedRepository = FavoritedRepository(context)
|
||||||
|
|
||||||
watchEventBus()
|
watchEventBus()
|
||||||
}
|
}
|
||||||
|
@ -147,7 +150,10 @@ class TracksFragment : OtterFragment<Track, TracksAdapter>() {
|
||||||
lifecycleScope.launch(Main) {
|
lifecycleScope.launch(Main) {
|
||||||
CommandBus.get().collect { command ->
|
CommandBus.get().collect { command ->
|
||||||
when (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<Track, TracksAdapter>() {
|
||||||
adapter.currentTrack = track.apply {
|
adapter.currentTrack = track.apply {
|
||||||
current = true
|
current = true
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.github.apognu.otter.repositories
|
package com.github.apognu.otter.repositories
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.github.apognu.otter.Otter
|
import com.github.apognu.otter.Otter
|
||||||
import com.github.apognu.otter.utils.*
|
import com.github.apognu.otter.utils.*
|
||||||
import com.github.kittinunf.fuel.Fuel
|
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.github.kittinunf.fuel.gson.gsonDeserializerOf
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -55,7 +57,7 @@ class FavoritesRepository(override val context: Context?) : Repository<Track, Tr
|
||||||
.body(Gson().toJson(body))
|
.body(Gson().toJson(body))
|
||||||
.awaitByteArrayResponseResult()
|
.awaitByteArrayResponseResult()
|
||||||
|
|
||||||
favoritedRepository.fetch().map { Cache.set(context, favoritedRepository.cacheId, Gson().toJson(favoritedRepository.cache(it.data)).toByteArray()) }
|
favoritedRepository.update(context, scope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +76,7 @@ class FavoritesRepository(override val context: Context?) : Repository<Track, Tr
|
||||||
.body(Gson().toJson(body))
|
.body(Gson().toJson(body))
|
||||||
.awaitByteArrayResponseResult()
|
.awaitByteArrayResponseResult()
|
||||||
|
|
||||||
favoritedRepository.fetch().map { Cache.set(context, favoritedRepository.cacheId, Gson().toJson(favoritedRepository.cache(it.data)).toByteArray()) }
|
favoritedRepository.update(context, scope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,4 +87,10 @@ class FavoritedRepository(override val context: Context?) : Repository<Int, Favo
|
||||||
|
|
||||||
override fun cache(data: List<Int>) = FavoritedCache(data)
|
override fun cache(data: List<Int>) = FavoritedCache(data)
|
||||||
override fun uncache(reader: BufferedReader) = gsonDeserializerOf(FavoritedCache::class.java).deserialize(reader)
|
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())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ class TracksRepository(override val context: Context?, albumId: Int) : Repositor
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDataFetched(data: List<Track>): List<Track> = runBlocking {
|
override fun onDataFetched(data: List<Track>): List<Track> = runBlocking {
|
||||||
val favorites = FavoritedRepository(context).fetch(Origin.Network.origin)
|
val favorites = FavoritedRepository(context).fetch(Origin.Cache.origin)
|
||||||
.map { it.data }
|
.map { it.data }
|
||||||
.toList()
|
.toList()
|
||||||
.flatten()
|
.flatten()
|
||||||
|
|
Loading…
Reference in New Issue