diff options
Diffstat (limited to 'youtube')
-rw-r--r-- | youtube/subscriptions.py | 37 | ||||
-rw-r--r-- | youtube/youtube.py | 4 |
2 files changed, 36 insertions, 5 deletions
diff --git a/youtube/subscriptions.py b/youtube/subscriptions.py index a0f7e48..82916dd 100644 --- a/youtube/subscriptions.py +++ b/youtube/subscriptions.py @@ -1,4 +1,6 @@ -from youtube import common, settings, channel +from youtube import common, channel +import settings +from string import Template import sqlite3 import os import secrets @@ -10,6 +12,10 @@ try: except ModuleNotFoundError: print('Error: atoma not installed, subscriptions will not work') +with open('yt_subscriptions_template.html', 'r', encoding='utf-8') as f: + subscriptions_template = Template(f.read()) + + # https://stackabuse.com/a-sqlite-tutorial-with-python/ database_path = os.path.join(settings.data_dir, "subscriptions.sqlite") @@ -35,7 +41,7 @@ def open_database(): title text NOT NULL, duration text, time_published integer NOT NULL, - description text, + description text )''') connection.commit() except: @@ -73,11 +79,19 @@ def _get_videos(number, offset): connection = open_database() try: cursor = connection.cursor() - cursor.execute('''SELECT video_id, title, duration, time_published, description, channel_id, channel_name + db_videos = cursor.execute('''SELECT video_id, title, duration, channel_name FROM videos INNER JOIN subscribed_channels on videos.uploader_id = subscribed_channels.id ORDER BY time_published DESC - LIMIT ? OFFSET ?''', number, offset) + LIMIT ? OFFSET ?''', (number, offset)) + + for db_video in db_videos: + yield { + 'id': db_video[0], + 'title': db_video[1], + 'duration': db_video[2], + 'author': db_video[3], + } except: connection.rollback() raise @@ -176,3 +190,18 @@ def _get_upstream_videos(channel_id, channel_name, time_last_checked): info['time published'] = youtube_timestamp_to_posix(info['published']) videos.append(info) return videos + +def get_subscriptions_page(env, start_response): + items_html = '''<nav class="item-grid">\n''' + + for item in _get_videos(30, 0): + items_html += common.video_item_html(info, common.small_video_item_template) + items_html += '''\n</nav>''' + + start_response('200 OK', [('Content-type','text/html'),]) + return subscriptions_template.substitute( + header = common.get_header(), + items = items_html, + page_buttons = '', + ).encode('utf-8') + diff --git a/youtube/youtube.py b/youtube/youtube.py index b6b12fb..ad73a6e 100644 --- a/youtube/youtube.py +++ b/youtube/youtube.py @@ -1,7 +1,7 @@ import mimetypes import urllib.parse import os -from youtube import local_playlist, watch, search, playlist, channel, comments, common, post_comment, accounts +from youtube import local_playlist, watch, search, playlist, channel, comments, common, post_comment, accounts, subscriptions import settings YOUTUBE_FILES = ( "/shared.css", @@ -24,6 +24,8 @@ get_handlers = { 'post_comment': post_comment.get_post_comment_page, 'delete_comment': post_comment.get_delete_comment_page, 'login': accounts.get_account_login_page, + + 'subscriptions': subscriptions.get_subscriptions_page, } post_handlers = { 'edit_playlist': local_playlist.edit_playlist, |