diff --git a/src/components/ViewerComponent.vue b/src/components/ViewerComponent.vue index 54625e0aaa5..fd9cdd4e4e9 100644 --- a/src/components/ViewerComponent.vue +++ b/src/components/ViewerComponent.vue @@ -43,6 +43,7 @@ import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' import PlainTextReader from './PlainTextReader.vue' import MarkdownContentEditor from './Editor/MarkdownContentEditor.vue' import { translate, translatePlural } from '@nextcloud/l10n' +import { getClient, getRootPath } from '@nextcloud/files/dav' import getEditorInstance from './Editor.singleton.js' @@ -116,16 +117,27 @@ export default { useSourceView() { return ( this.source - && (this.fileVersion || !this.fileid || this.isEmbedded) + && (this.fileVersion + || !this.fileid + || this.isEmbedded + || this.isEncrypted) && !this.hasToggledInteractiveEmbedding ) }, + isEncrypted() { + return this.$attrs.e2EeIsEncrypted || false + }, + + isMarkdown() { + return ( + this.mime === 'text/markdown' || this.mime === 'text/x-web-markdown' + ) + }, + /** @return {boolean} */ readerComponent() { - return this.mime === 'text/markdown' - ? MarkdownContentEditor - : PlainTextReader + return this.isMarkdown ? MarkdownContentEditor : PlainTextReader }, }, @@ -143,15 +155,37 @@ export default { t: translate, async loadFileContent() { if (this.useSourceView) { - const response = await axios.get(this.source) - this.content = response.data - this.contentLoaded = true + if (this.isEncrypted) { + this.content = await this.fetchDecryptedContent() + this.contentLoaded = true + } else { + const response = await axios.get(this.source) + this.content = response.data + this.contentLoaded = true + } } this.$emit('update:loaded', true) }, toggleEdit() { this.hasToggledInteractiveEmbedding = true }, + async fetchDecryptedContent() { + const client = getClient() + const response = await client.getFileContents( + `${getRootPath()}${this.filename}`, + { details: true }, + ) + const blob = new Blob([response.data], { + type: response.headers['content-type'], + }) + const reader = new FileReader() + reader.readAsText(blob) + return new Promise((resolve) => { + reader.onload = () => { + resolve(reader.result) + } + }) + }, }, } diff --git a/src/helpers/mime.js b/src/helpers/mime.js index de5ba9b2748..b66cf18db01 100644 --- a/src/helpers/mime.js +++ b/src/helpers/mime.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -const openMimetypesMarkdown = ['text/markdown'] +const openMimetypesMarkdown = ['text/markdown', 'text/x-web-markdown'] const openMimetypesPlainText = [ 'text/plain',