summaryrefslogtreecommitdiff
path: root/addons/web_editor/models/ir_attachment.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web_editor/models/ir_attachment.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web_editor/models/ir_attachment.py')
-rw-r--r--addons/web_editor/models/ir_attachment.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/addons/web_editor/models/ir_attachment.py b/addons/web_editor/models/ir_attachment.py
new file mode 100644
index 00000000..791f9194
--- /dev/null
+++ b/addons/web_editor/models/ir_attachment.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from werkzeug.urls import url_quote
+
+from odoo import api, models, fields, tools
+
+SUPPORTED_IMAGE_MIMETYPES = ['image/gif', 'image/jpe', 'image/jpeg', 'image/jpg', 'image/gif', 'image/png', 'image/svg+xml']
+
+class IrAttachment(models.Model):
+
+ _inherit = "ir.attachment"
+
+ local_url = fields.Char("Attachment URL", compute='_compute_local_url')
+ image_src = fields.Char(compute='_compute_image_src')
+ image_width = fields.Integer(compute='_compute_image_size')
+ image_height = fields.Integer(compute='_compute_image_size')
+ original_id = fields.Many2one('ir.attachment', string="Original (unoptimized, unresized) attachment", index=True)
+
+ def _compute_local_url(self):
+ for attachment in self:
+ if attachment.url:
+ attachment.local_url = attachment.url
+ else:
+ attachment.local_url = '/web/image/%s?unique=%s' % (attachment.id, attachment.checksum)
+
+ @api.depends('mimetype', 'url', 'name')
+ def _compute_image_src(self):
+ for attachment in self:
+ # Only add a src for supported images
+ if attachment.mimetype not in SUPPORTED_IMAGE_MIMETYPES:
+ attachment.image_src = False
+ continue
+
+ if attachment.type == 'url':
+ attachment.image_src = attachment.url
+ else:
+ # Adding unique in URLs for cache-control
+ unique = attachment.checksum[:8]
+ if attachment.url:
+ # For attachments-by-url, unique is used as a cachebuster. They
+ # currently do not leverage max-age headers.
+ attachment.image_src = '%s?unique=%s' % (attachment.url, unique)
+ else:
+ name = url_quote(attachment.name)
+ attachment.image_src = '/web/image/%s-%s/%s' % (attachment.id, unique, name)
+
+ @api.depends('datas')
+ def _compute_image_size(self):
+ for attachment in self:
+ try:
+ image = tools.base64_to_image(attachment.datas)
+ attachment.image_width = image.width
+ attachment.image_height = image.height
+ except Exception:
+ attachment.image_width = 0
+ attachment.image_height = 0
+
+ def _get_media_info(self):
+ """Return a dict with the values that we need on the media dialog."""
+ self.ensure_one()
+ return self._read_format(['id', 'name', 'description', 'mimetype', 'checksum', 'url', 'type', 'res_id', 'res_model', 'public', 'access_token', 'image_src', 'image_width', 'image_height', 'original_id'])[0]