Keep selected Android originals while the catalog finishes loading
This commit is contained in:
1 parent
43c300cba3
commit
5b4b17ae49
1 file changed
+14
-10
+14
-10
@@ -42,19 +42,19 @@ fun AvatarViewerScreen(group: String?, owner: Long, name: String, onClose: () ->
|
||||
LaunchedEffect(account,revision) { if (account==0L) onClose() }
|
||||
LaunchedEffect(source?.first,source?.second?.avatarServer,source?.second?.avatarFile,retry) {
|
||||
val (channel,member)=source ?: return@LaunchedEffect
|
||||
files=listOf(member.avatarFile); if (selected !in files) selected=member.avatarFile
|
||||
if (selected.isEmpty()) selected=member.avatarFile
|
||||
if (files.isEmpty()) files=listOf(member.avatarFile)
|
||||
catalogFailed=false
|
||||
try { files=repository.catalog(channel,member) }
|
||||
try { files=repository.catalog(channel,member); if (selected !in files) selected=member.avatarFile }
|
||||
catch (e: CancellationException) { throw e }
|
||||
catch (e: Exception) { catalogFailed=true; LogManager.addLog("WARN","Avatar","Catalog failed owner=$owner: ${e.message}") }
|
||||
}
|
||||
val index=files.indexOf(selected)
|
||||
LaunchedEffect(source?.first,source?.second?.avatarServer,selected,files,retry) {
|
||||
val visible=if (index<0) emptyList() else files.subList((index-2).coerceAtLeast(0),(index+3).coerceAtMost(files.size))
|
||||
LaunchedEffect(source?.first,source?.second?.avatarServer,selected,retry) {
|
||||
original=null; failed=false
|
||||
val (channel,member)=source ?: return@LaunchedEffect
|
||||
if (index<0) return@LaunchedEffect
|
||||
val visible=files.subList((index-2).coerceAtLeast(0),(index+3).coerceAtMost(files.size))
|
||||
previews=previews.filterKeys { it in visible }
|
||||
coroutineScope {
|
||||
launch {
|
||||
try { previews=previews+(selected to repository.loadAvatar(channel,member.copy(avatarFile=selected),false)) }
|
||||
@@ -66,13 +66,17 @@ fun AvatarViewerScreen(group: String?, owner: Long, name: String, onClose: () ->
|
||||
catch (e: CancellationException) { throw e }
|
||||
catch (e: Exception) { failed=true; LogManager.addLog("WARN","Avatar","Original failed file=$selected: ${e.message}") }
|
||||
}
|
||||
visible.filter { it!=selected && it !in previews }.forEach { file -> launch {
|
||||
try { previews=previews+(file to repository.loadAvatar(channel,member.copy(avatarFile=file),false)) }
|
||||
catch (e: CancellationException) { throw e }
|
||||
catch (e: Exception) { LogManager.addLog("WARN","Avatar","Neighbor failed file=$file: ${e.message}") }
|
||||
} }
|
||||
}
|
||||
}
|
||||
LaunchedEffect(source?.first,source?.second?.avatarServer,visible,retry) {
|
||||
val (channel,member)=source ?: return@LaunchedEffect
|
||||
previews=previews.filterKeys { it in visible }
|
||||
coroutineScope { visible.filter { it!=selected && it !in previews }.forEach { file -> launch {
|
||||
try { previews=previews+(file to repository.loadAvatar(channel,member.copy(avatarFile=file),false)) }
|
||||
catch (e: CancellationException) { throw e }
|
||||
catch (e: Exception) { LogManager.addLog("WARN","Avatar","Neighbor failed file=$file: ${e.message}") }
|
||||
} } }
|
||||
}
|
||||
fun move(delta: Int) { val next=index+delta; if (next in files.indices) selected=files[next] }
|
||||
Dialog(onDismissRequest=onClose,properties=DialogProperties(usePlatformDefaultWidth=false)) {
|
||||
Column(Modifier.fillMaxSize().background(Color.Black).systemBarsPadding()) {
|
||||
|
||||
Reference in new issue
Block a user