]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/stickers/StickerStore.java
19803bdc64ec0f36255f807d36440fac8047bb57
1 package org
.asamk
.signal
.manager
.storage
.stickers
;
3 import java
.util
.Base64
;
4 import java
.util
.HashMap
;
5 import java
.util
.HashSet
;
8 import java
.util
.Objects
;
9 import java
.util
.stream
.Collectors
;
11 public class StickerStore
{
13 private final Map
<StickerPackId
, Sticker
> stickers
;
15 private final Saver saver
;
17 public StickerStore(final Saver saver
) {
19 stickers
= new HashMap
<>();
22 public StickerStore(final Map
<StickerPackId
, Sticker
> stickers
, final Saver saver
) {
23 this.stickers
= stickers
;
27 public static StickerStore
fromStorage(Storage storage
, Saver saver
) {
28 final var packIds
= new HashSet
<StickerPackId
>();
29 final var stickers
= storage
.stickers
.stream().map(s
-> {
30 var packId
= StickerPackId
.deserialize(Base64
.getDecoder().decode(s
.packId
));
31 if (packIds
.contains(packId
)) {
32 // Remove legacy duplicate packIds ...
36 var packKey
= Base64
.getDecoder().decode(s
.packKey
);
37 var installed
= s
.installed
;
38 return new Sticker(packId
, packKey
, installed
);
39 }).filter(Objects
::nonNull
).collect(Collectors
.toMap(Sticker
::getPackId
, s
-> s
));
41 return new StickerStore(stickers
, saver
);
44 public Sticker
getSticker(StickerPackId packId
) {
45 synchronized (stickers
) {
46 return stickers
.get(packId
);
50 public void updateSticker(Sticker sticker
) {
52 synchronized (stickers
) {
53 stickers
.put(sticker
.getPackId(), sticker
);
54 storage
= toStorageLocked();
59 private Storage
toStorageLocked() {
60 return new Storage(stickers
.values()
62 .map(s
-> new Storage
.Sticker(Base64
.getEncoder().encodeToString(s
.getPackId().serialize()),
63 Base64
.getEncoder().encodeToString(s
.getPackKey()),
65 .collect(Collectors
.toList()));
68 public static class Storage
{
70 public List
<Storage
.Sticker
> stickers
;
72 // For deserialization
76 public Storage(final List
<Sticker
> stickers
) {
77 this.stickers
= stickers
;
80 private static class Sticker
{
83 public String packKey
;
84 public boolean installed
;
86 // For deserialization
90 public Sticker(final String packId
, final String packKey
, final boolean installed
) {
92 this.packKey
= packKey
;
93 this.installed
= installed
;
98 public interface Saver
{
100 void save(Storage storage
);