aboutsummaryrefslogtreecommitdiffstats
path: root/youtube
diff options
context:
space:
mode:
authorJames Taylor <user234683@users.noreply.github.com>2018-07-08 18:38:06 -0700
committerJames Taylor <user234683@users.noreply.github.com>2018-07-08 18:40:39 -0700
commit52835db0a83e071ffe72be80fa68445c370b47cb (patch)
tree1162c190d1ccfb5e5e86f1af2587728f4d03f115 /youtube
parentf4024573dcbd4a19e7138814bbc54ac0a653f3d3 (diff)
downloadyt-local-52835db0a83e071ffe72be80fa68445c370b47cb.tar.lz
yt-local-52835db0a83e071ffe72be80fa68445c370b47cb.tar.xz
yt-local-52835db0a83e071ffe72be80fa68445c370b47cb.zip
add support for viewing local playlists
Diffstat (limited to 'youtube')
-rw-r--r--youtube/common.py3
-rw-r--r--youtube/local_playlist.py74
-rw-r--r--youtube/youtube.py4
3 files changed, 77 insertions, 4 deletions
diff --git a/youtube/common.py b/youtube/common.py
index d3e3c0d..6e0f4eb 100644
--- a/youtube/common.py
+++ b/youtube/common.py
@@ -42,7 +42,8 @@ URL_ORIGIN = "/https://www.youtube.com"
# first_video_id
-
+with open('yt_basic_template.html', 'r', encoding='utf-8') as file:
+ yt_basic_template = Template(file.read())
diff --git a/youtube/local_playlist.py b/youtube/local_playlist.py
index 5a4182b..926c93f 100644
--- a/youtube/local_playlist.py
+++ b/youtube/local_playlist.py
@@ -1,7 +1,12 @@
import os
import json
+from youtube.template import Template
+from youtube import common
+import html
playlists_directory = os.path.normpath("data/playlists")
+with open('yt_local_playlist_template.html', 'r', encoding='utf-8') as file:
+ local_playlist_template = Template(file.read())
def add_to_playlist(name, video_info_list):
with open(os.path.join(playlists_directory, name + ".txt"), "a", encoding='utf-8') as file:
@@ -9,11 +14,74 @@ def add_to_playlist(name, video_info_list):
file.write(info + "\n")
-def get_playlist_page(name):
- pass
+def get_local_playlist_page(name):
+ videos_html = ''
+ with open(os.path.join(playlists_directory, name + ".txt"), 'r', encoding='utf-8') as file:
+ videos = file.read()
+ videos = videos.splitlines()
+ for video in videos:
+ try:
+ info = json.loads(video)
+ info['thumbnail'] = common.get_thumbnail_url(info['id'])
+ videos_html += common.video_item_html(info, common.small_video_item_template)
+ except json.decoder.JSONDecodeError:
+ pass
+ return local_playlist_template.substitute(
+ page_title = name + ' - Local playlist',
+ header = common.get_header(),
+ videos = videos_html,
+ title = name,
+ page_buttons = ''
+ )
def get_playlist_names():
for item in os.listdir(playlists_directory):
name, ext = os.path.splitext(item)
if ext == '.txt':
- yield name \ No newline at end of file
+ yield name
+
+'''
+ main{
+ display:grid;
+ grid-template-columns: 3fr 1fr;
+ }
+
+ header{
+ grid-template-columns: 3fr 1fr;
+ }
+
+ #left{
+ grid-column: 1;
+ grid-row: 1;
+
+ display: grid;
+ grid-template-columns: 1fr 800px;
+ grid-template-rows: 0fr 1fr 0fr;
+ }
+
+ #right{
+ grid-column: 2;
+ grid-row: 1;
+ }
+'''
+def get_playlists_list_page():
+ page = '''<ul>\n'''
+ list_item_template = Template(''' <li><a href="$url">$name</a></li>\n''')
+ for name in get_playlist_names():
+ page += list_item_template.substitute(url = html.escape(common.URL_ORIGIN + '/playlists/' + name), name = html.escape(name))
+ page += '''</ul>\n'''
+ return common.yt_basic_template.substitute(
+ page_title = "Local playlists",
+ header = common.get_header(),
+ style = '',
+ page = page,
+ )
+
+
+def get_playlist_page(url, query_string=''):
+ url = url.rstrip('/').lstrip('/')
+ if url == '':
+ return get_playlists_list_page()
+ else:
+ return get_local_playlist_page(url)
+
diff --git a/youtube/youtube.py b/youtube/youtube.py
index 01e956a..3b0e845 100644
--- a/youtube/youtube.py
+++ b/youtube/youtube.py
@@ -40,6 +40,10 @@ def youtube(env, start_response):
start_response('200 OK', (('Content-type','text/html'),) )
return channel.get_user_page(path[6:], query_string=query_string).encode()
+ elif path.startswith("/playlists"):
+ start_response('200 OK', (('Content-type','text/html'),) )
+ return local_playlist.get_playlist_page(path[10:], query_string=query_string).encode()
+
else:
start_response('404 Not Found', () )
return b'404 Not Found'