]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/util/MimeUtils.java
Update gradle
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / MimeUtils.java
1 package org.asamk.signal.manager.util;
2
3 import java.io.BufferedInputStream;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.net.URLConnection;
9 import java.nio.file.Files;
10 import java.util.Optional;
11
12 public class MimeUtils {
13
14 public static final String LONG_TEXT = "text/x-signal-plain";
15 public static final String PLAIN_TEXT = "text/plain";
16 public static final String OCTET_STREAM = "application/octet-stream";
17
18 public static Optional<String> getFileMimeType(final File file) throws IOException {
19 var mime = Files.probeContentType(file.toPath());
20 if (mime != null) {
21 return Optional.of(mime);
22 }
23
24 try (final InputStream bufferedStream = new BufferedInputStream(new FileInputStream(file))) {
25 return getStreamMimeType(bufferedStream);
26 }
27 }
28
29 public static Optional<String> getStreamMimeType(final InputStream inputStream) throws IOException {
30 return Optional.ofNullable(URLConnection.guessContentTypeFromStream(inputStream));
31 }
32
33 public static Optional<String> guessExtensionFromMimeType(String mimeType) {
34 return Optional.ofNullable(switch (mimeType) {
35 case "application/vnd.android.package-archive" -> "apk";
36 case "application/json" -> "json";
37 case "image/png" -> "png";
38 case "image/jpeg" -> "jpg";
39 case "image/heic" -> "heic";
40 case "image/heif" -> "heif";
41 case "image/webp" -> "webp";
42 case "image/gif" -> "gif";
43 case "audio/aac" -> "aac";
44 case "video/mp4" -> "mp4";
45 case "text/x-vcard" -> "vcf";
46 case PLAIN_TEXT, LONG_TEXT -> "txt";
47 case OCTET_STREAM -> "bin";
48 default -> null;
49 });
50 }
51 }