subscriptions page

This commit is contained in:
James Taylor 2019-02-16 16:56:46 -08:00
parent 4a54c4fe30
commit 24642455d0
3 changed files with 60 additions and 5 deletions

View File

@ -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')

View File

@ -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,

View File

@ -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>