diff --git a/app/blueprints/api/endpoints.py b/app/blueprints/api/endpoints.py index 32bab02..4836fe0 100644 --- a/app/blueprints/api/endpoints.py +++ b/app/blueprints/api/endpoints.py @@ -304,7 +304,7 @@ def create_screenshot(token: APIToken, package: Package): if file is None: error(400, "Missing 'file' in multipart body") - return api_create_screenshot(token, package, data["title"], file) + return api_create_screenshot(token, package, data["title"], file, isYes(data.get("is_cover_image"))) @bp.route("/api/packages///screenshots//") diff --git a/app/blueprints/api/support.py b/app/blueprints/api/support.py index aa8ff53..32a86fb 100644 --- a/app/blueprints/api/support.py +++ b/app/blueprints/api/support.py @@ -69,13 +69,13 @@ def api_create_zip_release(token: APIToken, package: Package, title: str, file, }) -def api_create_screenshot(token: APIToken, package: Package, title: str, file, reason="API"): +def api_create_screenshot(token: APIToken, package: Package, title: str, file, is_cover_image: bool, reason="API"): if not token.canOperateOnPackage(package): error(403, "API token does not have access to the package") reason += ", token=" + token.name - ss : PackageScreenshot = guard(do_create_screenshot)(token.owner, package, title, file, reason) + ss : PackageScreenshot = guard(do_create_screenshot)(token.owner, package, title, file, is_cover_image, reason) return jsonify({ "success": True, diff --git a/app/blueprints/packages/screenshots.py b/app/blueprints/packages/screenshots.py index 58e8458..b6a2cc8 100644 --- a/app/blueprints/packages/screenshots.py +++ b/app/blueprints/packages/screenshots.py @@ -87,7 +87,7 @@ def create_screenshot(package): form = CreateScreenshotForm() if form.validate_on_submit(): try: - do_create_screenshot(current_user, package, form.title.data, form.fileUpload.data) + do_create_screenshot(current_user, package, form.title.data, form.fileUpload.data, False) return redirect(package.getURL("packages.screenshots")) except LogicError as e: flash(e.message, "danger") diff --git a/app/flatpages/help/api.md b/app/flatpages/help/api.md index 3403ce3..bf38810 100644 --- a/app/flatpages/help/api.md +++ b/app/flatpages/help/api.md @@ -234,6 +234,7 @@ curl -X DELETE https://content.minetest.net/api/packages/username/name/releases/ * Body is multipart form data. * `title`: human-readable name for the screenshot, shown as a caption and alt text. * `file`: multipart file to upload, like ``. + * `is_cover_image`: set cover image to this. * DELETE `/api/packages///screenshots//` (Delete) * Requires authentication. * Deletes screenshot. @@ -254,6 +255,11 @@ Examples: curl -X POST https://content.minetest.net/api/packages/username/name/screenshots/new/ \ -H "Authorization: Bearer YOURTOKEN" \ -F title="My Release" -F file=@path/to/screnshot.png + +# Create screenshot and set it as the cover image +curl -X POST https://content.minetest.net/api/packages/username/name/screenshots/new/ \ + -H "Authorization: Bearer YOURTOKEN" \ + -F title="My Release" -F file=@path/to/screnshot.png -F is_cover_image="true" # Delete screenshot curl -X DELETE https://content.minetest.net/api/packages/username/name/screenshots/3/ \ diff --git a/app/logic/screenshots.py b/app/logic/screenshots.py index 9eea434..c67c784 100644 --- a/app/logic/screenshots.py +++ b/app/logic/screenshots.py @@ -9,7 +9,7 @@ from app.utils import addNotification, addAuditLog from app.utils.image import get_image_size -def do_create_screenshot(user: User, package: Package, title: str, file, reason: str = None): +def do_create_screenshot(user: User, package: Package, title: str, file, is_cover_image: bool, reason: str = None): thirty_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=30) count = package.screenshots.filter(PackageScreenshot.created_at > thirty_minutes_ago).count() if count >= 20: @@ -47,6 +47,10 @@ def do_create_screenshot(user: User, package: Package, title: str, file, reason: db.session.commit() + if is_cover_image: + package.cover_image = ss + db.session.commit() + return ss