diff options
-rw-r--r-- | settings.py | 18 | ||||
-rw-r--r-- | youtube/comments.py | 4 | ||||
-rw-r--r-- | youtube/local_playlist.py | 4 | ||||
-rw-r--r-- | youtube/playlist.py | 13 | ||||
-rw-r--r-- | youtube/subscriptions.py | 1 | ||||
-rw-r--r-- | youtube/templates/base.html | 4 | ||||
-rw-r--r-- | youtube/util.py | 13 |
7 files changed, 37 insertions, 20 deletions
diff --git a/settings.py b/settings.py index 942f79c..56a6a01 100644 --- a/settings.py +++ b/settings.py @@ -128,6 +128,13 @@ For security reasons, enabling this is not recommended.''', 'comment': '', }), + ('proxy_images', { + 'label': 'proxy images', + 'type': bool, + 'default': True, + 'comment': '', + }), + ('theme', { 'type': int, 'default': 0, @@ -257,7 +264,7 @@ else: if type(node) != ast.Assign: log_ignored_line(node.lineno, "only assignments are allowed") continue - + if len(node.targets) > 1: log_ignored_line(node.lineno, "only simple single-variable assignments allowed") continue @@ -266,11 +273,11 @@ else: if type(target) != ast.Name: log_ignored_line(node.lineno, "only simple single-variable assignments allowed") continue - + if target.id not in acceptable_targets: log_ignored_line(node.lineno, target.id + " is not a valid setting") continue - + if type(node.value) not in attributes: log_ignored_line(node.lineno, "only literals allowed for values") continue @@ -298,6 +305,11 @@ else: globals().update(current_settings_dict) +if proxy_images: + img_prefix = "/" +else: + img_prefix = "" + if route_tor: diff --git a/youtube/comments.py b/youtube/comments.py index 07d4b89..1d0e92a 100644 --- a/youtube/comments.py +++ b/youtube/comments.py @@ -92,7 +92,7 @@ def post_process_comments_info(comments_info): comment['author_url'] = concat_or_none( util.URL_ORIGIN, comment['author_url']) comment['author_avatar'] = concat_or_none( - '/', comment['author_avatar']) + settings.img_prefix, comment['author_avatar']) comment['permalink'] = concat_or_none(util.URL_ORIGIN, '/watch?v=', comments_info['video_id'], '&lc=', comment['id']) @@ -139,7 +139,7 @@ def post_process_comments_info(comments_info): comments_info['video_url'] = concat_or_none(util.URL_ORIGIN, '/watch?v=', comments_info['video_id']) - comments_info['video_thumbnail'] = concat_or_none('/i.ytimg.com/vi/', + comments_info['video_thumbnail'] = concat_or_none(settings.img_prefix, 'https://i.ytimg.com/vi/', comments_info['video_id'], '/mqdefault.jpg') diff --git a/youtube/local_playlist.py b/youtube/local_playlist.py index 3a058b3..857ed24 100644 --- a/youtube/local_playlist.py +++ b/youtube/local_playlist.py @@ -35,7 +35,7 @@ def add_to_playlist(name, video_info_list): file.write(info + "\n") missing_thumbnails.append(id) gevent.spawn(util.download_thumbnails, os.path.join(thumbnails_directory, name), missing_thumbnails) - + def get_local_playlist_videos(name, offset=0, amount=50): try: @@ -52,7 +52,7 @@ def get_local_playlist_videos(name, offset=0, amount=50): try: info = json.loads(video_json) if info['id'] + ".jpg" in thumbnails: - info['thumbnail'] = "/youtube.com/data/playlist_thumbnails/" + name + "/" + info['id'] + ".jpg" + info['thumbnail'] = settings.img_prefix + "https://youtube.com/data/playlist_thumbnails/" + name + "/" + info['id'] + ".jpg" else: info['thumbnail'] = util.get_thumbnail_url(info['id']) missing_thumbnails.append(info['id']) diff --git a/youtube/playlist.py b/youtube/playlist.py index b7167f6..0a415c1 100644 --- a/youtube/playlist.py +++ b/youtube/playlist.py @@ -1,5 +1,6 @@ from youtube import util, yt_data_extract, proto from youtube import yt_app +import settings import base64 import urllib @@ -14,15 +15,15 @@ import flask -def playlist_ctoken(playlist_id, offset): - +def playlist_ctoken(playlist_id, offset): + offset = proto.uint(1, offset) # this is just obfuscation as far as I can tell. It doesn't even follow protobuf offset = b'PT:' + proto.unpadded_b64encode(offset) offset = proto.string(15, offset) continuation_info = proto.string( 3, proto.percent_b64encode(offset) ) - + playlist_id = proto.string(2, 'VL' + playlist_id ) pointless_nest = proto.string(80226972, playlist_id + continuation_info) @@ -51,7 +52,7 @@ def playlist_first_page(playlist_id, report_text = "Retrieved playlist"): content = json.loads(util.uppercase_escape(content.decode('utf-8'))) return content - + #https://m.youtube.com/playlist?itct=CBMQybcCIhMIptj9xJaJ2wIV2JKcCh3Idwu-&ctoken=4qmFsgI2EiRWTFBMT3kwajlBdmxWWlB0bzZJa2pLZnB1MFNjeC0tN1BHVEMaDmVnWlFWRHBEUWxFJTNE&pbj=1 def get_videos(playlist_id, page): @@ -84,7 +85,7 @@ def get_playlist_page(): this_page_json = first_page_json else: tasks = ( - gevent.spawn(playlist_first_page, playlist_id, report_text="Retrieved playlist info" ), + gevent.spawn(playlist_first_page, playlist_id, report_text="Retrieved playlist info" ), gevent.spawn(get_videos, playlist_id, page) ) gevent.joinall(tasks) @@ -103,7 +104,7 @@ def get_playlist_page(): util.prefix_urls(item) util.add_extra_html_info(item) if 'id' in item: - item['thumbnail'] = '/https://i.ytimg.com/vi/' + item['id'] + '/default.jpg' + item['thumbnail'] = f'{settings.img_prefix}https://i.ytimg.com/vi/' + item['id'] + '/default.jpg' item['url'] += '&list=' + playlist_id if item['index']: diff --git a/youtube/subscriptions.py b/youtube/subscriptions.py index 6f75578..a661f83 100644 --- a/youtube/subscriptions.py +++ b/youtube/subscriptions.py @@ -820,6 +820,7 @@ def get_subscriptions_page(): videos, number_of_videos_in_db = _get_videos(cursor, 60, (page - 1)*60, tag) for video in videos: video['thumbnail'] = util.URL_ORIGIN + '/data/subscription_thumbnails/' + video['id'] + '.jpg' + if not settings.proxy_images: video['thumbnail'] = video['thumbnail'][1:] video['type'] = 'video' video['item_size'] = 'small' util.add_extra_html_info(video) diff --git a/youtube/templates/base.html b/youtube/templates/base.html index 4ff83c5..462cac4 100644 --- a/youtube/templates/base.html +++ b/youtube/templates/base.html @@ -3,7 +3,9 @@ <head> <meta charset="utf-8"> <title>{{ page_title }}</title> - <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline'; media-src 'self' https://*.googlevideo.com"> + {% if settings.proxy_images %} + <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline'; media-src 'self' https://*.googlevideo.com"> + {% endif %} <link href="{{ theme_path }}" type="text/css" rel="stylesheet"> <link href="/youtube.com/static/shared.css" type="text/css" rel="stylesheet"> <link href="/youtube.com/static/comments.css" type="text/css" rel="stylesheet"> diff --git a/youtube/util.py b/youtube/util.py index 3c32ddb..a75a7b5 100644 --- a/youtube/util.py +++ b/youtube/util.py @@ -342,8 +342,8 @@ def video_id(url): # default, sddefault, mqdefault, hqdefault, hq720 def get_thumbnail_url(video_id): - return "/i.ytimg.com/vi/" + video_id + "/mqdefault.jpg" - + return f"{settings.img_prefix}https://i.ytimg.com/vi/" + video_id + "/mqdefault.jpg" + def seconds_to_timestamp(seconds): seconds = int(seconds) hours, seconds = divmod(seconds,3600) @@ -394,10 +394,11 @@ def concat_or_none(*strings): def prefix_urls(item): - try: - item['thumbnail'] = prefix_url(item['thumbnail']) - except KeyError: - pass + if settings.proxy_images: + try: + item['thumbnail'] = prefix_url(item['thumbnail']) + except KeyError: + pass try: item['author_url'] = prefix_url(item['author_url']) |