]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/stickers/StickerStore.java
d0c9c5bc15831b72f60657204ce3c51590edeaca
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 record Storage(List
<Storage
.Sticker
> stickers
) {
70 private record Sticker(String packId
, String packKey
, boolean installed
) {
75 public interface Saver
{
77 void save(Storage storage
);