diff --git a/src/components/views/messages/MAudioBody.js b/src/components/views/messages/MAudioBody.js index 6c6a0527ea..9a8d401185 100644 --- a/src/components/views/messages/MAudioBody.js +++ b/src/components/views/messages/MAudioBody.js @@ -42,7 +42,7 @@ export default class MAudioBody extends React.Component { } _getContentUrl() { - if (this.props.forExport) return "forExport"; + if (this.props.forExport) return this.props.mxEvent.getContent().url; const media = mediaFromContent(this.props.mxEvent.getContent()); if (media.isEncrypted) { return this.state.decryptedUrl; diff --git a/src/components/views/messages/MImageBody.js b/src/components/views/messages/MImageBody.js index d854baec46..2916391f58 100644 --- a/src/components/views/messages/MImageBody.js +++ b/src/components/views/messages/MImageBody.js @@ -172,7 +172,7 @@ export default class MImageBody extends React.Component { } _getContentUrl() { - if (this.props.forExport) return "forExport"; + if (this.props.forExport) return this.props.mxEvent.getContent().url; const media = mediaFromContent(this.props.mxEvent.getContent()); if (media.isEncrypted) { return this.state.decryptedUrl; diff --git a/src/components/views/messages/MVideoBody.tsx b/src/components/views/messages/MVideoBody.tsx index a6d849e836..505a1b5a7e 100644 --- a/src/components/views/messages/MVideoBody.tsx +++ b/src/components/views/messages/MVideoBody.tsx @@ -78,7 +78,7 @@ export default class MVideoBody extends React.PureComponent { } private getContentUrl(): string|null { - if (this.props.forExport) return "forExport"; + if (this.props.forExport) return this.props.mxEvent.getContent().url; const media = mediaFromContent(this.props.mxEvent.getContent()); if (media.isEncrypted) { return this.state.decryptedUrl; diff --git a/src/utils/exportUtils/HtmlExport.tsx b/src/utils/exportUtils/HtmlExport.tsx index 7ece487cf7..f96efaea4b 100644 --- a/src/utils/exportUtils/HtmlExport.tsx +++ b/src/utils/exportUtils/HtmlExport.tsx @@ -263,7 +263,9 @@ export default class HTMLExporter extends Exporter { let eventTileMarkup = renderToStaticMarkup(eventTile); - if (filePath) eventTileMarkup = eventTileMarkup.replace(/(src=|href=)"forExport"/g, `$1"${filePath}"`); + if (filePath) { + eventTileMarkup = eventTileMarkup.split(mxEv.getContent().url).join(filePath); + } if (hasAvatar) { eventTileMarkup = eventTileMarkup.replace( encodeURI(this.getAvatarURL(mxEv)).replace(/&/g, '&'), diff --git a/src/utils/exportUtils/StreamToZip.ts b/src/utils/exportUtils/StreamToZip.ts index a411d35190..5e5b692793 100644 --- a/src/utils/exportUtils/StreamToZip.ts +++ b/src/utils/exportUtils/StreamToZip.ts @@ -136,7 +136,8 @@ export default function streamToZIP(underlyingSource: UnderlyingSource) { const date = new Date(typeof fileLike.lastModified === 'undefined' ? Date.now() : fileLike.lastModified); if (fileLike.directory && !name.endsWith('/')) name += '/'; - if (files[name]) throw new Error('File already exists.'); + // if file already exists, do not enqueue + if (files[name]) return; const nameBuf = encoder.encode(name); filenames.push(name);