diff options
author | rubenwardy <rw@rubenwardy.com> | 2019-01-29 00:43:55 +0000 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2019-01-29 00:49:44 +0000 |
commit | 23c406bff9c0598f84be8dfcfa4a80f8093b05a6 (patch) | |
tree | 6119efe88a52cc97f1ccbd949a1de27cbe24da43 | |
parent | 0f3adda59276abab6ba630b620d0a51c19a6412c (diff) | |
download | cheatdb-23c406bff9c0598f84be8dfcfa4a80f8093b05a6.tar.xz |
Add download counting
-rw-r--r-- | app/models.py | 7 | ||||
-rw-r--r-- | app/templates/packages/view.html | 7 | ||||
-rw-r--r-- | app/views/packages/packages.py | 5 | ||||
-rw-r--r-- | app/views/packages/releases.py | 5 | ||||
-rw-r--r-- | migrations/versions/9ec17b558413_.py | 28 |
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 ### |