Fix performance issue on download tracking from the Favorites section.
This commit is contained in:
parent
a2c35595c7
commit
abff279df9
|
@ -7,11 +7,14 @@ import com.github.apognu.otter.adapters.FavoritesAdapter
|
||||||
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.*
|
||||||
|
import com.google.android.exoplayer2.offline.Download
|
||||||
import kotlinx.android.synthetic.main.fragment_favorites.*
|
import kotlinx.android.synthetic.main.fragment_favorites.*
|
||||||
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.flow.collect
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class FavoritesFragment : FunkwhaleFragment<Track, FavoritesAdapter>() {
|
class FavoritesFragment : FunkwhaleFragment<Track, FavoritesAdapter>() {
|
||||||
override val viewRes = R.layout.fragment_favorites
|
override val viewRes = R.layout.fragment_favorites
|
||||||
|
@ -29,11 +32,15 @@ class FavoritesFragment : FunkwhaleFragment<Track, FavoritesAdapter>() {
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
GlobalScope.launch(Main) {
|
GlobalScope.launch(IO) {
|
||||||
RequestBus.send(Request.GetCurrentTrack).wait<Response.CurrentTrack>()?.let { response ->
|
RequestBus.send(Request.GetCurrentTrack).wait<Response.CurrentTrack>()?.let { response ->
|
||||||
adapter.currentTrack = response.track
|
withContext(Main) {
|
||||||
adapter.notifyDataSetChanged()
|
adapter.currentTrack = response.track
|
||||||
|
adapter.notifyDataSetChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
refreshDownloadedTracks()
|
||||||
}
|
}
|
||||||
|
|
||||||
play.setOnClickListener {
|
play.setOnClickListener {
|
||||||
|
@ -47,15 +54,32 @@ class FavoritesFragment : FunkwhaleFragment<Track, FavoritesAdapter>() {
|
||||||
when (message) {
|
when (message) {
|
||||||
is Event.TrackPlayed -> refreshCurrentTrack()
|
is Event.TrackPlayed -> refreshCurrentTrack()
|
||||||
is Event.RefreshTrack -> refreshCurrentTrack()
|
is Event.RefreshTrack -> refreshCurrentTrack()
|
||||||
is Event.DownloadChanged -> {
|
is Event.DownloadChanged -> refreshDownloadedTrack(message.download)
|
||||||
val downloaded = TracksRepository.getDownloadedIds() ?: listOf()
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
adapter.data = adapter.data.map {
|
private suspend fun refreshDownloadedTracks() {
|
||||||
it.downloaded = downloaded.contains(it.id)
|
val downloaded = TracksRepository.getDownloadedIds() ?: listOf()
|
||||||
it
|
|
||||||
}.toMutableList()
|
|
||||||
|
|
||||||
adapter.notifyDataSetChanged()
|
withContext(Main) {
|
||||||
|
adapter.data = adapter.data.map {
|
||||||
|
it.downloaded = downloaded.contains(it.id)
|
||||||
|
it
|
||||||
|
}.toMutableList()
|
||||||
|
|
||||||
|
adapter.notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun refreshDownloadedTrack(download: Download) {
|
||||||
|
if (download.state == Download.STATE_COMPLETED) {
|
||||||
|
download.getMetadata()?.let { info ->
|
||||||
|
adapter.data.withIndex().associate { it.value to it.index }.filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match ->
|
||||||
|
withContext(Main) {
|
||||||
|
adapter.data[match.second].downloaded = true
|
||||||
|
adapter.notifyItemChanged(match.second)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue