]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/stickers/StickerStore.java
b1de3fecf0252b7e67aa65e1eb67ffc906fb24ba
1 package org
.asamk
.signal
.manager
.storage
.stickers
;
3 import java
.util
.Base64
;
4 import java
.util
.Collection
;
5 import java
.util
.HashMap
;
6 import java
.util
.HashSet
;
9 import java
.util
.Objects
;
10 import java
.util
.stream
.Collectors
;
12 public class StickerStore
{
14 private final Map
<StickerPackId
, Sticker
> stickers
;
16 private final Saver saver
;
18 public StickerStore(final Saver saver
) {
20 stickers
= new HashMap
<>();
23 public StickerStore(final Map
<StickerPackId
, Sticker
> stickers
, final Saver saver
) {
24 this.stickers
= stickers
;
28 public static StickerStore
fromStorage(Storage storage
, Saver saver
) {
29 final var packIds
= new HashSet
<StickerPackId
>();
30 final var stickers
= storage
.stickers
.stream().map(s
-> {
31 var packId
= StickerPackId
.deserialize(Base64
.getDecoder().decode(s
.packId
));
32 if (packIds
.contains(packId
)) {
33 // Remove legacy duplicate packIds ...
37 var packKey
= Base64
.getDecoder().decode(s
.packKey
);
38 var installed
= s
.installed
;
39 return new Sticker(packId
, packKey
, installed
);
40 }).filter(Objects
::nonNull
).collect(Collectors
.toMap(Sticker
::getPackId
, s
-> s
));
42 return new StickerStore(stickers
, saver
);
45 public Collection
<Sticker
> getStickerPacks() {
46 return stickers
.values();
49 public Sticker
getStickerPack(StickerPackId packId
) {
50 synchronized (stickers
) {
51 return stickers
.get(packId
);
55 public void updateSticker(Sticker sticker
) {
57 synchronized (stickers
) {
58 stickers
.put(sticker
.getPackId(), sticker
);
59 storage
= toStorageLocked();
64 private Storage
toStorageLocked() {
65 return new Storage(stickers
.values()
67 .map(s
-> new Storage
.Sticker(Base64
.getEncoder().encodeToString(s
.getPackId().serialize()),
68 Base64
.getEncoder().encodeToString(s
.getPackKey()),
73 public record Storage(List
<Storage
.Sticker
> stickers
) {
75 private record Sticker(String packId
, String packKey
, boolean installed
) {
80 public interface Saver
{
82 void save(Storage storage
);