diff options
| author | zrose584 <57181548+zrose584@users.noreply.github.com> | 2020-10-07 19:28:52 +0200 | 
|---|---|---|
| committer | zrose584 <57181548+zrose584@users.noreply.github.com> | 2020-10-07 19:28:52 +0200 | 
| commit | f8d9be2d5a947a2adde12d187a52b18b7218c541 (patch) | |
| tree | e0c2943b1de9f400acdbd25db2492c3673d88733 | |
| parent | 9123d9a6cfa2af511b17591541ab2e67aa83475f (diff) | |
| download | yt-local-f8d9be2d5a947a2adde12d187a52b18b7218c541.tar.lz yt-local-f8d9be2d5a947a2adde12d187a52b18b7218c541.tar.xz yt-local-f8d9be2d5a947a2adde12d187a52b18b7218c541.zip | |
settings.py: add 'proxy_images'
| -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']) | 
