Keep avatar cache pruning tied to the originating Android account
This commit is contained in:
1 parent
52f4628fe0
commit
b0933eb282
1 file changed
+4
-4
@@ -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}") }
|
||||
|
||||
Reference in new issue
Block a user