mirror of
				https://github.com/ProjectSynthoria/SynthoriaArchive.git
				synced 2025-10-31 16:05:46 +02:00 
			
		
		
		
	Move /view/<int:torrent_id> route into 'torrents' blueprint
and update templates.
This commit is contained in:
		
							parent
							
								
									42535bbdab
								
							
						
					
					
						commit
						9acdd14e81
					
				
					 10 changed files with 91 additions and 82 deletions
				
			
		|  | @ -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…
	
	Add table
		
		Reference in a new issue
	
	 Kfir Hadas
						Kfir Hadas