]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/stickers/StickerStore.java
2ebb7078a51a2afb8a5550634571d3bddb4549cb
1 package org
.asamk
.signal
.manager
.storage
.stickers
;
3 import org
.asamk
.signal
.manager
.api
.StickerPackId
;
5 import java
.util
.Base64
;
6 import java
.util
.Collection
;
7 import java
.util
.HashMap
;
8 import java
.util
.HashSet
;
11 import java
.util
.Objects
;
12 import java
.util
.stream
.Collectors
;
14 public class StickerStore
{
16 private final Map
<StickerPackId
, Sticker
> stickers
;
18 private final Saver saver
;
20 public StickerStore(final Saver saver
) {
22 stickers
= new HashMap
<>();
25 public StickerStore(final Map
<StickerPackId
, Sticker
> stickers
, final Saver saver
) {
26 this.stickers
= stickers
;
30 public static StickerStore
fromStorage(Storage storage
, Saver saver
) {
31 final var packIds
= new HashSet
<StickerPackId
>();
32 final var stickers
= storage
.stickers
.stream().map(s
-> {
33 var packId
= StickerPackId
.deserialize(Base64
.getDecoder().decode(s
.packId
));
34 if (packIds
.contains(packId
)) {
35 // Remove legacy duplicate packIds ...
39 var packKey
= Base64
.getDecoder().decode(s
.packKey
);
40 var installed
= s
.installed
;
41 return new Sticker(packId
, packKey
, installed
);
42 }).filter(Objects
::nonNull
).collect(Collectors
.toMap(Sticker
::getPackId
, s
-> s
));
44 return new StickerStore(stickers
, saver
);
47 public Collection
<Sticker
> getStickerPacks() {
48 return stickers
.values();
51 public Sticker
getStickerPack(StickerPackId packId
) {
52 synchronized (stickers
) {
53 return stickers
.get(packId
);
57 public void updateSticker(Sticker sticker
) {
59 synchronized (stickers
) {
60 stickers
.put(sticker
.getPackId(), sticker
);
61 storage
= toStorageLocked();
66 private Storage
toStorageLocked() {
67 return new Storage(stickers
.values()
69 .map(s
-> new Storage
.Sticker(Base64
.getEncoder().encodeToString(s
.getPackId().serialize()),
70 Base64
.getEncoder().encodeToString(s
.getPackKey()),
75 public record Storage(List
<Storage
.Sticker
> stickers
) {
77 private record Sticker(String packId
, String packKey
, boolean installed
) {
82 public interface Saver
{
84 void save(Storage storage
);