aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/subscriptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'youtube/subscriptions.py')
-rw-r--r--youtube/subscriptions.py42
1 files changed, 25 insertions, 17 deletions
diff --git a/youtube/subscriptions.py b/youtube/subscriptions.py
index be5ecbe..2e821de 100644
--- a/youtube/subscriptions.py
+++ b/youtube/subscriptions.py
@@ -79,29 +79,37 @@ def with_open_db(function, *args, **kwargs):
with connection as cursor:
return function(cursor, *args, **kwargs)
+def _is_subscribed(cursor, channel_id):
+ result = cursor.execute('''SELECT EXISTS(
+ SELECT 1
+ FROM subscribed_channels
+ WHERE yt_channel_id=?
+ LIMIT 1
+ )''', [channel_id]).fetchone()
+ return bool(result[0])
+
def is_subscribed(channel_id):
if not os.path.exists(database_path):
return False
- with open_database() as connection:
- with connection as cursor:
- result = cursor.execute('''SELECT EXISTS(
- SELECT 1
- FROM subscribed_channels
- WHERE yt_channel_id=?
- LIMIT 1
- )''', [channel_id]).fetchone()
- return bool(result[0])
-
+ return with_open_db(_is_subscribed, channel_id)
-def _subscribe(cursor, channels):
+def _subscribe(channels):
''' channels is a list of (channel_id, channel_name) '''
+ channels = list(channels)
+ with open_database() as connection:
+ with connection as cursor:
+ channel_ids_to_check = [channel[0] for channel in channels if not _is_subscribed(cursor, channel[0])]
- channels = ( (channel_id, channel_name, 0, 0) for channel_id, channel_name in channels)
-
- cursor.executemany('''INSERT OR IGNORE INTO subscribed_channels (yt_channel_id, channel_name, time_last_checked, next_check_time)
- VALUES (?, ?, ?, ?)''', channels)
+ rows = ( (channel_id, channel_name, 0, 0) for channel_id, channel_name in channels)
+ cursor.executemany('''INSERT OR IGNORE INTO subscribed_channels (yt_channel_id, channel_name, time_last_checked, next_check_time)
+ VALUES (?, ?, ?, ?)''', rows)
+ if settings.autocheck_subscriptions:
+ # important that this is after the changes have been committed to database
+ # otherwise the autochecker (other thread) tries checking the channel before it's in the database
+ channel_names.update(channels)
+ check_channels_if_necessary(channel_ids_to_check)
def delete_thumbnails(to_delete):
for thumbnail in to_delete:
@@ -611,7 +619,7 @@ def import_subscriptions():
else:
return '400 Bad Request: Unsupported file format: ' + mime_type + '. Only subscription.json files (from Google Takeouts) and XML OPML files exported from Youtube\'s subscription manager page are supported', 400
- with_open_db(_subscribe, channels)
+ _subscribe(channels)
return flask.redirect(util.URL_ORIGIN + '/subscription_manager', 303)
@@ -757,7 +765,7 @@ def post_subscriptions_page():
if action == 'subscribe':
if len(request.values.getlist('channel_id')) != len(request.values.getlist('channel_name')):
return '400 Bad Request, length of channel_id != length of channel_name', 400
- with_open_db(_subscribe, zip(request.values.getlist('channel_id'), request.values.getlist('channel_name')))
+ _subscribe(zip(request.values.getlist('channel_id'), request.values.getlist('channel_name')))
elif action == 'unsubscribe':
with_open_db(_unsubscribe, request.values.getlist('channel_id'))