Browse Source

Keep avatar cache pruning tied to the originating Android account

master
evgeny 4 days ago
parent
commit
b0933eb282
  1. 8
      tools/chatgui-android/app/src/main/java/com/utun/chat/data/AvatarRepository.kt

8
tools/chatgui-android/app/src/main/java/com/utun/chat/data/AvatarRepository.kt

@ -342,13 +342,13 @@ class AvatarRepository(context: Context) {
}
suspend fun loadAvatar(group: String, m: ChatMember, original: Boolean): Bitmap {
val epoch=generation; val root=directory(account)
val epoch=generation; val root=directory(account); val pinnedIntent=defaultAvatar
if (!original) cache.get(m.avatarFile)?.let { return it }
objectFile(group,m,m.avatarFile,AvatarProtocol.MAX_MANIFEST)
val record=withContext(Dispatchers.IO) { AvatarAssets.record(root,m.avatarFile) }
objectFile(group,m,if (original) record.original else record.preview,
if (original) AvatarProtocol.MAX_ORIGINAL else AvatarProtocol.MAX_USER)
val bitmap=withContext(Dispatchers.IO) { AvatarAssets.image(root,record,original).also { prune(root) } }
val bitmap=withContext(Dispatchers.IO) { AvatarAssets.image(root,record,original).also { prune(root,pinnedIntent) } }
alive(epoch); if (!original) { cache.put(m.avatarFile,bitmap); changed() }
return bitmap
}
@ -396,9 +396,9 @@ class AvatarRepository(context: Context) {
}
return BitmapFactory.decodeByteArray(bytes, 0, bytes.size) ?: throw IOException("image decode failed")
}
private fun prune(root: File) {
private fun prune(root: File, pinnedIntent: String?) {
val pinned=mutableSetOf<String>()
defaultAvatar?.substringAfter('/')?.takeIf { AvatarProtocol.validFile(it) }?.let { name ->
pinnedIntent?.substringAfter('/')?.takeIf { AvatarProtocol.validFile(it) }?.let { name ->
pinned+=name
try { val r=AvatarAssets.record(root,name); pinned+=r.original; pinned+=r.preview }
catch (e: Exception) { log("WARN", "Cannot pin profile bundle=$name: ${e.message}") }

Loading…
Cancel
Save