Changeset View
Changeset View
Standalone View
Standalone View
src/client/actions/encryption.cpp
| Show First 20 Lines • Show All 536 Lines • ▼ Show 20 Lines | ClientResult processResponse(ClientModel m, QueryKeysResponse r) | ||||
| for (auto [deviceId, deviceInfo] : deviceMap) { | for (auto [deviceId, deviceInfo] : deviceMap) { | ||||
| kzo.client.dbg() << "Key for " << userId | kzo.client.dbg() << "Key for " << userId | ||||
| << "/" << deviceId | << "/" << deviceId | ||||
| << ": " << json(deviceInfo).dump() | << ": " << json(deviceInfo).dump() | ||||
| << std::endl; | << std::endl; | ||||
| m.deviceLists.addDevice(userId, deviceId, deviceInfo); | m.deviceLists.addDevice(userId, deviceId, deviceInfo); | ||||
| } | } | ||||
| if (wantedToFetchAllForUser(userId)) { | if (wantedToFetchAllForUser(userId)) { | ||||
| // We requested all devices for this user, so any | |||||
| // device currently tracked but absent from the | |||||
| // response has been deleted by its owner. Mark it | |||||
| // as deleted rather than removing it, so we can still | |||||
| // verify past decrypted events from that device. | |||||
| auto existingDevices = m.deviceLists.devicesFor(userId); | |||||
| for (auto [deviceId, info] : existingDevices) { | |||||
| if (!deviceMap.count(deviceId)) { | |||||
| kzo.client.dbg() << "Marking deleted device " << userId | |||||
| << "/" << deviceId << std::endl; | |||||
| m.deviceLists.markDeviceAsDeleted(userId, deviceId); | |||||
| } | |||||
| } | |||||
| m.deviceLists.markUpToDate(userId); | m.deviceLists.markUpToDate(userId); | ||||
| } | } | ||||
| } | } | ||||
| return { std::move(m), detail::ReturnEffectStatusT{ | return { std::move(m), detail::ReturnEffectStatusT{ | ||||
| EffectStatus{/* succ = */ true, json::object({ | EffectStatus{/* succ = */ true, json::object({ | ||||
| {"unsatisfied", unsatisfied} | {"unsatisfied", unsatisfied} | ||||
| })} | })} | ||||
| ▲ Show 20 Lines • Show All 264 Lines • Show Last 20 Lines | |||||