Release Android crop sources rejected after account changes
This commit is contained in:
1 parent
cbe6da09ee
commit
43c300cba3
1 file changed
+12
-3
@@ -437,7 +437,7 @@ class AvatarRepository(context: Context) {
|
||||
ensureGroup(group, true)
|
||||
}
|
||||
|
||||
fun editProfile(server: Long, source: File?, expectedAccount: Long, crop: AvatarCrop? = null) = edit("profile", expectedAccount) { epoch ->
|
||||
fun editProfile(server: Long, source: File?, expectedAccount: Long, crop: AvatarCrop? = null) = edit("profile", expectedAccount,source) { epoch ->
|
||||
val uid = account
|
||||
val prepared=if (source==null) null else try {
|
||||
withContext(Dispatchers.IO) { AvatarAssets.prepare(source,directory(uid),requireNotNull(crop)) }
|
||||
@@ -462,13 +462,22 @@ class AvatarRepository(context: Context) {
|
||||
_members.value.keys.map { it.group }.distinct().forEach { replicate(it) }
|
||||
}
|
||||
|
||||
private fun edit(key: String, expectedAccount: Long, block: suspend (Long) -> Unit) {
|
||||
private fun edit(key: String, expectedAccount: Long, rejectedSource: File? = null, block: suspend (Long) -> Unit) {
|
||||
if (account == 0L) start()
|
||||
if (expectedAccount == 0L || expectedAccount != account) {
|
||||
log("WARN", "Ignored stale picker result target=$key expected=${AvatarProtocol.hex(expectedAccount)} actual=${AvatarProtocol.hex(account)}")
|
||||
rejectedSource?.let { file -> scope.launch(Dispatchers.IO) {
|
||||
if (!file.delete()) log("WARN", "Cannot remove stale editor source=$file")
|
||||
} }
|
||||
return
|
||||
}
|
||||
if (account == 0L || _edits.value[key] == AvatarEditState.WORKING) {
|
||||
log("WARN", "Rejected concurrent avatar edit target=$key")
|
||||
rejectedSource?.let { file -> scope.launch(Dispatchers.IO) {
|
||||
if (!file.delete()) log("WARN", "Cannot remove rejected editor source=$file")
|
||||
} }
|
||||
return
|
||||
}
|
||||
if (account == 0L || _edits.value[key] == AvatarEditState.WORKING) return
|
||||
val epoch = generation; editTokens[key] = epoch
|
||||
_edits.value += key to AvatarEditState.WORKING
|
||||
scope.launch {
|
||||
|
||||
Reference in new issue
Block a user