diff --git a/CHANGES.rst b/CHANGES.rst index f27097a..7379c8e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 5.5.6 (unreleased) ------------------ -- Nothing changed yet. +- Customize @download view to allow downloading miniature images with their original filename and not with miniature as filename. + [cekk] 5.5.5 (2024-09-23) diff --git a/src/redturtle/volto/browser/configure.zcml b/src/redturtle/volto/browser/configure.zcml index 126261b..80d99f0 100644 --- a/src/redturtle/volto/browser/configure.zcml +++ b/src/redturtle/volto/browser/configure.zcml @@ -80,4 +80,14 @@ permission="zope2.View" layer="redturtle.volto.interfaces.IRedturtleVoltoLayer" /> + + + + diff --git a/src/redturtle/volto/browser/download.py b/src/redturtle/volto/browser/download.py new file mode 100644 index 0000000..f534c5d --- /dev/null +++ b/src/redturtle/volto/browser/download.py @@ -0,0 +1,34 @@ +from plone import api +from plone.namedfile.browser import Download as BaseDownload +from plone.namedfile.utils import set_headers + + +class Download(BaseDownload): + """ + Customization to allow downloading miniature images with their original + filename and not with miniature as filename. + """ + + def set_headers(self, file): + """ + in self.filename we have the miniature name + """ + filename = getattr(file, "filename", None) + if self.filename: + # we are downloading a miniature + filename = f"{self.filename}_{filename}" + set_headers(file, self.request.response, filename=filename) + + def _getFile(self): + """ + in self.filename we have the miniature name + """ + if self.filename: + # we are downloading a miniature + view = api.content.get_view( + name="images", context=self.context, request=self.request + ) + scale = view.scale(scale=self.filename, fieldname=self.fieldname) + if scale: + return scale.data + return super()._getFile()