]> git.gir.st - subscriptionfeed.git/blob - app/dangerous/protobuf.py
implement search params
[subscriptionfeed.git] / app / dangerous / protobuf.py
1 import base64
2 from dataclasses import dataclass
3 from typing import Optional
4
5 from pure_protobuf.dataclasses_ import field, message
6 from pure_protobuf.types import int64
7
8 @message
9 @dataclass
10 class Filters: # adapted from invidious
11 date: Optional[int64] = field(1, default=None)
12 type: Optional[int64] = field(2, default=None)
13 length: Optional[int64] = field(3, default=None)
14 is_hd: Optional[bool] = field(4, default=None)
15 subtitles: Optional[bool] = field(5, default=None)
16 ccommons: Optional[bool] = field(6, default=None)
17 is_3d: Optional[bool] = field(7, default=None)
18 live: Optional[bool] = field(8, default=None)
19 purchased: Optional[bool] = field(9, default=None)
20 is_4k: Optional[bool] = field(14, default=None)
21 is_360: Optional[bool] = field(15, default=None)
22 location: Optional[bool] = field(23, default=None)
23 is_hdr: Optional[bool] = field(25, default=None)
24 @message
25 @dataclass
26 class SearchRequest:
27 sorted: Optional[int64] = field(1, default=None)
28 filter: Optional[Filters] = field(2, default=None)
29
30 def make_sp(sort=None, date=None, type=None, len=None, features=[]):
31 sortorder = dict(relevance=0, rating=1, date=2, views=3)
32 datefilter = dict(hour=1, day=2, week=3, month=4, year=5)
33 typefilter = dict(video=1, channel=2, playlist=3, movie=4, show=5)
34 lenfilter = dict(short=1, long=2)
35
36 return base64.b64encode(SearchRequest(
37 sorted=sortorder.get(sort),
38 filter=Filters(
39 date=datefilter.get(date),
40 type=typefilter.get(type),
41 length=lenfilter.get(len),
42 **{f:True for f in features},
43 ) if date or type or len or features else None
44 ).dumps()).decode('ascii')
Imprint / Impressum