]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add download counting
authorrubenwardy <rw@rubenwardy.com>
Tue, 29 Jan 2019 00:43:55 +0000 (00:43 +0000)
committerrubenwardy <rw@rubenwardy.com>
Tue, 29 Jan 2019 00:49:44 +0000 (00:49 +0000)
app/models.py
app/templates/packages/view.html
app/views/packages/packages.py
app/views/packages/releases.py
migrations/versions/9ec17b558413_.py [new file with mode: 0644]

index f0ee43c3d59f0228d75dd1cc25401973feaf21d5..2337b0b658f95c01e9978aebcbbe5776f3611e38 100644 (file)
@@ -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])
index f28a18c5e565853b3fb025c7b0be4dabcca43a2d..47a9247fe928d21a2863c2dafd407bdc0e238ef9 100644 (file)
@@ -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 %}
 
                <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>
 
                                                                {% 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.
index 7ce41691dcb6a9cf7977a04591b093e5f2df7728..0fe4dc1b0783b7c2edeb836dffffbb91090fc714 100644 (file)
@@ -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)
 
 
index f7730e215250a8a2b4aa138aac0ece62e6aa7405..7bc9b09ba1ccfb4ae4ee99a57bd8492fb3bbaf8b 100644 (file)
@@ -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 (file)
index 0000000..858c9bd
--- /dev/null
@@ -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 ###