Get name of WebXDC as the file "name"

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 18 +
1 file changed, 18 insertions(+)

Detailed changes

src/main/java/eu/siacs/conversations/persistance/FileBackend.java 🔗

@@ -77,6 +77,11 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 import java.util.UUID;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.tomlj.Toml;
+import org.tomlj.TomlTable;
 
 import io.ipfs.cid.Cid;
 
@@ -2061,6 +2066,19 @@ public class FileBackend {
             } else if (audio) {
                 fileParams.runtime = getMediaRuntime(file);
             }
+            if ("application/xdc+zip".equals(mime)) {
+                try {
+                    final var zip = new ZipFile(file);
+                    final ZipEntry manifestEntry = zip == null ? null : zip.getEntry("manifest.toml");
+                    if (manifestEntry != null) {
+                        final var manifest = Toml.parse(zip.getInputStream(manifestEntry));
+                        if (manifest != null) {
+                            final var name = manifest.getString("name");
+                            if (name != null) fileParams.setName(name);
+                        }
+                    }
+                } catch (final IOException e2) { }
+            }
             try {
                 Bitmap thumb = getThumbnailBitmap(file, mXmppConnectionService.getResources(), 100, file.getAbsolutePath() + " x 100");
                 if (thumb != null) {