Fixed issue #7 to display all search results properly.
This commit is contained in:
parent
657c72480e
commit
22c99d384c
|
@ -256,7 +256,7 @@ class MainActivity : AppCompatActivity() {
|
|||
.centerCrop()
|
||||
.into(now_playing_details_cover)
|
||||
|
||||
favoriteCheckRepository.fetch().untilNetwork(IO) { favorites, _ ->
|
||||
favoriteCheckRepository.fetch().untilNetwork(IO) { favorites, _, _ ->
|
||||
GlobalScope.launch(Main) {
|
||||
track.favorite = favorites.contains(track.id)
|
||||
|
||||
|
|
|
@ -44,16 +44,16 @@ class SearchActivity : AppCompatActivity() {
|
|||
adapter.data.clear()
|
||||
adapter.notifyDataSetChanged()
|
||||
|
||||
repository.fetch(Repository.Origin.Network.origin).untilNetwork { tracks, _ ->
|
||||
repository.fetch(Repository.Origin.Network.origin).untilNetwork { tracks, _, _ ->
|
||||
search_spinner.visibility = View.GONE
|
||||
search_empty.visibility = View.GONE
|
||||
|
||||
when (tracks.isEmpty()) {
|
||||
true -> search_no_results.visibility = View.VISIBLE
|
||||
false -> adapter.data = tracks.toMutableList()
|
||||
false -> adapter.data.addAll(tracks)
|
||||
}
|
||||
|
||||
adapter.notifyDataSetChanged()
|
||||
adapter.notifyItemRangeInserted(adapter.data.size, tracks.size)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,6 @@ class SearchActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
override fun onQueryTextChange(newText: String?) = true
|
||||
|
||||
})
|
||||
}
|
||||
}
|
|
@ -75,7 +75,13 @@ abstract class FunkwhaleFragment<D : Any, A : FunkwhaleAdapter<D, *>> : Fragment
|
|||
adapter.data.clear()
|
||||
}
|
||||
|
||||
repository.fetch(upstreams, size).untilNetwork(IO) { data, hasMore ->
|
||||
repository.fetch(upstreams, size).untilNetwork(IO) { data, isCache, hasMore ->
|
||||
if (isCache) {
|
||||
adapter.data = data.toMutableList()
|
||||
|
||||
return@untilNetwork
|
||||
}
|
||||
|
||||
onDataFetched(data)
|
||||
|
||||
if (!hasMore) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.github.apognu.otter.repositories
|
|||
import android.content.Context
|
||||
import com.github.apognu.otter.utils.Cache
|
||||
import com.github.apognu.otter.utils.CacheItem
|
||||
import com.github.apognu.otter.utils.log
|
||||
import com.github.apognu.otter.utils.untilNetwork
|
||||
import com.google.gson.Gson
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
|
@ -60,17 +61,9 @@ abstract class Repository<D : Any, C : CacheItem<D>> {
|
|||
}
|
||||
|
||||
private fun fromNetwork(size: Int) {
|
||||
upstream.fetch(size)?.untilNetwork(IO) { data, hasMore ->
|
||||
upstream.fetch(size)?.untilNetwork(IO) { data, _, hasMore ->
|
||||
val data = onDataFetched(data)
|
||||
|
||||
cacheId?.let { cacheId ->
|
||||
Cache.set(
|
||||
context,
|
||||
cacheId,
|
||||
Gson().toJson(cache(data)).toByteArray()
|
||||
)
|
||||
}
|
||||
|
||||
channel.offer(Response(Origin.Network, data, hasMore))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,10 +28,10 @@ inline fun <D> Channel<Repository.Response<D>>.await(context: CoroutineContext =
|
|||
}
|
||||
}
|
||||
|
||||
inline fun <D> Channel<Repository.Response<D>>.untilNetwork(context: CoroutineContext = Main, crossinline callback: (data: List<D>, hasMore: Boolean) -> Unit) {
|
||||
inline fun <D> Channel<Repository.Response<D>>.untilNetwork(context: CoroutineContext = Main, crossinline callback: (data: List<D>, isCache: Boolean, hasMore: Boolean) -> Unit) {
|
||||
GlobalScope.launch(context) {
|
||||
for (data in this@untilNetwork) {
|
||||
callback(data.data, data.hasMore)
|
||||
callback(data.data, data.origin == Repository.Origin.Cache, data.hasMore)
|
||||
|
||||
if (data.origin == Repository.Origin.Network && !data.hasMore) {
|
||||
close()
|
||||
|
|
Loading…
Reference in New Issue