]> git.ipfire.org Git - ipfire.org.git/commitdiff
nopaste: Correctly count views
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 22 Feb 2024 19:09:08 +0000 (19:09 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 22 Feb 2024 19:09:08 +0000 (19:09 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/nopaste.py
src/web/nopaste.py

index b5a81e703b660672a9799f6a9eeed603c35a6131..a4b964e2f44f7cfd79732127c2e473857a3c982b 100644 (file)
@@ -129,10 +129,6 @@ class Nopaste(Object):
                if res:
                        return bytes(res.content)
 
-       def _update_lastseen(self, uuid):
-               self.db.execute("UPDATE nopaste SET time_lastseen = NOW(), views = views + 1 \
-                       WHERE uuid = %s", uuid)
-
        def cleanup(self):
                """
                        Removes all expired pastes and removes any unneeded blobs
@@ -245,6 +241,23 @@ class Paste(Object):
        def account(self):
                return None
 
+       # Viewed?
+
+       def viewed(self):
+               """
+                       Call this when this paste has been viewed/downloaded/etc.
+               """
+               self.db.execute("""
+                       UPDATE
+                               nopaste
+                       SET
+                               last_accessed_at = CURRENT_TIMESTAMP,
+                               views = views + 1
+                       WHERE
+                               id = %s
+                       """, self.id,
+               )
+
 
 class Service(tornado.tcpserver.TCPServer):
        def __init__(self, config, **kwargs):
index 4791e9b9b6765075959e0f54938e757b64d3c2d1..36b35675c3b7e8f1c4df412d3b5aca81b59fde4f 100644 (file)
@@ -64,9 +64,13 @@ class CreateHandler(base.AnalyticsMixin, base.BaseHandler):
 
 class RawHandler(base.AnalyticsMixin, base.BaseHandler):
        def get(self, uid):
-               entry = self.backend.nopaste.get(uid)
-               if not entry:
-                       raise tornado.web.HTTPError(404)
+               with self.db.transaction():
+                       entry = self.backend.nopaste.get(uid)
+                       if not entry:
+                               raise tornado.web.HTTPError(404)
+
+                       # This has received a view
+                       entry.viewed()
 
                # Set the filename
                self.set_header("Content-Disposition", "inline; filename=\"%s\"" % entry.subject)
@@ -84,9 +88,13 @@ class RawHandler(base.AnalyticsMixin, base.BaseHandler):
 
 class ViewHandler(base.AnalyticsMixin, base.BaseHandler):
        def get(self, uid):
-               entry = self.backend.nopaste.get(uid)
-               if not entry:
-                       raise tornado.web.HTTPError(404)
+               with self.db.transaction():
+                       entry = self.backend.nopaste.get(uid)
+                       if not entry:
+                               raise tornado.web.HTTPError(404)
+
+                       # This has received a view
+                       entry.viewed()
 
                # Fetch the content if the output should be displayed
                if entry.mimetype.startswith("text/"):