Include device-group operation state required by the Android member UI
This commit is contained in:
1 parent
029ed59fbf
commit
d8b63dfad8
1 file changed
+12
-2
@@ -10,6 +10,7 @@ data class DeviceInvitation(val id: String, val peer: String, val outgoing: Bool
|
||||
data class DevgroupState(val name: String = "", val member: Boolean = false, val invitations: List<DeviceInvitation> = emptyList(),
|
||||
val pin: String = "", val failed: Boolean = false, val outgoingVisible: Boolean = false,
|
||||
val leaving: Boolean = false, val leaveFailed: Boolean = false,
|
||||
val renaming: Boolean = false, val renameFailed: Boolean = false,
|
||||
val outgoingId: String = "", val accepting: String = "", val dismissed: Set<String> = emptySet())
|
||||
|
||||
/** Только main thread; PIN хранится до закрытия диалога, входящие/результаты не пишутся в лог. */
|
||||
@@ -22,12 +23,15 @@ object DevgroupRepository {
|
||||
if (action == 0 && pending.containsValue(0)) return
|
||||
if (action == 1) mutable.value = mutable.value.copy(outgoingVisible = true, outgoingId = "", pin = "", failed = false)
|
||||
if (action == 2) mutable.value = mutable.value.copy(accepting = text, failed = false)
|
||||
if (action == 3) mutable.value = mutable.value.copy(renaming = true, renameFailed = false)
|
||||
if (action == 4) mutable.value = mutable.value.copy(leaving = true, leaveFailed = false)
|
||||
val id = ++nextId
|
||||
if (NativeLib.devgroupCommand(action, group, peer, text, pin, id)) pending[id] = action
|
||||
else { LogManager.addLog("WARN", "Devgroup", "Core rejected request action=$action"); mutable.value = mutable.value.copy(failed = true, accepting = "", leaving = false, leaveFailed = action == 4) }
|
||||
else { LogManager.addLog("WARN", "Devgroup", "Core rejected request action=$action"); mutable.value = mutable.value.copy(
|
||||
failed = true, accepting = "", leaving = false, leaveFailed = action == 4, renaming = false, renameFailed = action == 3) }
|
||||
}
|
||||
fun dismissLeaveError() { mutable.value = mutable.value.copy(leaveFailed = false) }
|
||||
fun dismissRenameError() { mutable.value = mutable.value.copy(renameFailed = false) }
|
||||
fun closeOutgoing() { mutable.value = mutable.value.copy(outgoingVisible = false, outgoingId = "", pin = "", failed = false) }
|
||||
fun dismissIncoming(id: String) { mutable.value = mutable.value.copy(dismissed = mutable.value.dismissed + id, failed = false) }
|
||||
fun onEvent(type: Int, data: ByteArray?) {
|
||||
@@ -37,17 +41,23 @@ object DevgroupRepository {
|
||||
if (type != 71 || data == null || data.size < 9) return
|
||||
val id = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).long
|
||||
val action = pending.remove(id) ?: return
|
||||
if (data[8].toInt() != 1) { mutable.value = mutable.value.copy(failed = true, accepting = "", leaving = false, leaveFailed = action == 4); return }
|
||||
if (data[8].toInt() != 1) {
|
||||
LogManager.addLog("WARN", "Devgroup", "Core operation failed action=$action")
|
||||
mutable.value = mutable.value.copy(failed = true, accepting = "", leaving = false, leaveFailed = action == 4,
|
||||
renaming = false, renameFailed = action == 3); return
|
||||
}
|
||||
val json = JSONObject(String(data, 9, data.size - 9, Charsets.UTF_8))
|
||||
if (action == 1) {
|
||||
if (mutable.value.outgoingVisible) mutable.value = mutable.value.copy(pin = json.getString("pin"), outgoingId = json.getString("id"), failed = false)
|
||||
return
|
||||
}
|
||||
val invitations = json.getJSONArray("invitations")
|
||||
if (action == 3) LogManager.addLog("INFO", "Devgroup", "Device group renamed")
|
||||
mutable.value = mutable.value.copy(name = json.getString("name"), member = json.getString("group").isNotEmpty(),
|
||||
invitations = List(invitations.length()) { i -> val entry = invitations.getJSONObject(i)
|
||||
DeviceInvitation(entry.getString("id"), entry.getString("peer"), entry.getInt("outgoing") != 0, entry.getInt("state")) },
|
||||
leaving = if (action == 4) false else mutable.value.leaving,
|
||||
renaming = if (action == 3) false else mutable.value.renaming,
|
||||
accepting = if (action == 2) "" else mutable.value.accepting,
|
||||
failed = if (action == 0) mutable.value.failed else false)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user