1+ import re
12from dataclasses import dataclass
2- from typing import TypedDict
3+ from typing import TypedDict , TypeVar , Union
34
45from .serialize import JsonSerializer
56
67
8+ _T = TypeVar ('_T' , bound = dict [str , Union [int , str ]])
9+ _trans_map = {
10+ "SsoVersion" : "pt_os_version" ,
11+ "WtLoginSdk" : "wtlogin_sdk" ,
12+ "AppIdQrCode" : "app_id_qrcode" ,
13+ "MainSigMap" : "main_sigmap" ,
14+ "SubSigMap" : "sub_sigmap" ,
15+ }
16+
17+ def _translate_appinfo (s : _T ) -> _T :
18+ out : _T = {}
19+ for k , v in s .items ():
20+ if k in _trans_map :
21+ out [_trans_map [k ]] = v
22+ else :
23+ k = re .sub (
24+ r'([A-Z])([^A-Z]+)' ,
25+ '_\g<0>' ,
26+ k
27+ ).lstrip ("_" ).lower ()
28+ out [k ] = v
29+ return out
30+
31+
732@dataclass
833class AppInfo (JsonSerializer ):
934 os : str
1035 kernel : str
1136 vendor_os : str
1237
1338 current_version : str
14- build_version : int
39+ # build_version: int
1540 misc_bitmap : int
1641 pt_version : str
1742 pt_os_version : int
1843 package_name : str
1944 wtlogin_sdk : str
20- package_sign : str
2145 app_id : int
2246 sub_app_id : int
2347 app_id_qrcode : int
@@ -26,6 +50,27 @@ class AppInfo(JsonSerializer):
2650 sub_sigmap : int
2751 nt_login_type : int
2852
53+ @property
54+ def build_version (self ) -> int :
55+ return int (self .current_version .split ("-" )[1 ])
56+
57+ @property
58+ def package_sign (self ) -> str :
59+ # QUA?
60+ if self .os == "Windows" :
61+ kernel = "WIN"
62+ elif self .os == "Linux" :
63+ kernel = "LNX"
64+ elif self .os == "Mac" :
65+ kernel = "MAC"
66+ else :
67+ raise NotImplementedError (self .os )
68+ return f"V1_{ kernel } _NQ_{ self .current_version } _RDM_B"
69+
70+ @classmethod
71+ def load_custom (cls , d : _T ) -> "AppInfo" :
72+ return cls (** _translate_appinfo (d ))
73+
2974
3075class AppInfoDict (TypedDict ):
3176 linux : AppInfo
@@ -39,13 +84,13 @@ class AppInfoDict(TypedDict):
3984 kernel = "Linux" ,
4085 vendor_os = "linux" ,
4186 current_version = "3.2.10-25765" ,
42- build_version = 25765 ,
87+ # build_version=25765,
4388 misc_bitmap = 32764 ,
4489 pt_version = "2.0.0" ,
4590 pt_os_version = 19 ,
4691 package_name = "com.tencent.qq" ,
4792 wtlogin_sdk = "nt.wtlogin.0.0.1" ,
48- package_sign = "V1_LNX_NQ_3.1.2-13107_RDM_B" ,
93+ # package_sign="V1_LNX_NQ_3.1.2-13107_RDM_B",
4994 app_id = 1600001615 ,
5095 sub_app_id = 537234773 ,
5196 app_id_qrcode = 13697054 ,
@@ -59,13 +104,13 @@ class AppInfoDict(TypedDict):
59104 kernel = "Darwin" ,
60105 vendor_os = "mac" ,
61106 current_version = "6.9.20-17153" ,
62- build_version = 17153 ,
107+ # build_version=17153,
63108 misc_bitmap = 32764 ,
64109 pt_version = "2.0.0" ,
65110 pt_os_version = 23 ,
66111 package_name = "com.tencent.qq" ,
67112 wtlogin_sdk = "nt.wtlogin.0.0.1" ,
68- package_sign = "V1_MAC_NQ_6.9.20-17153_RDM_B" ,
113+ # package_sign="V1_MAC_NQ_6.9.20-17153_RDM_B",
69114 app_id = 1600001602 ,
70115 sub_app_id = 537162356 ,
71116 app_id_qrcode = 537162356 ,
@@ -79,13 +124,13 @@ class AppInfoDict(TypedDict):
79124 kernel = "Windows_NT" ,
80125 vendor_os = "win32" ,
81126 current_version = "9.9.2-15962" ,
82- build_version = 15962 ,
127+ # build_version=15962,
83128 pt_version = "2.0.0" ,
84129 misc_bitmap = 32764 ,
85130 pt_os_version = 23 ,
86131 package_name = "com.tencent.qq" ,
87132 wtlogin_sdk = "nt.wtlogin.0.0.1" ,
88- package_sign = "V1_WIN_NQ_9.9.2-15962_RDM_B" ,
133+ # package_sign="V1_WIN_NQ_9.9.2-15962_RDM_B",
89134 app_id = 1600001604 ,
90135 sub_app_id = 537138217 ,
91136 app_id_qrcode = 537138217 ,
0 commit comments