From 026809f94c5de9954b16d35311a8d4d1f9cde247 Mon Sep 17 00:00:00 2001 From: girst Date: Tue, 15 Aug 2023 21:07:13 +0000 Subject: [PATCH] protobuf: switch make_sp (search params) to new lib, cleanup old lib minor change: extras was previously included even if empty, now isn't. --- app/browse/protobuf.py | 66 ++++++++--------------------------------- config/requirements.txt | 1 - 2 files changed, 13 insertions(+), 54 deletions(-) diff --git a/app/browse/protobuf.py b/app/browse/protobuf.py index e3a0768..52461cf 100644 --- a/app/browse/protobuf.py +++ b/app/browse/protobuf.py @@ -1,16 +1,6 @@ import base64 from . import pyproto -from dataclasses import dataclass -from typing import Optional - -from pure_protobuf.dataclasses_ import field, message -from pure_protobuf.types import int64 - -def b64e(b, padding=True): - return base64.urlsafe_b64encode(b).decode('ascii') \ - .replace("=", "%3D" if padding else "") - def proto(d, padding=False): return base64.urlsafe_b64encode(pyproto.ProtoBuf(d).toBuf()) \ .decode('ascii').replace("=", "%3D" if padding else "") @@ -24,53 +14,26 @@ def continuation(subject, params, query=None): } }, padding=True) -# SEARCH {{{ -@message -@dataclass -class Extras: - verbatim: Optional[bool] = field(1, default=None) # don't fix spelling -@message -@dataclass -class Filters: # adapted from invidious - date: Optional[int64] = field(1, default=None) - type: Optional[int64] = field(2, default=None) - length: Optional[int64] = field(3, default=None) - is_hd: Optional[bool] = field(4, default=None) - subtitles: Optional[bool] = field(5, default=None) - ccommons: Optional[bool] = field(6, default=None) - is_3d: Optional[bool] = field(7, default=None) - live: Optional[bool] = field(8, default=None) - purchased: Optional[bool] = field(9, default=None) - is_4k: Optional[bool] = field(14, default=None) - is_360: Optional[bool] = field(15, default=None) - location: Optional[bool] = field(23, default=None) - is_hdr: Optional[bool] = field(25, default=None) -@message -@dataclass -class SearchRequest: - sorted: Optional[int64] = field(1, default=None) - filter: Optional[Filters] = field(2, default=None) - extras: Optional[Extras] = field(8, default=None) - def make_sp(sort=None, date=None, type=None, len=None, features=[], extras=[]): sortorder = dict(relevance=0, rating=1, date=2, views=3) datefilter = dict(hour=1, day=2, week=3, month=4, year=5) typefilter = dict(video=1, channel=2, playlist=3, movie=4, show=5) lenfilter = dict(short=1, long=2) + extraflags = dict(verbatim=1) + featureflags = dict(is_hd=4, subtitles=5, ccommons=6, is_3d=7, live=8, + purchased=9, is_4k=14, is_360=15, location=23, is_hdr=25) - return b64e(SearchRequest( - sorted=sortorder.get(sort), - filter=Filters( - date=datefilter.get(date), - type=typefilter.get(type), - length=lenfilter.get(len), - **{f:True for f in features}, - ) if date or type or len or features else None, - extras=Extras(**{f:True for f in extras}), - ).dumps()) -# }}} SEARCH + return proto({ + 1: sortorder.get(sort), + 2: { + 1: datefilter.get(date), + 2: typefilter.get(type), + 3: lenfilter.get(len), + **{featureflags[k]:True for k in features if k in featureflags} + } if date or type or len or features else None, + 8: { extraflags[k]:True for k in extras if k in extraflags } or None + }, padding=True) -# CHANNEL {{{ def make_channel_params(subject, typ="videos", sort=None, query=None): if typ in ("playlists",): sortorder = dict(newest=3, modified=4) @@ -101,9 +64,7 @@ def make_channel_params(subject, typ="videos", sort=None, query=None): }}}) else: raise NotImplementedError -# }}} CHANNEL -# PLAYLIST {{{ def make_playlist_params(playlist_id, offset): # mix takes video id instead of offset. an id not in the playlist requests the beginning. mix_playlist = playlist_id.startswith("RD") @@ -112,4 +73,3 @@ def make_playlist_params(playlist_id, offset): { 2: '___________' } if mix_playlist else { 1: offset } ) }) -# }}} PLAYLIST diff --git a/config/requirements.txt b/config/requirements.txt index 5ae426a..e4dee9a 100644 --- a/config/requirements.txt +++ b/config/requirements.txt @@ -4,4 +4,3 @@ gunicorn[eventlet] # Alternatively, install gunicorn and use 'gthread' worker requests requests-cache python-dateutil -pure-protobuf -- 2.39.3