1 package org
.asamk
.signal
.manager
.util
;
3 import java
.io
.BufferedInputStream
;
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
;
12 public class MimeUtils
{
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";
18 public static Optional
<String
> getFileMimeType(final File file
) throws IOException
{
19 var mime
= Files
.probeContentType(file
.toPath());
21 return Optional
.of(mime
);
24 try (final InputStream bufferedStream
= new BufferedInputStream(new FileInputStream(file
))) {
25 return getStreamMimeType(bufferedStream
);
29 public static Optional
<String
> getStreamMimeType(final InputStream inputStream
) throws IOException
{
30 return Optional
.ofNullable(URLConnection
.guessContentTypeFromStream(inputStream
));
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";