[fix] Repeatedly adding video cards when switching lists

This commit is contained in:
acite
2025-08-28 01:09:04 +08:00
parent e249ae27c9
commit 06ada999c3
2 changed files with 14 additions and 5 deletions

View File

@@ -23,11 +23,13 @@ object MediaManager
}
}
suspend fun listVideos(klass: String, callback: (Video) -> Unit)
suspend fun listVideos(klass: String, filter: List<String>, callback: (Video) -> Unit)
{
val j = ApiClient.api!!.queryVideoClasses(klass, token)
for(it in j)
{
if(filter.contains(it))
continue
try {
callback(queryVideo(klass, it)!!)
}catch (e: Exception)

View File

@@ -34,6 +34,7 @@ class VideoScreenViewModel(application: Application) : AndroidViewModel(applicat
val classesMap = mutableStateMapOf<String, SnapshotStateList<Video>>()
var imageLoader: ImageLoader? = null;
val updatingMap: MutableMap<Int, Boolean> = mutableMapOf()
@Composable
fun SetupClient()
@@ -48,12 +49,14 @@ class VideoScreenViewModel(application: Application) : AndroidViewModel(applicat
suspend fun init() {
classes.addAll(MediaManager.listVideoKlasses())
var i = 0
for(it in classes)
{
updatingMap[i++] = false
classesMap[it] = mutableStateListOf<Video>()
}
MediaManager.listVideos(classes[0]){
updatingMap[0] = true
MediaManager.listVideos(classes[0], listOf()){
v -> classesMap[classes[0]]?.insertInNaturalOrder(v)
}
}
@@ -63,10 +66,14 @@ class VideoScreenViewModel(application: Application) : AndroidViewModel(applicat
viewModelScope.launch()
{
_tabIndex.intValue = index;
if(updatingMap[index] == true) return@launch
MediaManager.listVideos(classes[index])
updatingMap[index] = true
MediaManager.listVideos(classes[index], (classesMap[classes[index]]?:listOf()).map{ it.id })
{
v -> classesMap[classes[index]]?.insertInNaturalOrder(v)
v ->
if(classesMap[classes[index]]?.contains(v) == false)
classesMap[classes[index]]?.insertInNaturalOrder(v)
}
}
}