1 package org
.asamk
.signal
.manager
;
3 import com
.fasterxml
.jackson
.databind
.ObjectMapper
;
5 import org
.asamk
.signal
.manager
.storage
.stickers
.StickerPackId
;
6 import org
.asamk
.signal
.manager
.util
.IOUtils
;
7 import org
.whispersystems
.signalservice
.internal
.util
.Hex
;
9 import java
.io
.BufferedWriter
;
11 import java
.io
.FileOutputStream
;
12 import java
.io
.IOException
;
13 import java
.io
.OutputStream
;
14 import java
.io
.OutputStreamWriter
;
15 import java
.nio
.charset
.StandardCharsets
;
17 public class StickerPackStore
{
19 private final File stickersPath
;
21 public StickerPackStore(final File stickersPath
) {
22 this.stickersPath
= stickersPath
;
25 public boolean existsStickerPack(StickerPackId stickerPackId
) {
26 return getStickerPackManifestFile(stickerPackId
).exists();
29 public void storeManifest(StickerPackId stickerPackId
, JsonStickerPack manifest
) throws IOException
{
30 try (OutputStream output
= new FileOutputStream(getStickerPackManifestFile(stickerPackId
))) {
31 try (var writer
= new BufferedWriter(new OutputStreamWriter(output
, StandardCharsets
.UTF_8
))) {
32 new ObjectMapper().writeValue(writer
, manifest
);
37 public void storeSticker(StickerPackId stickerPackId
, int stickerId
, StickerStorer storer
) throws IOException
{
38 createStickerPackDir(stickerPackId
);
39 try (OutputStream output
= new FileOutputStream(getStickerPackStickerFile(stickerPackId
, stickerId
))) {
44 private File
getStickerPackManifestFile(StickerPackId stickerPackId
) {
45 return new File(getStickerPackPath(stickerPackId
), "manifest.json");
48 private File
getStickerPackStickerFile(StickerPackId stickerPackId
, int stickerId
) {
49 return new File(getStickerPackPath(stickerPackId
), String
.valueOf(stickerId
));
52 private File
getStickerPackPath(StickerPackId stickerPackId
) {
53 return new File(stickersPath
, Hex
.toStringCondensed(stickerPackId
.serialize()));
56 private void createStickerPackDir(StickerPackId stickerPackId
) throws IOException
{
57 IOUtils
.createPrivateDirectories(getStickerPackPath(stickerPackId
));
61 public interface StickerStorer
{
63 void store(OutputStream outputStream
) throws IOException
;