Fix room export

Issue #657
This commit is contained in:
N-Pex 2025-07-15 14:19:17 +02:00
parent 6c0f44a16a
commit 890db0ca33
2 changed files with 52 additions and 70 deletions

View file

@ -291,7 +291,9 @@ export default {
this.totalEvents = this.exportComponents.length;
let beforeExportPromises = this.exportComponents.filter((c) => c.component.exposed?.beforeExport !== undefined).map((c) => c.component.exposed.beforeExport());
let beforeExportPromises = this.exportComponents
.filter((c) => c.component.exposed?.beforeExport !== undefined)
.map((c) => c.component.exposed.beforeExport());
await Promise.all(beforeExportPromises);
// UI updated, start processing events
@ -369,11 +371,7 @@ export default {
}
}
let attachment =
event && event.getId ? this.$matrix.attachmentManager.getEventAttachment(event) : undefined;
let componentClass = comp.type
? comp.type.__file.split("/").reverse()[0].split(".")[0]
: "invalid_component";
let attachment = event && event.getId ? this.$matrix.attachmentManager.getEventAttachment(event) : undefined;
if (attachment && (attachment.srcSize = 0 || currentMediaSize + attachment.srcSize <= maxMediaSize)) {
downloadPromises.push(
@ -384,72 +382,53 @@ export default {
if (currentMediaSize + blob.size <= maxMediaSize) {
currentMediaSize += blob.size;
switch (componentClass) {
case "MessageIncomingImageExport":
case "MessageOutgoingImageExport":
{
let mime = blob.type;
var extension = ".png";
switch (mime) {
case "image/jpeg":
case "image/jpg":
extension = ".jpg";
break;
case "image/gif":
extension = ".gif";
}
const mime = blob.type;
let fileName = event.getId() + extension;
imageFolder.file(fileName, blob); // TODO calc bytes
if (mime.startsWith("image/")) {
var extension = ".png";
switch (mime) {
case "image/jpeg":
case "image/jpg":
extension = ".jpg";
break;
case "image/gif":
extension = ".gif";
}
// Update source
const images = comp.el.getElementsByTagName("img");
for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {
const img = images[imageIndex];
img.removeAttribute("src");
img.setAttribute("data-exported-src", "./images/" + fileName);
}
}
break;
let fileName = event.getId() + extension;
imageFolder.file(fileName, blob); // TODO calc bytes
case "MessageIncomingAudioExport":
case "MessageOutgoingAudioExport":
{
var extension = ".webm";
let fileName = event.getId() + extension;
audioFolder.file(fileName, blob); // TODO calc bytes
let elements = comp.el.getElementsByTagName("audio");
let element = elements && elements[0];
if (element) {
element.setAttribute("data-exported-src", "./audio/" + fileName);
}
}
break;
case "MessageIncomingVideoExport":
case "MessageOutgoingVideoExport":
{
var extension = ".mp4";
let fileName = 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.setAttribute("data-exported-src", "./video/" + fileName);
}
}
break;
case "MessageIncomingFileExport":
case "MessageOutgoingFileExport":
{
var extension = util.getFileExtension(event);
let fileName = event.getId() + extension;
filesFolder.file(fileName, blob);
comp.component.data.href = "./files/" + fileName;
}
break;
// Update source
const images = comp.el.getElementsByTagName("img");
for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {
const img = images[imageIndex];
img.removeAttribute("src");
img.setAttribute("data-exported-src", "./images/" + fileName);
}
} else if (mime.startsWith("audio/")) {
var extension = ".webm";
let fileName = event.getId() + extension;
audioFolder.file(fileName, blob); // TODO calc bytes
let elements = comp.el.getElementsByTagName("audio");
let element = elements && elements[0];
if (element) {
element.setAttribute("data-exported-src", "./audio/" + fileName);
}
} else if (mime.startsWith("video/")) {
var extension = ".mp4";
let fileName = 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.setAttribute("data-exported-src", "./video/" + fileName);
}
} else {
var extension = util.getFileExtension(event);
let fileName = event.getId() + extension;
filesFolder.file(fileName, blob);
comp.component.data.href = "./files/" + fileName;
}
this.processedEvents += 1;
return true;

View file

@ -57,5 +57,8 @@ export default defineConfig(({mode}) => ({
build: {
assetsDir: "assets",
commonjsOptions: { transformMixedEsModules: true }
}
},
preview: {
port: 5173,
},
}));