[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) val j = ApiClient.api!!.queryVideoClasses(klass, token)
for(it in j) for(it in j)
{ {
if(filter.contains(it))
continue
try { try {
callback(queryVideo(klass, it)!!) callback(queryVideo(klass, it)!!)
}catch (e: Exception) }catch (e: Exception)

View File

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