aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--youtube/subscriptions.py37
-rw-r--r--youtube/youtube.py4
-rw-r--r--yt_subscriptions_template.html24
3 files changed, 60 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,
diff --git a/yt_subscriptions_template.html b/yt_subscriptions_template.html
new file mode 100644
index 0000000..8477d25
--- /dev/null
+++ b/yt_subscriptions_template.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Subscriptions</title>
+ <link href="/youtube.com/shared.css" type="text/css" rel="stylesheet">
+ <link href="/youtube.com/favicon.ico" type="image/x-icon" rel="icon">
+ <link title="Youtube local" href="/youtube.com/opensearch.xml" rel="search" type="application/opensearchdescription+xml">
+ <style type="text/css">
+ .item-list{
+ width:1000px;
+ }
+ </style>
+ </head>
+ <body>
+$header
+ <main>
+$items
+ <nav class="page-button-row">
+$page_buttons
+ </nav>
+ </main>
+ </body>
+</html>