mirror of
https://gitlab.com/SIGBUS/nyaa.git
synced 2024-12-22 09:10:00 +00:00
Move /view/<int:torrent_id> route into 'torrents' blueprint
and update templates.
This commit is contained in:
parent
42535bbdab
commit
9acdd14e81
|
@ -109,7 +109,7 @@ def v2_api_upload():
|
|||
|
||||
# Create a response dict with relevant data
|
||||
torrent_metadata = {
|
||||
'url': flask.url_for('view_torrent', torrent_id=torrent.id, _external=True),
|
||||
'url': flask.url_for('torrents.view', torrent_id=torrent.id, _external=True),
|
||||
'id': torrent.id,
|
||||
'name': torrent.display_name,
|
||||
'hash': torrent.info_hash.hex(),
|
||||
|
@ -306,7 +306,7 @@ def v2_api_info(torrent_id_or_hash):
|
|||
# Create a response dict with relevant data
|
||||
torrent_metadata = {
|
||||
'submitter': submitter,
|
||||
'url': flask.url_for('view_torrent', torrent_id=torrent.id, _external=True),
|
||||
'url': flask.url_for('torrents.view', torrent_id=torrent.id, _external=True),
|
||||
'id': torrent.id,
|
||||
'name': torrent.display_name,
|
||||
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
import json
|
||||
import os.path
|
||||
from urllib.parse import quote
|
||||
|
||||
import flask
|
||||
from werkzeug.datastructures import CombinedMultiDict
|
||||
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
from nyaa import api_handler, app, backend, db, forms, models, template_utils, torrents, views
|
||||
from nyaa.utils import cached_function
|
||||
|
||||
|
@ -58,74 +55,13 @@ def upload():
|
|||
if flask.request.method == 'POST' and upload_form.validate():
|
||||
torrent = backend.handle_torrent_upload(upload_form, flask.g.user)
|
||||
|
||||
return flask.redirect('/view/' + str(torrent.id))
|
||||
return flask.redirect(flask.url_for('torrents.view', torrent_id=torrent.id))
|
||||
else:
|
||||
# If we get here with a POST, it means the form data was invalid: return a non-okay status
|
||||
status_code = 400 if flask.request.method == 'POST' else 200
|
||||
return flask.render_template('upload.html', upload_form=upload_form), status_code
|
||||
|
||||
|
||||
@app.route('/view/<int:torrent_id>', methods=['GET', 'POST'])
|
||||
def view_torrent(torrent_id):
|
||||
if flask.request.method == 'POST':
|
||||
torrent = models.Torrent.by_id(torrent_id)
|
||||
else:
|
||||
torrent = models.Torrent.query \
|
||||
.options(joinedload('filelist'),
|
||||
joinedload('comments')) \
|
||||
.filter_by(id=torrent_id) \
|
||||
.first()
|
||||
if not torrent:
|
||||
flask.abort(404)
|
||||
|
||||
# Only allow admins see deleted torrents
|
||||
if torrent.deleted and not (flask.g.user and flask.g.user.is_moderator):
|
||||
flask.abort(404)
|
||||
|
||||
comment_form = None
|
||||
if flask.g.user:
|
||||
comment_form = forms.CommentForm()
|
||||
|
||||
if flask.request.method == 'POST':
|
||||
if not flask.g.user:
|
||||
flask.abort(403)
|
||||
|
||||
if comment_form.validate():
|
||||
comment_text = (comment_form.comment.data or '').strip()
|
||||
|
||||
comment = models.Comment(
|
||||
torrent_id=torrent_id,
|
||||
user_id=flask.g.user.id,
|
||||
text=comment_text)
|
||||
|
||||
db.session.add(comment)
|
||||
db.session.flush()
|
||||
|
||||
torrent_count = torrent.update_comment_count()
|
||||
db.session.commit()
|
||||
|
||||
flask.flash('Comment successfully posted.', 'success')
|
||||
|
||||
return flask.redirect(flask.url_for('view_torrent',
|
||||
torrent_id=torrent_id,
|
||||
_anchor='com-' + str(torrent_count)))
|
||||
|
||||
# Only allow owners and admins to edit torrents
|
||||
can_edit = flask.g.user and (flask.g.user is torrent.user or flask.g.user.is_moderator)
|
||||
|
||||
files = None
|
||||
if torrent.filelist:
|
||||
files = json.loads(torrent.filelist.filelist_blob.decode('utf-8'))
|
||||
|
||||
report_form = forms.ReportForm()
|
||||
return flask.render_template('view.html', torrent=torrent,
|
||||
files=files,
|
||||
comment_form=comment_form,
|
||||
comments=torrent.comments,
|
||||
can_edit=can_edit,
|
||||
report_form=report_form)
|
||||
|
||||
|
||||
@app.route('/view/<int:torrent_id>/comment/<int:comment_id>/delete', methods=['POST'])
|
||||
def delete_comment(torrent_id, comment_id):
|
||||
if not flask.g.user:
|
||||
|
@ -145,7 +81,7 @@ def delete_comment(torrent_id, comment_id):
|
|||
db.session.flush()
|
||||
torrent.update_comment_count()
|
||||
|
||||
url = flask.url_for('view_torrent', torrent_id=torrent.id)
|
||||
url = flask.url_for('torrents.view', torrent_id=torrent.id)
|
||||
if flask.g.user.is_moderator:
|
||||
log = "Comment deleted on torrent [#{}]({})".format(torrent.id, url)
|
||||
adminlog = models.AdminLog(log=log, admin_id=flask.g.user.id)
|
||||
|
@ -196,7 +132,7 @@ def edit_torrent(torrent_id):
|
|||
if editor.is_moderator:
|
||||
torrent.deleted = form.is_deleted.data
|
||||
|
||||
url = flask.url_for('view_torrent', torrent_id=torrent.id)
|
||||
url = flask.url_for('torrents.view', torrent_id=torrent.id)
|
||||
if deleted_changed and editor.is_moderator:
|
||||
log = "Torrent [#{0}]({1}) marked as {2}".format(
|
||||
torrent.id, url, "deleted" if torrent.deleted else "undeleted")
|
||||
|
@ -279,7 +215,7 @@ def submit_report(torrent_id):
|
|||
db.session.commit()
|
||||
flask.flash('Successfully reported torrent!', 'success')
|
||||
|
||||
return flask.redirect(flask.url_for('view_torrent', torrent_id=torrent_id))
|
||||
return flask.redirect(flask.url_for('torrents.view', torrent_id=torrent_id))
|
||||
|
||||
|
||||
def _get_cached_torrent_file(torrent):
|
||||
|
@ -307,6 +243,7 @@ def register_blueprints(flask_app):
|
|||
flask_app.register_blueprint(views.admin_bp)
|
||||
flask_app.register_blueprint(views.main_bp)
|
||||
flask_app.register_blueprint(views.site_bp)
|
||||
flask_app.register_blueprint(views.torrents_bp)
|
||||
flask_app.register_blueprint(views.users_bp)
|
||||
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{% from "_formhelpers.html" import render_field %}
|
||||
{% from "_formhelpers.html" import render_markdown_editor %}
|
||||
|
||||
{% set torrent_url = url_for('view_torrent', torrent_id=torrent.id) %}
|
||||
{% set torrent_url = url_for('torrents.view', torrent_id=torrent.id) %}
|
||||
<h1>
|
||||
Edit Torrent <a href="{{ torrent_url }}">#{{torrent.id}}</a>
|
||||
{% if (torrent.user != None) and (torrent.user != g.user) %}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ url_for('view_torrent', torrent_id=report.torrent.id) }}">{{ report.torrent.display_name }}</a>
|
||||
<a href="{{ url_for('torrents.view', torrent_id=report.torrent.id) }}">{{ report.torrent.display_name }}</a>
|
||||
by <a href="{{ url_for('users.view_user', user_name=report.torrent.user.username) }}">
|
||||
{{ report.torrent.user.username }}</a>
|
||||
{% if g.user.is_superadmin and report.torrent.uploader_ip %}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
{% else %}
|
||||
<link>{{ create_magnet_from_es_info(torrent.display_name, torrent.info_hash) }}</link>
|
||||
{% endif %}
|
||||
<guid isPermaLink="true">{{ url_for('view_torrent', torrent_id=torrent.meta.id, _external=True) }}</guid>
|
||||
<guid isPermaLink="true">{{ url_for('torrents.view', torrent_id=torrent.meta.id, _external=True) }}</guid>
|
||||
<pubDate>{{ torrent.created_time|rfc822_es }}</pubDate>
|
||||
|
||||
<nyaa:seeders> {{- torrent.seed_count }}</nyaa:seeders>
|
||||
|
@ -28,7 +28,7 @@
|
|||
{% else %}
|
||||
<link>{{ torrent.magnet_uri }}</link>
|
||||
{% endif %}
|
||||
<guid isPermaLink="true">{{ url_for('view_torrent', torrent_id=torrent.id, _external=True) }}</guid>
|
||||
<guid isPermaLink="true">{{ url_for('torrents.view', torrent_id=torrent.id, _external=True) }}</guid>
|
||||
<pubDate>{{ torrent.created_time|rfc822 }}</pubDate>
|
||||
|
||||
<nyaa:seeders> {{- torrent.stats.seed_count }}</nyaa:seeders>
|
||||
|
@ -41,7 +41,7 @@
|
|||
<nyaa:category> {{- category_name(cat_id) }}</nyaa:category>
|
||||
<nyaa:size> {{- torrent.filesize | filesizeformat(True) }}</nyaa:size>
|
||||
{% set torrent_id = use_elastic and torrent.meta.id or torrent.id %}
|
||||
<description><![CDATA[<a href="{{ url_for('view_torrent', torrent_id=torrent_id, _external=True) }}">#{{ torrent_id }} | {{ torrent.display_name }}</a> | {{ torrent.filesize | filesizeformat(True) }} | {{ category_name(cat_id) }} | {{ use_elastic and torrent.info_hash or torrent.info_hash_as_hex | upper }}]]></description>
|
||||
<description><![CDATA[<a href="{{ url_for('torrents.view', torrent_id=torrent_id, _external=True) }}">#{{ torrent_id }} | {{ torrent.display_name }}</a> | {{ torrent.filesize | filesizeformat(True) }} | {{ category_name(cat_id) }} | {{ use_elastic and torrent.info_hash or torrent.info_hash_as_hex | upper }}]]></description>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</channel>
|
||||
|
|
|
@ -73,14 +73,14 @@
|
|||
{% set torrent_id = torrent.meta.id if use_elastic else torrent.id %}
|
||||
{% set com_count = torrent.comment_count %}
|
||||
{% if com_count %}
|
||||
<a href="{{ url_for('view_torrent', torrent_id=torrent_id, _anchor='comments') }}" class="comments" title="{{ '{c} comment{s}'.format(c=com_count, s='s' if com_count > 1 else '') }}">
|
||||
<a href="{{ url_for('torrents.view', torrent_id=torrent_id, _anchor='comments') }}" class="comments" title="{{ '{c} comment{s}'.format(c=com_count, s='s' if com_count > 1 else '') }}">
|
||||
<i class="fa fa-comments-o"></i>{{ com_count -}}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if use_elastic %}
|
||||
<a href="{{ url_for('view_torrent', torrent_id=torrent_id) }}" title="{{ torrent.display_name | escape }}">{%if "highlight" in torrent.meta %}{{ torrent.meta.highlight.display_name[0] | safe }}{% else %}{{torrent.display_name}}{%endif%}</a>
|
||||
<a href="{{ url_for('torrents.view', torrent_id=torrent_id) }}" title="{{ torrent.display_name | escape }}">{%if "highlight" in torrent.meta %}{{ torrent.meta.highlight.display_name[0] | safe }}{% else %}{{torrent.display_name}}{%endif%}</a>
|
||||
{% else %}
|
||||
<a href="{{ url_for('view_torrent', torrent_id=torrent_id) }}" title="{{ torrent.display_name | escape }}">{{ torrent.display_name | escape }}</a>
|
||||
<a href="{{ url_for('torrents.view', torrent_id=torrent_id) }}" title="{{ torrent.display_name | escape }}">{{ torrent.display_name | escape }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center" style="white-space: nowrap;">
|
||||
|
|
|
@ -3,6 +3,7 @@ from nyaa.views import (
|
|||
admin,
|
||||
main,
|
||||
site,
|
||||
torrents,
|
||||
users,
|
||||
)
|
||||
|
||||
|
@ -10,4 +11,5 @@ account_bp = account.bp
|
|||
admin_bp = admin.bp
|
||||
main_bp = main.bp
|
||||
site_bp = site.bp
|
||||
torrents_bp = torrents.bp
|
||||
users_bp = users.bp
|
||||
|
|
|
@ -44,19 +44,19 @@ def view_reports():
|
|||
torrent.deleted = True
|
||||
report.status = 1
|
||||
log = log.format(report_id, 'Deleted', torrent_id,
|
||||
flask.url_for('view_torrent', torrent_id=torrent_id),
|
||||
flask.url_for('torrents.view', torrent_id=torrent_id),
|
||||
report_user.username,
|
||||
flask.url_for('users.view_user', user_name=report_user.username))
|
||||
elif action == 'hide':
|
||||
log = log.format(report_id, 'Hid', torrent_id,
|
||||
flask.url_for('view_torrent', torrent_id=torrent_id),
|
||||
flask.url_for('torrents.view', torrent_id=torrent_id),
|
||||
report_user.username,
|
||||
flask.url_for('users.view_user', user_name=report_user.username))
|
||||
torrent.hidden = True
|
||||
report.status = 1
|
||||
else:
|
||||
log = log.format(report_id, 'Closed', torrent_id,
|
||||
flask.url_for('view_torrent', torrent_id=torrent_id),
|
||||
flask.url_for('torrents.view', torrent_id=torrent_id),
|
||||
report_user.username,
|
||||
flask.url_for('users.view_user', user_name=report_user.username))
|
||||
report.status = 2
|
||||
|
|
|
@ -115,7 +115,7 @@ def home(rss):
|
|||
flask.flash(flask.Markup('You were redirected here because '
|
||||
'the given hash matched this torrent.'), 'info')
|
||||
# Redirect user from search to the torrent if we found one with the specific info_hash
|
||||
return flask.redirect(flask.url_for('view_torrent', torrent_id=infohash_torrent.id))
|
||||
return flask.redirect(flask.url_for('torrents.view', torrent_id=infohash_torrent.id))
|
||||
|
||||
# If searching, we get results from elastic search
|
||||
use_elastic = app.config.get('USE_ELASTIC_SEARCH')
|
||||
|
|
70
nyaa/views/torrents.py
Normal file
70
nyaa/views/torrents.py
Normal file
|
@ -0,0 +1,70 @@
|
|||
import json
|
||||
|
||||
import flask
|
||||
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
from nyaa import db, forms, models
|
||||
|
||||
bp = flask.Blueprint('torrents', __name__)
|
||||
|
||||
|
||||
@bp.route('/view/<int:torrent_id>', endpoint='view', methods=['GET', 'POST'])
|
||||
def view_torrent(torrent_id):
|
||||
if flask.request.method == 'POST':
|
||||
torrent = models.Torrent.by_id(torrent_id)
|
||||
else:
|
||||
torrent = models.Torrent.query \
|
||||
.options(joinedload('filelist'),
|
||||
joinedload('comments')) \
|
||||
.filter_by(id=torrent_id) \
|
||||
.first()
|
||||
if not torrent:
|
||||
flask.abort(404)
|
||||
|
||||
# Only allow admins see deleted torrents
|
||||
if torrent.deleted and not (flask.g.user and flask.g.user.is_moderator):
|
||||
flask.abort(404)
|
||||
|
||||
comment_form = None
|
||||
if flask.g.user:
|
||||
comment_form = forms.CommentForm()
|
||||
|
||||
if flask.request.method == 'POST':
|
||||
if not flask.g.user:
|
||||
flask.abort(403)
|
||||
|
||||
if comment_form.validate():
|
||||
comment_text = (comment_form.comment.data or '').strip()
|
||||
|
||||
comment = models.Comment(
|
||||
torrent_id=torrent_id,
|
||||
user_id=flask.g.user.id,
|
||||
text=comment_text)
|
||||
|
||||
db.session.add(comment)
|
||||
db.session.flush()
|
||||
|
||||
torrent_count = torrent.update_comment_count()
|
||||
db.session.commit()
|
||||
|
||||
flask.flash('Comment successfully posted.', 'success')
|
||||
|
||||
return flask.redirect(flask.url_for('torrents.view',
|
||||
torrent_id=torrent_id,
|
||||
_anchor='com-' + str(torrent_count)))
|
||||
|
||||
# Only allow owners and admins to edit torrents
|
||||
can_edit = flask.g.user and (flask.g.user is torrent.user or flask.g.user.is_moderator)
|
||||
|
||||
files = None
|
||||
if torrent.filelist:
|
||||
files = json.loads(torrent.filelist.filelist_blob.decode('utf-8'))
|
||||
|
||||
report_form = forms.ReportForm()
|
||||
return flask.render_template('view.html', torrent=torrent,
|
||||
files=files,
|
||||
comment_form=comment_form,
|
||||
comments=torrent.comments,
|
||||
can_edit=can_edit,
|
||||
report_form=report_form)
|
Loading…
Reference in a new issue