aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2019-01-29 00:43:55 +0000
committerrubenwardy <rw@rubenwardy.com>2019-01-29 00:49:44 +0000
commit23c406bff9c0598f84be8dfcfa4a80f8093b05a6 (patch)
tree6119efe88a52cc97f1ccbd949a1de27cbe24da43
parent0f3adda59276abab6ba630b620d0a51c19a6412c (diff)
downloadcheatdb-23c406bff9c0598f84be8dfcfa4a80f8093b05a6.tar.xz
Add download counting
-rw-r--r--app/models.py7
-rw-r--r--app/templates/packages/view.html7
-rw-r--r--app/views/packages/packages.py5
-rw-r--r--app/views/packages/releases.py5
-rw-r--r--migrations/versions/9ec17b558413_.py28
5 files changed, 49 insertions, 3 deletions
diff --git a/app/models.py b/app/models.py
index f0ee43c..2337b0b 100644
--- a/app/models.py
+++ b/app/models.py
@@ -496,6 +496,12 @@ class Package(db.Model):
return None
+ def getDownloadCount(self):
+ counter = 0
+ for release in self.releases:
+ counter += release.downloads
+ return counter
+
def checkPerm(self, user, perm):
if not user.is_authenticated:
return False
@@ -639,6 +645,7 @@ class PackageRelease(db.Model):
approved = db.Column(db.Boolean, nullable=False, default=False)
task_id = db.Column(db.String(37), nullable=True)
commit_hash = db.Column(db.String(41), nullable=True, default=None)
+ downloads = db.Column(db.Integer, nullable=False, default=0)
min_rel_id = db.Column(db.Integer, db.ForeignKey("minetest_release.id"), nullable=True, server_default=None)
min_rel = db.relationship("MinetestRelease", foreign_keys=[min_rel_id])
diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html
index f28a18c..47a9247 100644
--- a/app/templates/packages/view.html
+++ b/app/templates/packages/view.html
@@ -24,6 +24,7 @@
<div class="row" style="margin-top: 2rem;">
<div class="col">
+ {{ package.getDownloadCount() }} downloads
</div>
<div class="btn-group-horizontal col-md-auto">
{% if package.repo %}<a class="btn btn-secondary" href="{{ package.repo }}">View Source</a>{% endif %}
@@ -112,7 +113,7 @@
<aside class="float-right ml-4" style="width: 18rem;">
{% if package.getDownloadRelease() %}
- <a class="btn btn-download btn-lg btn-block"
+ <a class="btn btn-download btn-lg btn-block" rel="nofollow"
href="{{ package.getDownloadURL() }}" class="btn_green">
Download
</a>
@@ -260,10 +261,10 @@
{% if not rel.approved %}<i>{% endif %}
- <a href="{{ rel.getDownloadURL() }}">{{ rel.title }}</a>{% if rel.commit_hash %}
+ <a href="{{ rel.getDownloadURL() }}" rel="nofollow">{{ rel.title }}</a>{% if rel.commit_hash %}
[{{ rel.commit_hash | truncate(5, end='') }}]{% endif %}<br>
<small>created {{ rel.releaseDate | datetime }}.</small>
- {% if rel.task_id %}
+ {% if (package.checkPerm(current_user, "MAKE_RELEASE") or package.checkPerm(current_user, "APPROVE_RELEASE")) and rel.task_id %}
<a href="{{ url_for('check_task', id=rel.task_id, r=package.getDetailsURL()) }}">Importing...</a>
{% elif not rel.approved %}
Waiting for approval.
diff --git a/app/views/packages/packages.py b/app/views/packages/packages.py
index 7ce4169..0fe4dc1 100644
--- a/app/views/packages/packages.py
+++ b/app/views/packages/packages.py
@@ -160,6 +160,11 @@ def package_download_page(package):
flash("No download available.", "error")
return redirect(package.getDetailsURL())
else:
+ PackageRelease.query.filter_by(id=release.id).update({
+ "downloads": PackageRelease.downloads + 1
+ })
+ db.session.commit()
+
return redirect(release.url, code=302)
diff --git a/app/views/packages/releases.py b/app/views/packages/releases.py
index f7730e2..7bc9b09 100644
--- a/app/views/packages/releases.py
+++ b/app/views/packages/releases.py
@@ -129,6 +129,11 @@ def download_release_page(package, id):
flash("No download available.", "error")
return redirect(package.getDetailsURL())
else:
+ PackageRelease.query.filter_by(id=release.id).update({
+ "downloads": PackageRelease.downloads + 1
+ })
+ db.session.commit()
+
return redirect(release.url, code=300)
@app.route("/packages/<author>/<name>/releases/<id>/", methods=["GET", "POST"])
diff --git a/migrations/versions/9ec17b558413_.py b/migrations/versions/9ec17b558413_.py
new file mode 100644
index 0000000..858c9bd
--- /dev/null
+++ b/migrations/versions/9ec17b558413_.py
@@ -0,0 +1,28 @@
+"""empty message
+
+Revision ID: 9ec17b558413
+Revises: 97a9c461bc2d
+Create Date: 2019-01-29 00:37:49.507631
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import postgresql
+
+# revision identifiers, used by Alembic.
+revision = '9ec17b558413'
+down_revision = '97a9c461bc2d'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('package_release', sa.Column('downloads', sa.Integer(), nullable=False, server_default="0"))
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column('package_release', 'downloads')
+ # ### end Alembic commands ###