diff options
author | rubenwardy <rw@rubenwardy.com> | 2018-03-23 16:20:56 +0000 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2018-03-23 16:21:06 +0000 |
commit | 5a9fc51ffcc4744179687540df50b5a778275099 (patch) | |
tree | 93b82d51f7994299d94f686f65bc16a43bd5fffa | |
parent | 570dd519df311b159fd1416be9162700c623db6b (diff) | |
download | cheatdb-5a9fc51ffcc4744179687540df50b5a778275099.tar.xz |
Add download button and URL
-rw-r--r-- | app/models.py | 12 | ||||
-rw-r--r-- | app/templates/packages/view.html | 1 | ||||
-rw-r--r-- | app/views/packages.py | 17 |
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")]) |