use of org.matrix.androidsdk.rest.model.crypto.KeysClaimResponse in project matrix-android-sdk by matrix-org.
the class CryptoRestClient method claimOneTimeKeysForUsersDevices.
/**
* Claim one-time keys.
*
* @param usersDevicesKeyTypesMap a list of users, devices and key types to retrieve keys for.
* @param callback the asynchronous callback
*/
public void claimOneTimeKeysForUsersDevices(final MXUsersDevicesMap<String> usersDevicesKeyTypesMap, final ApiCallback<MXUsersDevicesMap<MXKey>> callback) {
final String description = "claimOneTimeKeysForUsersDevices";
HashMap<String, Object> params = new HashMap<>();
params.put("one_time_keys", usersDevicesKeyTypesMap.getMap());
try {
mApi.claimOneTimeKeysForUsersDevices(params, new RestAdapterCallback<KeysClaimResponse>(description, mUnsentEventsManager, callback, new RestAdapterCallback.RequestRetryCallBack() {
@Override
public void onRetry() {
claimOneTimeKeysForUsersDevices(usersDevicesKeyTypesMap, callback);
}
}) {
@Override
public void success(KeysClaimResponse keysClaimResponse, Response response) {
onEventSent();
HashMap<String, Map<String, MXKey>> map = new HashMap();
if (null != keysClaimResponse.oneTimeKeys) {
for (String userId : keysClaimResponse.oneTimeKeys.keySet()) {
Map<String, Map<String, Map<String, Object>>> mapByUserId = keysClaimResponse.oneTimeKeys.get(userId);
HashMap<String, MXKey> keysMap = new HashMap<>();
for (String deviceId : mapByUserId.keySet()) {
try {
keysMap.put(deviceId, new MXKey(mapByUserId.get(deviceId)));
} catch (Exception e) {
Log.e(LOG_TAG, "## claimOneTimeKeysForUsersDevices : fail to create a MXKey " + e.getMessage());
}
}
if (keysMap.size() != 0) {
map.put(userId, keysMap);
}
}
}
callback.onSuccess(new MXUsersDevicesMap<>(map));
}
});
} catch (Throwable t) {
callback.onUnexpectedError(new Exception(t));
}
}
Aggregations