|
|
|
|
@ -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}") } |
|
|
|
|
|