You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by gc...@apache.org on 2023/04/28 21:45:13 UTC

[allura] 01/01: [#8508] adding unique id to uploaded screenshots

This is an automated email from the ASF dual-hosted git repository.

gcruz pushed a commit to branch gc/8508
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 269ba7abc6e4f6db8c937434537e830c03605d87
Author: Guillermo Cruz <gu...@slashdotmedia.com>
AuthorDate: Fri Apr 28 16:44:52 2023 -0500

    [#8508] adding unique id to uploaded screenshots
---
 Allura/allura/ext/admin/admin_main.py                    | 15 +++------------
 Allura/allura/model/project.py                           |  4 ++++
 Allura/allura/templates/widgets/project_screenshots.html |  2 +-
 3 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py
index 9dd17d062..08aec761d 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -52,6 +52,7 @@ from allura.lib.widgets.project_list import ProjectScreenshots
 
 from . import widgets as aw
 import six
+import uuid
 
 
 log = logging.getLogger(__name__)
@@ -517,6 +518,7 @@ class ProjectAdminController(BaseController):
     @require_post()
     @validate(W.screenshot_admin)
     def add_screenshot(self, screenshot=None, caption=None, **kw):
+        id = uuid.uuid1()
         require_access(c.project, 'update')
         screenshots = c.project.get_screenshots()
         if len(screenshots) >= 6:
@@ -525,18 +527,7 @@ class ProjectAdminController(BaseController):
         elif screenshot is not None and screenshot != '':
             future_bmp = False
             e_filename, e_fileext = os.path.splitext(screenshot.filename)
-            for screen in screenshots:
-                c_filename, c_fileext = os.path.splitext(screen.filename)
-                if c_fileext == '.png' and e_fileext.lower() == '.bmp' and e_filename == c_filename:
-                    future_bmp = True
-                    # If both filename(without ext.) equals and exiting file ext. is png and given file ext is bmp,
-                    # there will be two similar png files.
-
-                if screen.filename == screenshot.filename or future_bmp:
-                    screenshot.filename = re.sub(r'(.*)\.(.*)', r'\1-' + str(randint(1000, 9999)) + r'.\2',
-                                                 screenshot.filename)
-                    # if filename already exists append a random number
-                    break
+            screenshot.filename = f"{e_filename}-{id.hex[:8]}{e_fileext}"
             M.AuditLog.log('screenshots: added screenshot {} with caption "{}"'.format(
                 screenshot.filename, caption))
             sort = 1 + max([ss.sort or 0 for ss in screenshots] or [0])
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index e6ff5af2e..9d90bea39 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -94,6 +94,10 @@ class ProjectFile(File):
     caption = FieldProperty(str)
     sort = FieldProperty(int)
 
+    @LazyProperty
+    def screenshot_timestamp(self):
+        return timegm(self._id.generation_time.timetuple())
+
 
 class ProjectCategory(MappedClass):
 
diff --git a/Allura/allura/templates/widgets/project_screenshots.html b/Allura/allura/templates/widgets/project_screenshots.html
index 5aa5059d2..a595b5baf 100644
--- a/Allura/allura/templates/widgets/project_screenshots.html
+++ b/Allura/allura/templates/widgets/project_screenshots.html
@@ -25,7 +25,7 @@
   {% for ss in screenshots %}
   <div data-ss-id="{{ ss._id }}" class="screenshot">
     <div class="image">
-      <a class="lightbox" href="{{project.url()}}screenshot/{{h.urlquote(ss.filename)}}" ><img src="{{project.url()}}screenshot/{{h.urlquote(ss.filename)}}/thumb" alt="Screenshot thumbnail"/></a>
+      <a class="lightbox" href="{{project.url()}}screenshot/{{h.urlquote(ss.filename)}}" ><img src="{{project.url()}}screenshot/{{h.urlquote(ss.filename)}}/thumb?{{ ss.screenshot_timestamp }}" alt="Screenshot thumbnail"/></a>
       {% if not edit %}
       <br>
       {{ss.caption}}