From f9611105e6e0cdaa4e7b64195342c727171dbe4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Fri, 12 May 2023 10:26:39 +0000 Subject: [PATCH] [REF] mail: clean attachment url Part-of: odoo/odoo#121256 --- .../static/src/attachments/attachment_list.js | 17 ++--- .../src/attachments/attachment_model.js | 67 +++++++++++-------- .../src/attachments/attachment_view.xml | 4 +- .../src/attachments/attachment_viewer.js | 2 +- .../src/attachments/attachment_viewer.xml | 2 +- 5 files changed, 48 insertions(+), 44 deletions(-) diff --git a/addons/mail/static/src/attachments/attachment_list.js b/addons/mail/static/src/attachments/attachment_list.js index 26a1c9acecc..b65be4154b5 100644 --- a/addons/mail/static/src/attachments/attachment_list.js +++ b/addons/mail/static/src/attachments/attachment_list.js @@ -8,6 +8,7 @@ import { sprintf } from "@web/core/utils/strings"; import { useAttachmentViewer } from "./attachment_viewer_hook"; import { _t } from "@web/core/l10n/translation"; +import { url } from "@web/core/utils/urls"; /** * @typedef {Object} Props @@ -45,20 +46,14 @@ export class AttachmentList extends Component { * @param {import("@mail/attachments/attachment_model").Attachment} attachment */ getImageUrl(attachment) { - const { imagesHeight } = this.props; if (attachment.uploading && attachment.tmpUrl) { return attachment.tmpUrl; } - if ( - !this.env.inComposer && - !this.env.inChatter && - !attachment.accessToken && - attachment.originThread?.model === "discuss.channel" - ) { - return `/discuss/channel/${attachment.originThread?.id}/image/${attachment.id}/${this.imagesWidth}x${imagesHeight}`; - } - const accessToken = attachment.accessToken ? `?access_token=${attachment.accessToken}` : ""; - return `/web/image/${attachment.id}/${this.imagesWidth}x${imagesHeight}${accessToken}`; + return url(attachment.urlRoute, { + ...attachment.urlQueryParams, + width: this.imagesWidth, + height: this.props.imagesHeight, + }); } /** diff --git a/addons/mail/static/src/attachments/attachment_model.js b/addons/mail/static/src/attachments/attachment_model.js index e874afb557b..52cf58d0504 100644 --- a/addons/mail/static/src/attachments/attachment_model.js +++ b/addons/mail/static/src/attachments/attachment_model.js @@ -1,5 +1,8 @@ /* @odoo-module */ +import { assignDefined } from "@mail/utils/misc"; +import { url } from "@web/core/utils/urls"; + export class Attachment { /** @type {import("@mail/core/store_service").Store} */ _store; @@ -85,28 +88,10 @@ export class Attachment { ); } - get imageUrl() { - if (!this.isImage) { - return ""; - } - if (!this.accessToken && this.originThread?.model === "discuss.channel") { - return `/discuss/channel/${this.originThread.id}/image/${this.id}`; - } - const accessToken = this.accessToken ? `?access_token=${this.accessToken}` : ""; - return `/web/image/${this.id}${accessToken}`; - } - get defaultSource() { - if (this.isImage) { - return `/web/image/${this.id}?signature=${this.checksum}`; - } + const route = url(this.urlRoute, this.urlQueryParams); if (this.isPdf) { - const pdf_lib = "/web/static/lib/pdfjs/web/viewer.html?file="; - if (!this.accessToken && this.originThread?.model === "discuss.channel") { - return `${pdf_lib}/discuss/channel/${this.originThread.id}/attachment/${this.id}#pagemode=none`; - } - const accessToken = this.accessToken ? `?access_token%3D${this.accessToken}` : ""; - return `${pdf_lib}/web/content/${this.id}${accessToken}#pagemode=none`; + return `/web/static/lib/pdfjs/web/viewer.html?file=${route}#pagemode=none`; } if (this.isUrlYoutube) { const urlArr = this.url.split("/"); @@ -120,18 +105,42 @@ export class Attachment { } return `https://www.youtube.com/embed/${token}`; } - if (!this.accessToken && this.originThread?.model === "discuss.channel") { - return `/discuss/channel/${this.originThread.id}/attachment/${this.id}`; - } - const accessToken = this.accessToken ? `?access_token=${this.accessToken}` : ""; - return `/web/content/${this.id}${accessToken}`; + return route; } get downloadUrl() { - if (!this.accessToken && this.originThread?.model === "discuss.channel") { - return `/discuss/channel/${this.originThread.id}/attachment/${this.id}?download=true`; + return url(this.urlRoute, { ...this.urlQueryParams, download: true }); + } + + /** + * @returns {string} + */ + get urlRoute() { + if (this.uploading && this.tmpUrl) { + return this.tmpUrl; } - const accessToken = this.accessToken ? `access_token=${this.accessToken}&` : ""; - return `/web/content/ir.attachment/${this.id}/datas?${accessToken}download=true`; + if (!this.accessToken && this.originThread?.model === "discuss.channel") { + return this.isImage + ? `/discuss/channel/${this.originThread.id}/image/${this.id}` + : `/discuss/channel/${this.originThread.id}/attachment/${this.id}`; + } + return this.isImage ? `/web/image/${this.id}` : `/web/content/ir.attachment/${this.id}`; + } + + /** + * @returns {Object} + */ + get urlQueryParams() { + if (this.uploading && this.tmpUrl) { + return {}; + } + return assignDefined( + {}, + { + access_token: this.accessToken, + filename: this.name || undefined, + unique: this.checksum, + } + ); } } diff --git a/addons/mail/static/src/attachments/attachment_view.xml b/addons/mail/static/src/attachments/attachment_view.xml index a56977c3def..c325409a070 100644 --- a/addons/mail/static/src/attachments/attachment_view.xml +++ b/addons/mail/static/src/attachments/attachment_view.xml @@ -6,9 +6,9 @@

- +
-