diff --git a/src/utils/exportUtils/HtmlExport.tsx b/src/utils/exportUtils/HtmlExport.tsx
index 9271db241e..e05a7bd494 100644
--- a/src/utils/exportUtils/HtmlExport.tsx
+++ b/src/utils/exportUtils/HtmlExport.tsx
@@ -57,6 +57,7 @@ export default class HTMLExporter extends Exporter {
if (avatarUrl) {
const image = await fetch(avatarUrl);
blob = await image.blob();
+ this.totalSize += blob.size;
this.addFile(avatarPath, blob);
}
const avatar = (
@@ -270,32 +271,44 @@ export default class HTMLExporter extends Exporter {
return eventTileMarkup;
}
+ protected createModifiedEvent = (text: string, mxEv: MatrixEvent) => {
+ const modifiedContent = {
+ msgtype: "m.text",
+ body: `*${text}*`,
+ format: "org.matrix.custom.html",
+ formatted_body: `${text}`,
+ }
+ const modifiedEvent = new MatrixEvent();
+ modifiedEvent.event = mxEv.event;
+ modifiedEvent.sender = mxEv.sender;
+ modifiedEvent.event.type = "m.room.message";
+ modifiedEvent.event.content = modifiedContent;
+ return modifiedEvent;
+ }
+
protected async createMessageBody(mxEv: MatrixEvent, joined = false) {
let eventTile: string;
if (this.isAttachment(mxEv)) {
if (this.exportOptions.attachmentsIncluded) {
- const blob = await this.getMediaBlob(mxEv);
- this.totalSize += blob.size;
- const filePath = this.getFilePath(mxEv);
- eventTile = await this.getEventTile(mxEv, joined, filePath);
- if (this.totalSize > this.exportOptions.maxSize - 1024 * 1024) {
- this.exportOptions.attachmentsIncluded = false;
+ try {
+ const blob = await this.getMediaBlob(mxEv);
+ this.totalSize += blob.size;
+ const filePath = this.getFilePath(mxEv);
+ eventTile = await this.getEventTile(mxEv, joined, filePath);
+ if (this.totalSize > this.exportOptions.maxSize - 1024 * 512) {
+ this.exportOptions.attachmentsIncluded = false;
+ }
+ this.addFile(filePath, blob);
+ } catch (e) {
+ console.log("Error while fetching file");
+ eventTile = await this.getEventTile(
+ this.createModifiedEvent(_t("Error fetching file"), mxEv),
+ joined,
+ );
}
- this.addFile(filePath, blob);
} else {
- const modifiedContent = {
- msgtype: "m.text",
- body: `*${this.mediaOmitText}*`,
- format: "org.matrix.custom.html",
- formatted_body: `${this.mediaOmitText}`,
- }
- const modifiedEvent = new MatrixEvent();
- modifiedEvent.event = mxEv.event;
- modifiedEvent.sender = mxEv.sender;
- modifiedEvent.event.type = "m.room.message";
- modifiedEvent.event.content = modifiedContent;
- eventTile = await this.getEventTile(modifiedEvent, joined);
+ eventTile = await this.getEventTile(this.createModifiedEvent(this.mediaOmitText, mxEv), joined);
}
} else eventTile = await this.getEventTile(mxEv, joined);
@@ -305,14 +318,16 @@ export default class HTMLExporter extends Exporter {
protected async createHTML(events: MatrixEvent[]) {
let content = "";
let prevEvent = null;
- for (const event of events) {
+ for (let i = 0; i < events.length; i++) {
+ const event = events[i];
+ console.log("Processing event " + i + " out of " + events.length);
if (!haveTileForEvent(event)) continue;
content += this._wantsDateSeparator(event, prevEvent) ? this.getDateSeparator(event) : "";
const shouldBeJoined = !this._wantsDateSeparator(event, prevEvent)
&& shouldFormContinuation(prevEvent, event);
const body = await this.createMessageBody(event, shouldBeJoined);
-
+ this.totalSize += Buffer.byteLength(body);
content += body;
prevEvent = event;
}