From 7590d051853a09296377884d796da7af170d3a9e Mon Sep 17 00:00:00 2001 From: girst Date: Tue, 15 Aug 2023 20:21:43 +0000 Subject: [PATCH] browse/protbuf: clean up new data structures --- app/browse/protobuf.py | 99 +++++++++++++----------------------------- 1 file changed, 29 insertions(+), 70 deletions(-) diff --git a/app/browse/protobuf.py b/app/browse/protobuf.py index a92595e..d3ebd28 100644 --- a/app/browse/protobuf.py +++ b/app/browse/protobuf.py @@ -11,10 +11,19 @@ def b64e(b, padding=True): return base64.urlsafe_b64encode(b).decode('ascii') \ .replace("=", "%3D" if padding else "") -def proto(d, padding=True): +def proto(d, padding=False): return base64.urlsafe_b64encode(pyproto.ProtoBuf(d).toBuf()) \ .decode('ascii').replace("=", "%3D" if padding else "") +def continuation(subject, params, query=None): + return proto({ + 80226972: { + 2: subject, + 3: proto(params, padding=True), + 11: query, + } + }, padding=True) + # SEARCH {{{ @message @dataclass @@ -65,81 +74,31 @@ def make_sp(sort=None, date=None, type=None, len=None, features=[], extras=[]): def make_channel_params(subject, typ="videos", sort=None, query=None): if typ in ("playlists",): sortorder = dict(newest=3, modified=4) - return proto({ - # Continuation - 80226972: {#params - # Params - 2: subject,#subject - 3: proto({#params - # Subparams - 2: "playlists",#type_s - 4: 1,#type_i - #15: None,#page - 3: sortorder.get(sort),#sort optional - 7: 1, #unknown_const1 - 23: 0, #unknown_const2 - 6: 2, #list_or_grid (2=list, None/1=grid) - 61: proto({#field61 optional - # ChannelDataContainer - 1: proto({#data - #ChannelDataInner - 1: 0#offset - }, padding=False) - }, padding=False) - }), - #11: query or None,#query - } + return continuation(subject, { + 2: "playlists", #type_s + 4: 1, #type_i + 3: sortorder.get(sort),#sort optional + 7: 1, #unknown_const1 + 23: 0, #unknown_const2 + 6: 2, #list_or_grid (2=list, None/1=grid) + 61: proto({1: proto({1: 0})}) #offset }) elif typ in ("search",): - return proto({ - # Continuation - 80226972: {#params - # Params - 2: subject,#subject - 3: proto({#params - # Subparams - 2: "search",#type_s - #4: None,#type_i - 15: proto({#page optional - # SearchOffset - 3: 0,#offset - }, padding=False) if 0 else None, - #3: None,#sort optional - 7: 1, #unknown_const1 - 23: 0, #unknown_const2 - 6: 2, #list_or_grid (2=list, None/1=grid) - #61: None#field61 optional - }), - 11: query,#query - } - }) + return continuation(subject, { + 2: "search",#type_s + 7: 1, #unknown_const1 + 23: 0, #unknown_const2 + 6: 2, #list_or_grid (2=list, None/1=grid) + }, query) elif typ in ("videos", "streams", "shorts"): sortorder = dict(newest=1, popular=2) typekey = dict(videos=15, streams=14, shorts=10) - return proto({ - # Continuation - 80226972: {#params - # Params - 2: subject,#subject - 3: proto({#params - # NewChannelDataContainerOuter - 110: {#data - # NewChannelDataContainer - 3: {#data - # NewChannelDataInner - typekey[typ]: { - # NewChannelDataSort - 2: {#uuid - # NewChannelDataUuid - 1: "00000000-0000-0000-0000-000000000000",#uuid - }, - 3: sortorder.get(sort,1)#sort - }, - } - } - }) + return continuation(subject, { 110: { 3: { + typekey[typ]: { + 2: { 1: "00000000-0000-0000-0000-000000000000" }, + 3: sortorder.get(sort,1) } - }) + }}}) else: raise NotImplementedError # }}} CHANNEL -- 2.39.3