aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Taylor <user234683@users.noreply.github.com>2019-08-09 21:18:43 -0700
committerJames Taylor <user234683@users.noreply.github.com>2019-08-09 21:18:43 -0700
commitadc40bc760345a23678a01f27d7697dfd3811914 (patch)
treeac235f9796b4380333a80b65de416842a2d0c393
parent0f574e8e28520c46d1d335ceede2bb05f4f3ed3a (diff)
downloadyt-local-adc40bc760345a23678a01f27d7697dfd3811914.tar.lz
yt-local-adc40bc760345a23678a01f27d7697dfd3811914.tar.xz
yt-local-adc40bc760345a23678a01f27d7697dfd3811914.zip
Add pagination for local playlists
-rw-r--r--youtube/local_playlist.py19
-rw-r--r--youtube/templates/local_playlist.html3
2 files changed, 17 insertions, 5 deletions
diff --git a/youtube/local_playlist.py b/youtube/local_playlist.py
index 8c673e9..bb05d1a 100644
--- a/youtube/local_playlist.py
+++ b/youtube/local_playlist.py
@@ -7,6 +7,7 @@ import json
import html
import gevent
import urllib
+import math
import flask
from flask import request
@@ -62,7 +63,7 @@ def download_thumbnails(playlist_name, ids):
-def get_local_playlist_videos(name):
+def get_local_playlist_videos(name, offset=0, amount=50):
try:
thumbnails = set(os.listdir(os.path.join(thumbnails_directory, name)))
except FileNotFoundError:
@@ -89,7 +90,7 @@ def get_local_playlist_videos(name):
if not video_json.strip() == '':
print('Corrupt playlist video entry: ' + video_json)
gevent.spawn(download_thumbnails, name, missing_thumbnails)
- return videos
+ return videos[offset:offset+amount], len(videos)
def get_playlist_names():
try:
@@ -122,6 +123,8 @@ def remove_from_playlist(name, video_info_list):
for file in to_delete:
os.remove(os.path.join(thumbnails_directory, name, file))
+ return len(videos_out)
+
@yt_app.route('/playlists', methods=['GET'])
@yt_app.route('/playlists/<playlist_name>', methods=['GET'])
@@ -130,18 +133,24 @@ def get_local_playlist_page(playlist_name=None):
playlists = [(name, util.URL_ORIGIN + '/playlists/' + name) for name in get_playlist_names()]
return flask.render_template('local_playlists_list.html', playlists=playlists)
else:
- videos = get_local_playlist_videos(playlist_name)
+ page = int(request.args.get('page', 1))
+ offset = 50*(page - 1)
+ videos, num_videos = get_local_playlist_videos(playlist_name, offset=offset, amount=50)
return flask.render_template('local_playlist.html',
playlist_name = playlist_name,
videos = videos,
+ num_pages = math.ceil(num_videos/50),
+ parameters_dictionary = request.args,
)
@yt_app.route('/playlists/<playlist_name>', methods=['POST'])
def path_edit_playlist(playlist_name):
'''Called when making changes to the playlist from that playlist's page'''
if request.values['action'] == 'remove':
- remove_from_playlist(playlist_name, request.values.getlist('video_info_list'))
- return flask.redirect(util.URL_ORIGIN + request.path)
+ videos_to_remove = request.values.getlist('video_info_list')
+ number_of_videos_remaining = remove_from_playlist(playlist_name, videos_to_remove)
+ redirect_page_number = min(int(request.values.get('page', 1)), math.ceil(number_of_videos_remaining/50))
+ return flask.redirect(util.URL_ORIGIN + request.path + '?page=' + str(redirect_page_number))
else:
flask.abort(400)
diff --git a/youtube/templates/local_playlist.html b/youtube/templates/local_playlist.html
index a7564ca..f8e6f01 100644
--- a/youtube/templates/local_playlist.html
+++ b/youtube/templates/local_playlist.html
@@ -53,5 +53,8 @@
{{ common_elements.item(video_info) }}
{% endfor %}
</div>
+ <nav class="page-button-row">
+ {{ common_elements.page_buttons(num_pages, '/https://www.youtube.com/playlists/' + playlist_name, parameters_dictionary) }}
+ </nav>
</div>
{% endblock main %}