X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/6a1b7dc5975161f59fbb1012dd340c7b6e0198f7..c49b05cd75dd8cee795859b6045fbec0040d4144:/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 d3c2506d..4f9d8628 100644 --- a/src/main/java/org/asamk/signal/storage/SignalAccount.java +++ b/src/main/java/org/asamk/signal/storage/SignalAccount.java @@ -21,6 +21,7 @@ import org.asamk.signal.storage.protocol.JsonSignalProtocolStore; import org.asamk.signal.storage.protocol.RecipientStore; import org.asamk.signal.storage.protocol.SessionInfo; import org.asamk.signal.storage.protocol.SignalServiceAddressResolver; +import org.asamk.signal.storage.stickers.StickerStore; import org.asamk.signal.storage.threads.LegacyJsonThreadStore; import org.asamk.signal.storage.threads.ThreadInfo; import org.asamk.signal.util.IOUtils; @@ -72,6 +73,7 @@ public class SignalAccount implements Closeable { private JsonContactsStore contactStore; private RecipientStore recipientStore; private ProfileStore profileStore; + private StickerStore stickerStore; private SignalAccount(final FileChannel fileChannel, final FileLock lock) { this.fileChannel = fileChannel; @@ -97,7 +99,9 @@ public class SignalAccount implements Closeable { } } - public static SignalAccount create(String dataPath, String username, IdentityKeyPair identityKey, int registrationId, ProfileKey profileKey) throws IOException { + public static SignalAccount create( + String dataPath, String username, IdentityKeyPair identityKey, int registrationId, ProfileKey profileKey + ) throws IOException { IOUtils.createPrivateDirectories(dataPath); String fileName = getFileName(dataPath, username); if (!new File(fileName).exists()) { @@ -114,12 +118,23 @@ public class SignalAccount implements Closeable { account.contactStore = new JsonContactsStore(); account.recipientStore = new RecipientStore(); account.profileStore = new ProfileStore(); + account.stickerStore = new StickerStore(); account.registered = false; return account; } - public static SignalAccount createLinkedAccount(String dataPath, String username, UUID uuid, String password, int deviceId, IdentityKeyPair identityKey, int registrationId, String signalingKey, ProfileKey profileKey) throws IOException { + public static SignalAccount createLinkedAccount( + String dataPath, + String username, + UUID uuid, + String password, + int deviceId, + IdentityKeyPair identityKey, + int registrationId, + String signalingKey, + ProfileKey profileKey + ) throws IOException { IOUtils.createPrivateDirectories(dataPath); String fileName = getFileName(dataPath, username); if (!new File(fileName).exists()) { @@ -140,6 +155,7 @@ public class SignalAccount implements Closeable { account.contactStore = new JsonContactsStore(); account.recipientStore = new RecipientStore(); account.profileStore = new ProfileStore(); + account.stickerStore = new StickerStore(); account.registered = true; account.isMultiDevice = true; @@ -205,11 +221,14 @@ public class SignalAccount implements Closeable { try { profileKey = new ProfileKey(Base64.decode(Util.getNotNullNode(rootNode, "profileKey").asText())); } catch (InvalidInputException e) { - throw new IOException("Config file contains an invalid profileKey, needs to be base64 encoded array of 32 bytes", e); + throw new IOException( + "Config file contains an invalid profileKey, needs to be base64 encoded array of 32 bytes", + e); } } - signalProtocolStore = jsonProcessor.convertValue(Util.getNotNullNode(rootNode, "axolotlStore"), JsonSignalProtocolStore.class); + signalProtocolStore = jsonProcessor.convertValue(Util.getNotNullNode(rootNode, "axolotlStore"), + JsonSignalProtocolStore.class); registered = Util.getNotNullNode(rootNode, "registered").asBoolean(); JsonNode groupStoreNode = rootNode.get("groupStore"); if (groupStoreNode != null) { @@ -267,9 +286,18 @@ public class SignalAccount implements Closeable { profileStore = new ProfileStore(); } + JsonNode stickerStoreNode = rootNode.get("stickerStore"); + if (stickerStoreNode != null) { + stickerStore = jsonProcessor.convertValue(stickerStoreNode, StickerStore.class); + } + if (stickerStore == null) { + stickerStore = new StickerStore(); + } + JsonNode threadStoreNode = rootNode.get("threadStore"); if (threadStoreNode != null) { - LegacyJsonThreadStore threadStore = jsonProcessor.convertValue(threadStoreNode, LegacyJsonThreadStore.class); + LegacyJsonThreadStore threadStore = jsonProcessor.convertValue(threadStoreNode, + LegacyJsonThreadStore.class); // Migrate thread info to group and contact store for (ThreadInfo thread : threadStore.getThreads()) { if (thread.id == null || thread.id.isEmpty()) { @@ -314,7 +342,7 @@ public class SignalAccount implements Closeable { .putPOJO("contactStore", contactStore) .putPOJO("recipientStore", recipientStore) .putPOJO("profileStore", profileStore) - ; + .putPOJO("stickerStore", stickerStore); try { try (ByteArrayOutputStream output = new ByteArrayOutputStream()) { // Write to memory first to prevent corrupting the file in case of serialization errors @@ -379,6 +407,10 @@ public class SignalAccount implements Closeable { return profileStore; } + public StickerStore getStickerStore() { + return stickerStore; + } + public String getUsername() { return username; }