]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add delete unused uploads admin function
authorrubenwardy <rw@rubenwardy.com>
Sat, 30 May 2020 15:48:37 +0000 (16:48 +0100)
committerrubenwardy <rw@rubenwardy.com>
Sat, 30 May 2020 15:48:37 +0000 (16:48 +0100)
app/blueprints/admin/admin.py
app/templates/admin/list.html
app/utils.py

index 9af9c17ce850fdc8d7bc753b30f03c6c36d34249..eca7ff2f1766ce900387d8f638b3387a6bab5a63 100644 (file)
@@ -26,7 +26,7 @@ from app.tasks.forumtasks  import importTopicList, checkAllForumAccounts
 from flask_wtf import FlaskForm
 from wtforms import *
 from app.utils import loginUser, rank_required, triggerNotif
-import datetime
+import datetime, os
 
 @bp.route("/admin/", methods=["GET", "POST"])
 @rank_required(UserRank.ADMIN)
@@ -114,6 +114,35 @@ def admin_page():
                                triggerNotif(package.author, current_user, msg, rel.getEditURL())
                                db.session.commit()
 
+               elif action == "cleanuploads":
+                       upload_dir = app.config['UPLOAD_DIR']
+
+                       (_, _, filenames) = next(os.walk(upload_dir))
+                       existing_uploads = set(filenames)
+
+                       if len(existing_uploads) != 0:
+                               def getURLsFromDB(column):
+                                       results = db.session.query(column).filter(column != None, column != "").all()
+                                       return set([os.path.basename(x[0]) for x in results])
+
+                               release_urls = getURLsFromDB(PackageRelease.url)
+                               screenshot_urls = getURLsFromDB(PackageScreenshot.url)
+
+                               db_urls = release_urls.union(screenshot_urls)
+                               unreachable = existing_uploads.difference(db_urls)
+
+                               import sys
+                               print("On Disk: ", existing_uploads, file=sys.stderr)
+                               print("In DB: ", db_urls, file=sys.stderr)
+                               print("Unreachable: ", unreachable, file=sys.stderr)
+
+                               for filename in unreachable:
+                                       os.remove(os.path.join(upload_dir, filename))
+
+                               flash("Deleted " + str(len(unreachable)) + " unreachable uploads", "success")
+                       else:
+                               flash("No downloads to create", "danger")
+
                else:
                        flash("Unknown action: " + action, "danger")
 
index 48158df8ab3b3e532e93f82202e2f06da939e773..59dc8a09f423291c8c5f3f68dbce57da8b72cf09 100644 (file)
@@ -25,6 +25,7 @@
                                <option value="recalcscores">Recalculate package scores</option>
                                <option value="checkusers">Check forum users</option>
                                <option value="importscreenshots">Import screenshots from VCS</option>
+                               <option value="cleanuploads">Delete unreachable uploads</option>
                                <!-- <option value="importdepends">Import dependencies from downloads</option> -->
                                <!-- <option value="modprovides">Set provides to mod name</option> -->
                                <!-- <option value="vcsrelease">Create VCS releases</option> -->
index 73ce4e7b01ad99e605968f7428b54f5420117890..bb24920b8c9ca83e856ba65687151645fc1ee4c5 100644 (file)
@@ -73,7 +73,7 @@ def doFileUpload(file, fileType, fileTypeDesc):
 
        ext = getExtension(file.filename)
        if ext is None or not ext in allowedExtensions:
-               flash("Please upload load " + fileTypeDesc, "danger")
+               flash("Please upload " + fileTypeDesc, "danger")
                return None, None
 
        if isImage and not isAllowedImage(file.stream.read()):