50 lines
1.6 KiB
Python
Executable File
50 lines
1.6 KiB
Python
Executable File
# Copyright 2017-2019 MuK IT GmbH.
|
|
# Copyright 2020 Creu Blanca
|
|
# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
|
|
|
import os
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.tools.misc import file_path
|
|
|
|
|
|
class Thumbnail(models.AbstractModel):
|
|
_name = "dms.mixins.thumbnail"
|
|
_inherit = "image.mixin"
|
|
_description = "DMS thumbnail and icon mixin"
|
|
|
|
icon_url = fields.Char(string="Icon URL", compute="_compute_icon_url")
|
|
|
|
def _get_icon_disk_path(self):
|
|
"""Get the local disk path to record icon."""
|
|
name = self._get_icon_placeholder_name()
|
|
folders = ["dms", "static", "icons"]
|
|
|
|
try:
|
|
path = file_path(os.path.join(*folders, name))
|
|
except FileNotFoundError:
|
|
return file_path(os.path.join(*folders, "file_unknown.svg"))
|
|
|
|
return path or file_path(os.path.join(*folders, "file_unknown.svg"))
|
|
|
|
def _get_icon_placeholder_name(self):
|
|
return "folder.svg"
|
|
|
|
def _get_icon_url(self):
|
|
"""Obtain URL to record icon."""
|
|
local_path = self._get_icon_disk_path()
|
|
icon_name = os.path.basename(local_path)
|
|
return "/dms/static/icons/%s" % icon_name
|
|
|
|
@api.depends("image_128")
|
|
def _compute_icon_url(self):
|
|
"""Get icon static file URL."""
|
|
for one in self:
|
|
# Get URL to thumbnail or to the default icon by file extension
|
|
one.icon_url = (
|
|
f"/web/image/{one._name}/{one.id}/image_128/128x128?crop=1"
|
|
if one.image_128
|
|
else f"{one._get_icon_url()}?crop=1"
|
|
)
|