diff --git a/addons/website_slides/models/slide_slide_resource.py b/addons/website_slides/models/slide_slide_resource.py index 7cd7dbe97ab..7e6abd3cb7c 100644 --- a/addons/website_slides/models/slide_slide_resource.py +++ b/addons/website_slides/models/slide_slide_resource.py @@ -18,6 +18,7 @@ class SlideResource(models.Model): data = fields.Binary('Resource', compute='_compute_reset_resources', store=True, readonly=False) file_name = fields.Char(store=True) link = fields.Char('Link', compute='_compute_reset_resources', store=True, readonly=False) + download_url = fields.Char('Download URL', compute='_compute_download_url') _sql_constraints = [ ('check_url', "CHECK (resource_type != 'url' OR link IS NOT NULL)", 'A resource of type url must contain a link.'), @@ -46,17 +47,21 @@ class SlideResource(models.Model): new_name = self.link resource.name = new_name + @api.depends('name', 'file_name') + def _compute_download_url(self): + for resource in self: + extension = get_extension(resource.file_name) if resource.file_name else '' + if not resource.name: + resource.download_url = False + continue + file_name = resource.name if resource.name.endswith(extension) else resource.name + extension + resource.download_url = f'/web/content/slide.slide.resource/{resource.id}/data?' + url_encode({ + 'download': 'true', + 'filename': file_name, + }) + @api.constrains('data') def _check_link_type(self): for record in self: if record.resource_type != 'file' and record.data: raise ValidationError(_("Resource %(resource_name)s is a link and should not contain a data file", resource_name=record.name)) - - def _get_download_url(self): - self.ensure_one() - extension_file_name = get_extension(self.file_name) if self.file_name else '' - file_name = self.name if self.name.endswith(extension_file_name) else self.name + extension_file_name - return f'/web/content/slide.slide.resource/{self.id}/data?' + url_encode({ - 'download': 'true', - 'filename': file_name - }) diff --git a/addons/website_slides/tests/test_slide_resource.py b/addons/website_slides/tests/test_slide_resource.py index ff50501ff54..1e9b5ca69aa 100644 --- a/addons/website_slides/tests/test_slide_resource.py +++ b/addons/website_slides/tests/test_slide_resource.py @@ -85,4 +85,4 @@ class TestResources(common.SlidesCase, HttpCase): resource.write({'name': name, 'file_name': file_name}) with self.subTest(name=name, file_name=file_name, expected_download_name=expected_download_name): self.assertIn(f"filename*=UTF-8''{url_quote(expected_download_name)}", - self.url_open(resource._get_download_url()).headers['Content-Disposition']) + self.url_open(resource.download_url).headers['Content-Disposition']) diff --git a/addons/website_slides/views/website_slides_templates_lesson.xml b/addons/website_slides/views/website_slides_templates_lesson.xml index d337c0db439..bcd948e0b7e 100644 --- a/addons/website_slides/views/website_slides_templates_lesson.xml +++ b/addons/website_slides/views/website_slides_templates_lesson.xml @@ -182,7 +182,7 @@
diff --git a/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml b/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml index d35745495bd..15cd9381ce2 100644 --- a/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml +++ b/addons/website_slides/views/website_slides_templates_lesson_fullscreen.xml @@ -151,7 +151,7 @@