X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/35c72f692f13b12594ecdbe8f59f31d3b396d356..c53bb132eb9759ee6541d037d2eeadc848c2c89b:/src/main/java/org/asamk/signal/storage/SignalAccount.java diff --git a/src/main/java/org/asamk/signal/storage/SignalAccount.java b/src/main/java/org/asamk/signal/storage/SignalAccount.java index cdc3efa5..6af9d460 100644 --- a/src/main/java/org/asamk/signal/storage/SignalAccount.java +++ b/src/main/java/org/asamk/signal/storage/SignalAccount.java @@ -129,16 +129,21 @@ public class SignalAccount { } private void load() throws IOException { - JsonNode rootNode = jsonProcessor.readTree(Channels.newInputStream(fileChannel)); + JsonNode rootNode; + synchronized (fileChannel) { + fileChannel.position(0); + rootNode = jsonProcessor.readTree(Channels.newInputStream(fileChannel)); + } JsonNode node = rootNode.get("deviceId"); if (node != null) { deviceId = node.asInt(); } + if (rootNode.has("isMultiDevice")) isMultiDevice = Util.getNotNullNode(rootNode, "isMultiDevice").asBoolean(); username = Util.getNotNullNode(rootNode, "username").asText(); password = Util.getNotNullNode(rootNode, "password").asText(); JsonNode pinNode = rootNode.get("registrationLockPin"); - registrationLockPin = pinNode == null ? null : pinNode.asText(); + registrationLockPin = pinNode == null || pinNode.isNull() ? null : pinNode.asText(); if (rootNode.has("signalingKey")) { signalingKey = Util.getNotNullNode(rootNode, "signalingKey").asText(); } @@ -189,11 +194,13 @@ public class SignalAccount { ObjectNode rootNode = jsonProcessor.createObjectNode(); rootNode.put("username", username) .put("deviceId", deviceId) + .put("isMultiDevice", isMultiDevice) .put("password", password) .put("registrationLockPin", registrationLockPin) .put("signalingKey", signalingKey) .put("preKeyIdOffset", preKeyIdOffset) .put("nextSignedPreKeyId", nextSignedPreKeyId) + .put("profileKey", Base64.encodeBytes(profileKey)) .put("registered", registered) .putPOJO("axolotlStore", signalProtocolStore) .putPOJO("groupStore", groupStore) @@ -201,10 +208,12 @@ public class SignalAccount { .putPOJO("threadStore", threadStore) ; try { - fileChannel.position(0); - jsonProcessor.writeValue(Channels.newOutputStream(fileChannel), rootNode); - fileChannel.truncate(fileChannel.position()); - fileChannel.force(false); + synchronized (fileChannel) { + fileChannel.position(0); + jsonProcessor.writeValue(Channels.newOutputStream(fileChannel), rootNode); + fileChannel.truncate(fileChannel.position()); + fileChannel.force(false); + } } catch (Exception e) { System.err.println(String.format("Error saving file: %s", e.getMessage())); }