]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java
Reformat files
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / StickerUtils.java
index fd5ce77b666f5b646ecf6699e33ef17ff734a120..d017f0a57b60b06f8f9ad39b0b8f16f317a39004 100644 (file)
@@ -2,19 +2,18 @@ package org.asamk.signal.manager.util;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.asamk.signal.manager.JsonStickerPack;
-import org.asamk.signal.manager.StickerPackInvalidException;
-import org.whispersystems.libsignal.util.Pair;
-import org.whispersystems.libsignal.util.guava.Optional;
+import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
+import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
 import org.whispersystems.signalservice.api.messages.SignalServiceStickerManifestUpload;
 
+import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.List;
-import java.util.zip.ZipEntry;
+import java.util.Optional;
 import java.util.zip.ZipFile;
 
 public class StickerUtils {
@@ -33,59 +32,61 @@ public class StickerUtils {
             throw new StickerPackInvalidException("Could not find manifest.json");
         }
 
-        JsonStickerPack pack = parseStickerPack(rootPath, zip);
+        var pack = parseStickerPack(rootPath, zip);
 
-        if (pack.stickers == null) {
+        if (pack.stickers() == null) {
             throw new StickerPackInvalidException("Must set a 'stickers' field.");
         }
 
-        if (pack.stickers.isEmpty()) {
+        if (pack.stickers().isEmpty()) {
             throw new StickerPackInvalidException("Must include stickers.");
         }
 
-        List<SignalServiceStickerManifestUpload.StickerInfo> stickers = new ArrayList<>(pack.stickers.size());
-        for (JsonStickerPack.JsonSticker sticker : pack.stickers) {
-            if (sticker.file == null) {
+        var stickers = new ArrayList<SignalServiceStickerManifestUpload.StickerInfo>(pack.stickers().size());
+        for (var sticker : pack.stickers()) {
+            if (sticker.file() == null) {
                 throw new StickerPackInvalidException("Must set a 'file' field on each sticker.");
             }
 
             Pair<InputStream, Long> data;
             try {
-                data = getInputStreamAndLength(rootPath, zip, sticker.file);
+                data = getInputStreamAndLength(rootPath, zip, sticker.file());
             } catch (IOException ignored) {
-                throw new StickerPackInvalidException("Could not find find " + sticker.file);
+                throw new StickerPackInvalidException("Could not find find " + sticker.file());
             }
 
-            String contentType = Utils.getFileMimeType(new File(sticker.file), null);
-            SignalServiceStickerManifestUpload.StickerInfo stickerInfo = new SignalServiceStickerManifestUpload.StickerInfo(
-                    data.first(),
+            var contentType = sticker.contentType() != null && !sticker.contentType().isEmpty()
+                    ? sticker.contentType()
+                    : getContentType(rootPath, zip, sticker.file());
+            var stickerInfo = new SignalServiceStickerManifestUpload.StickerInfo(data.first(),
                     data.second(),
-                    Optional.fromNullable(sticker.emoji).or(""),
+                    Optional.ofNullable(sticker.emoji()).orElse(""),
                     contentType);
             stickers.add(stickerInfo);
         }
 
         SignalServiceStickerManifestUpload.StickerInfo cover = null;
-        if (pack.cover != null) {
-            if (pack.cover.file == null) {
+        if (pack.cover() != null) {
+            if (pack.cover().file() == null) {
                 throw new StickerPackInvalidException("Must set a 'file' field on the cover.");
             }
 
             Pair<InputStream, Long> data;
             try {
-                data = getInputStreamAndLength(rootPath, zip, pack.cover.file);
+                data = getInputStreamAndLength(rootPath, zip, pack.cover().file());
             } catch (IOException ignored) {
-                throw new StickerPackInvalidException("Could not find find " + pack.cover.file);
+                throw new StickerPackInvalidException("Could not find find " + pack.cover().file());
             }
 
-            String contentType = Utils.getFileMimeType(new File(pack.cover.file), null);
+            var contentType = pack.cover().contentType() != null && !pack.cover().contentType().isEmpty() ? pack.cover()
+                    .contentType() : getContentType(rootPath, zip, pack.cover().file());
             cover = new SignalServiceStickerManifestUpload.StickerInfo(data.first(),
                     data.second(),
-                    Optional.fromNullable(pack.cover.emoji).or(""),
+                    Optional.ofNullable(pack.cover().emoji()).orElse(""),
                     contentType);
         }
 
-        return new SignalServiceStickerManifestUpload(pack.title, pack.author, cover, stickers);
+        return new SignalServiceStickerManifestUpload(pack.title(), pack.author(), cover, stickers);
     }
 
     private static JsonStickerPack parseStickerPack(String rootPath, ZipFile zip) throws IOException {
@@ -99,15 +100,32 @@ public class StickerUtils {
     }
 
     private static Pair<InputStream, Long> getInputStreamAndLength(
-            final String rootPath, final ZipFile zip, final String subfile
+            final String rootPath,
+            final ZipFile zip,
+            final String subfile
     ) throws IOException {
         if (zip != null) {
-            final ZipEntry entry = zip.getEntry(subfile);
+            final var entry = zip.getEntry(subfile);
             return new Pair<>(zip.getInputStream(entry), entry.getSize());
         } else {
-            final File file = new File(rootPath, subfile);
+            final var file = new File(rootPath, subfile);
             return new Pair<>(new FileInputStream(file), file.length());
         }
     }
 
+    private static String getContentType(
+            final String rootPath,
+            final ZipFile zip,
+            final String subfile
+    ) throws IOException {
+        if (zip != null) {
+            final var entry = zip.getEntry(subfile);
+            try (InputStream bufferedStream = new BufferedInputStream(zip.getInputStream(entry))) {
+                return MimeUtils.getStreamMimeType(bufferedStream).orElse(null);
+            }
+        } else {
+            final var file = new File(rootPath, subfile);
+            return MimeUtils.getFileMimeType(file).orElse(null);
+        }
+    }
 }