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

View file

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