diff --git a/package-lock.json b/package-lock.json
index a3fe23c..beb2548 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -28,7 +28,7 @@
"jszip": "^3.9.1",
"linkify-html": "^4.1.0",
"linkifyjs": "^4.1.0",
- "material-design-icons-iconfont": "^6.1",
+ "material-design-icons-iconfont": "^6.7.0",
"matrix-js-sdk": "^23.4.0",
"md-gum-polyfill": "^1.0.0",
"mic-recorder-to-mp3": "^2.2.2",
@@ -9936,9 +9936,9 @@
}
},
"node_modules/material-design-icons-iconfont": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.1.0.tgz",
- "integrity": "sha512-wRJtOo1v1ch+gN8PRsj0IGJznk+kQ8mz13ds/nuhLI+Qyf/931ZlRpd92oq0IRPpZIb+bhX8pRjzIVdcPDKmiQ=="
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.7.0.tgz",
+ "integrity": "sha512-lSj71DgVv20kO0kGbs42icDzbRot61gEDBLQACzkUuznRQBUYmbxzEkGU6dNBb5fRWHMaScYlAXX96HQ4/cJWA=="
},
"node_modules/matrix-events-sdk": {
"version": "0.0.1",
@@ -24023,9 +24023,9 @@
}
},
"material-design-icons-iconfont": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.1.0.tgz",
- "integrity": "sha512-wRJtOo1v1ch+gN8PRsj0IGJznk+kQ8mz13ds/nuhLI+Qyf/931ZlRpd92oq0IRPpZIb+bhX8pRjzIVdcPDKmiQ=="
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.7.0.tgz",
+ "integrity": "sha512-lSj71DgVv20kO0kGbs42icDzbRot61gEDBLQACzkUuznRQBUYmbxzEkGU6dNBb5fRWHMaScYlAXX96HQ4/cJWA=="
},
"matrix-events-sdk": {
"version": "0.0.1",
diff --git a/package.json b/package.json
index ee3deaa..86de8c5 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
"jszip": "^3.9.1",
"linkify-html": "^4.1.0",
"linkifyjs": "^4.1.0",
- "material-design-icons-iconfont": "^6.1",
+ "material-design-icons-iconfont": "^6.7.0",
"matrix-js-sdk": "^23.4.0",
"md-gum-polyfill": "^1.0.0",
"mic-recorder-to-mp3": "^2.2.2",
diff --git a/src/assets/css/chat.scss b/src/assets/css/chat.scss
index 984a969..acd71e7 100644
--- a/src/assets/css/chat.scss
+++ b/src/assets/css/chat.scss
@@ -783,12 +783,23 @@ body {
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4);
- align-items: center;
display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
.download-text {
width: 100%;
color: white;
}
+ .download-size {
+ font-size: 70%;
+ color: white;
+ }
+ .download-icon {
+ width: 32px;
+ height: 32px;
+ color: white;
+ }
}
.room-name,
diff --git a/src/components/Chat.vue b/src/components/Chat.vue
index a49466e..a34378b 100644
--- a/src/components/Chat.vue
+++ b/src/components/Chat.vue
@@ -213,7 +213,7 @@
+ accept="image/*,audio/*,video/*,.pdf,application/pdf,.apk,application/vnd.android.package-archive,.ipa,.zip,application/zip,application/x-zip-compressed,multipart/x-zip" class="d-none" multiple/>
@@ -1545,6 +1545,7 @@ export default {
},
download(event) {
+ console.error("DOWNLOAD!!!");
if ((event.isThreadRoot || event.isMxThread) && this.timelineSet) {
const children = this.timelineSet.relations.getAllChildEventsForEvent(event.getId()).filter(e => util.downloadableTypes().includes(e.getContent().msgtype));
children.forEach(child => util.download(this.$matrix.matrixClient, child));
diff --git a/src/components/RoomExport.vue b/src/components/RoomExport.vue
index 769af2a..6f7b872 100644
--- a/src/components/RoomExport.vue
+++ b/src/components/RoomExport.vue
@@ -287,6 +287,7 @@ export default {
var imageFolder = zip.folder("images");
var audioFolder = zip.folder("audio");
var videoFolder = zip.folder("video");
+ var filesFolder = zip.folder("files");
var downloadPromises = [];
let components = this.$refs.exportedEvent;
@@ -321,7 +322,8 @@ export default {
for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {
const img = images[imageIndex];
img.onerror = undefined;
- img.src = './avatars/' + fileName;
+ img.removeAttribute("src");
+ img.setAttribute("data-exported-src", './avatars/' + fileName);
}
}
}
@@ -421,13 +423,15 @@ export default {
var extension = ".mp3";
let fileName = comp.event.getId() + extension;
audioFolder.file(fileName, blob); // TODO calc bytes
+ //this.$nextTick(() => {
let elements = comp.$el.getElementsByTagName("audio");
let element = elements && elements[0];
if (element) {
- element.src = "./audio/" + fileName;
+ element.setAttribute("data-exported-src", "./audio/" + fileName);
}
this.processedEvents += 1;
resolve(true);
+ //});
});
}
})
@@ -449,13 +453,36 @@ export default {
var extension = ".mp4";
let fileName = comp.event.getId() + extension;
videoFolder.file(fileName, blob); // TODO calc bytes
+// comp.src = "./video/" + fileName;
let elements = comp.$el.getElementsByTagName("video");
let element = elements && elements[0];
if (element) {
- element.src = "./video/" + fileName;
+ element.setAttribute("data-exported-src", "./video/" + fileName);
}
this.processedEvents += 1;
-
+ resolve(true);
+ });
+ }
+ })
+ .catch((ignoredErr) => {
+ this.processedEvents += 1;
+ })
+ );
+ break;
+ case "MessageIncomingFileExport":
+ case "MessageOutgoingFileExport":
+ downloadPromises.push(
+ util
+ .getAttachment(this.$matrix.matrixClient, comp.event, null, true)
+ .then((blob) => {
+ if (currentMediaSize + blob.size <= maxMediaSize) {
+ currentMediaSize += blob.size;
+ return new Promise((resolve, ignoredReject) => {
+ var extension = util.getFileExtension(comp.event);
+ let fileName = comp.event.getId() + extension;
+ filesFolder.file(fileName, blob);
+ comp.href="./files/" + fileName;
+ this.processedEvents += 1;
resolve(true);
});
}
@@ -504,7 +531,8 @@ export default {
getCssRules(root);
this.$nextTick(() => {
- doc += this.$refs.exportRoot.outerHTML;
+ const contentHtml = this.$refs.exportRoot.outerHTML;
+ doc += contentHtml.replaceAll("data-exported-src=", "src=");
doc += "