aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2018-03-23 16:20:56 +0000
committerrubenwardy <rw@rubenwardy.com>2018-03-23 16:21:06 +0000
commit5a9fc51ffcc4744179687540df50b5a778275099 (patch)
tree93b82d51f7994299d94f686f65bc16a43bd5fffa
parent570dd519df311b159fd1416be9162700c623db6b (diff)
downloadcheatdb-5a9fc51ffcc4744179687540df50b5a778275099.tar.xz
Add download button and URL
-rw-r--r--app/models.py12
-rw-r--r--app/templates/packages/view.html1
-rw-r--r--app/views/packages.py17
3 files changed, 30 insertions, 0 deletions
diff --git a/app/models.py b/app/models.py
index 9aab1b5..4b16b04 100644
--- a/app/models.py
+++ b/app/models.py
@@ -147,6 +147,18 @@ class Package(db.Model):
type=self.type.toName(),
author=self.author.username, name=self.name)
+ def getDownloadURL(self):
+ return url_for("package_download_page",
+ type=self.type.toName(),
+ author=self.author.username, name=self.name)
+
+ def getDownloadRelease(self):
+ for rel in self.releases:
+ if rel.approved:
+ return rel
+
+ return None
+
def checkPerm(self, user, perm):
if not user.is_authenticated:
return False
diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html
index d0d13e1..4ccb4d7 100644
--- a/app/templates/packages/view.html
+++ b/app/templates/packages/view.html
@@ -39,6 +39,7 @@
</table>
<ul class="buttonset linedbuttonset">
+ {% if package.getDownloadRelease() %}<li><a href="{{ package.getDownloadURL() }}">Download</a></li>{% endif %}
{% if package.repo %}<li><a href="{{ package.repo }}">View Source</a></li>{% endif %}
{% if package.forums %}<li><a href="https://forum.minetest.net/viewtopic.php?t={{ package.forums }}">Forums</a></li>{% endif %}
{% if package.issueTracker %}<li><a href="{{ package.issueTracker }}">Issue Tracker</a></li>{% endif %}
diff --git a/app/views/packages.py b/app/views/packages.py
index 142b87a..1eee29c 100644
--- a/app/views/packages.py
+++ b/app/views/packages.py
@@ -96,6 +96,23 @@ def package_page(type, author, name):
return render_template("packages/view.html", package=package, releases=releases)
+@app.route("/<type>s/<author>/<name>/download/")
+def package_download_page(type, author, name):
+ package = getPageByInfo(type, author, name)
+ release = package.getDownloadRelease()
+
+ if release is None:
+ wantsJson = "application/zip" in request.accept_mimetypes and \
+ not "text/html" in request.accept_mimetypes
+
+ if wantsJson:
+ return "", 204
+ else:
+ flash("No download available.", "error")
+ return redirect(package.getDetailsURL())
+ else:
+ return redirect(release.url, code=302)
+
class PackageForm(FlaskForm):
name = StringField("Name", [InputRequired(), Length(1, 20), Regexp("^[a-z0-9_]", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])