Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-06-22 20:57:21 +08:00
parent bc3ce66322
commit c6a377b9d4
15 changed files with 175 additions and 165 deletions

View File

@@ -21,16 +21,17 @@ class Constants {
static const String traceId =
'11111111111111111111111111111111:1111111111111111:0:0';
static const String userAgent =
'Mozilla/5.0 BiliDroid/1.46.2 (bbcallen@gmail.com) os/android model/vivo mobi_app/android_hd build/2001100 channel/yingyongbao innerVer/2001100 osVer/14 network/2';
'Mozilla/5.0 BiliDroid/2.0.1 (bbcallen@gmail.com) os/android model/android_hd mobi_app/android_hd build/2001100 channel/master innerVer/2001100 osVer/15 network/2';
static const String statistics =
'{"appId":5,"platform":3,"version":"1.46.2","abtest":""}';
'{"appId":5,"platform":3,"version":"2.0.1","abtest":""}';
// 请求时会自动encodeComponent
// app
static const String userAgentApp =
'Mozilla/5.0 BiliDroid/8.43.0 (bbcallen@gmail.com) os/android model/android mobi_app/android build/8430300 channel/bili innerVer/8430300 osVer/15 network/2';
'Mozilla/5.0 BiliDroid/8.43.0 (bbcallen@gmail.com) os/android model/android mobi_app/android build/8430300 channel/master innerVer/8430300 osVer/15 network/2';
static const String statisticsApp =
'{"appId":5,"platform":3,"version":"8.43.0","abtest":""}';
'{"appId":1,"platform":3,"version":"8.43.0","abtest":""}';
static const urlPattern =
r'https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]';

View File

@@ -1,5 +1,6 @@
import 'package:PiliPlus/grpc/bilibili/community/service/dm/v1.pb.dart';
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/grpc/url.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:fixnum/fixnum.dart';
@@ -9,7 +10,7 @@ class DmGrpc {
required int segmentIndex,
int type = 1,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.dmSegMobile,
DmSegMobileReq(
oid: Int64(cid),

View File

@@ -1,5 +1,11 @@
import 'package:PiliPlus/grpc/bilibili/app/dynamic/v1.pb.dart';
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/bilibili/app/dynamic/v1.pb.dart'
show DynRedReq, TabOffset, DynRedReply;
import 'package:PiliPlus/grpc/bilibili/app/dynamic/v2.pb.dart'
show OpusType, OpusDetailReq, OpusDetailResp;
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/grpc/url.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:fixnum/fixnum.dart';
class DynGrpc {
// static Future dynSpace({
@@ -19,11 +25,25 @@ class DynGrpc {
// }
static Future<int?> dynRed() async {
final res = await GrpcRepo.request(
final res = await GrpcReq.request(
GrpcUrl.dynRed,
DynRedReq(tabOffset: [TabOffset(tab: 1)]),
DynRedReply.fromBuffer,
);
return res.dataOrNull?.dynRedItem.count.toInt();
}
static Future<LoadingState<OpusDetailResp>> opusDetail({
OpusType? opusType,
required int oid,
}) async {
return GrpcReq.request(
GrpcUrl.opusDetail,
OpusDetailReq(
opusType: opusType,
oid: Int64(oid),
),
OpusDetailResp.fromBuffer,
);
}
}

View File

@@ -7,7 +7,6 @@ import 'package:PiliPlus/grpc/bilibili/metadata/device.pb.dart';
import 'package:PiliPlus/grpc/bilibili/metadata/fawkes.pb.dart';
import 'package:PiliPlus/grpc/bilibili/metadata/locale.pb.dart';
import 'package:PiliPlus/grpc/bilibili/metadata/network.pb.dart' as network;
import 'package:PiliPlus/grpc/bilibili/metadata/restriction.pb.dart';
import 'package:PiliPlus/grpc/google/rpc/status.pb.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/http/init.dart';
@@ -18,64 +17,16 @@ import 'package:PiliPlus/utils/login_utils.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:archive/archive.dart';
import 'package:dio/dio.dart';
import 'package:fixnum/fixnum.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:protobuf/protobuf.dart' show GeneratedMessage;
class GrpcUrl {
// static const playerOnline =
// '/bilibili.app.playeronline.v1.PlayerOnline/PlayerOnline';
// static const popular = '/bilibili.app.show.v1.Popular/Index';
// dynamic
static const dynV1 = '/bilibili.app.dynamic.v1.Dynamic';
static const dynV2 = '/bilibili.app.dynamic.v2.Dynamic';
static const opusV2 = '/bilibili.app.dynamic.v2.Opus';
static const dynRed = '$dynV1/DynRed';
static const opusSpaceFlow = '$opusV2/OpusSpaceFlow';
// static const dynSpace = '$dynV2/DynSpace';
// danmaku
static const dmSegMobile = '/bilibili.community.service.dm.v1.DM/DmSegMobile';
// reply
static const reply = '/bilibili.main.community.reply.v1.Reply';
static const mainList = '$reply/MainList';
static const detailList = '$reply/DetailList';
static const dialogList = '$reply/DialogList';
// static const replyInfo = '$reply/ReplyInfo';
// im
static const im = '/bilibili.im.interface.v1.ImInterface';
static const im2 = '/bilibili.app.im.v1.im';
static const sendMsg = '$im/SendMsg';
static const shareList = '$im/ShareList';
static const sessionMain = '$im2/SessionMain';
static const sessionSecondary = '$im2/SessionSecondary';
static const clearUnread = '$im2/ClearUnread';
static const sessionUpdate = '$im2/SessionUpdate';
static const pinSession = '$im2/PinSession';
static const unpinSession = '$im2/UnpinSession';
static const deleteSessionList = '$im2/DeleteSessionList';
static const getImSettings = '$im2/GetImSettings';
static const setImSettings = '$im2/SetImSettings';
static const keywordBlockingList = '$im2/KeywordBlockingList';
static const keywordBlockingAdd = '$im2/KeywordBlockingAdd';
static const keywordBlockingDelete = '$im2/KeywordBlockingDelete';
static const syncFetchSessionMsgs = '$im/SyncFetchSessionMsgs';
static const getTotalUnread = '$im/GetTotalUnread';
// view
static const viewunite = '/bilibili.app.viewunite.v1.View';
static const view = '$viewunite/View';
}
class GrpcRepo {
class GrpcReq {
static String? _accessKey = Accounts.main.accessKey;
static const _build = 2001100;
static const _biliChannel = 'bili';
static const _versionName = '2.0.1';
static const _biliChannel = 'master';
static const _mobiApp = 'android_hd';
static const _phone = 'phone';
static const _device = 'android';
static final _buvid = LoginUtils.buvid;
static final _traceId = IdUtils.genTraceId();
@@ -91,19 +42,20 @@ class GrpcRepo {
headers['x-bili-metadata-bin'] = base64Encode(Metadata(
accessKey: _accessKey ?? '',
mobiApp: _mobiApp,
device: _phone,
device: _device,
build: _build,
channel: _biliChannel,
buvid: _buvid,
platform: _mobiApp,
platform: _device,
).writeToBuffer());
options = Options(headers: headers, responseType: ResponseType.bytes);
}
static final Map<String, String> headers = {
Headers.contentTypeHeader: 'application/grpc',
'grpc-encoding': 'gzip',
'gzip-accept-encoding': 'gzip,identity',
'user-agent': '${Constants.userAgent} grpc-java-cronet/1.36.1',
'user-agent': Constants.userAgent,
'x-bili-gaia-vtoken': '',
'x-bili-aurora-zone': '',
'x-bili-trace-id': _traceId,
@@ -111,58 +63,45 @@ class GrpcRepo {
'buvid': _buvid,
'bili-http-engine': 'cronet',
'te': 'trailers',
'x-bili-fawkes-req-bin': base64Encode(
FawkesReq(appkey: _mobiApp, env: 'prod', sessionId: _sessionId)
.writeToBuffer()),
'x-bili-fawkes-req-bin': base64Encode(FawkesReq(
appkey: _mobiApp,
env: 'prod',
sessionId: _sessionId,
).writeToBuffer()),
'x-bili-metadata-bin': base64Encode(Metadata(
accessKey: _accessKey ?? '',
mobiApp: _mobiApp,
device: _phone,
device: _device,
build: _build,
channel: _biliChannel,
buvid: _buvid,
platform: _mobiApp,
platform: _device,
).writeToBuffer()),
'x-bili-device-bin': base64Encode(Device(
appId: 1,
build: _build,
buvid: _buvid,
mobiApp: _mobiApp,
platform: _mobiApp,
device: _phone,
channel: _biliChannel,
brand: _phone,
model: _phone,
osver: '14',
fpLocal: '',
fpRemote: '',
versionName: _build.toString(),
fp: '',
fts: Int64())
.writeToBuffer()),
appId: 5,
build: _build,
buvid: _buvid,
mobiApp: _mobiApp,
platform: _device,
channel: _biliChannel,
brand: _device,
model: _device,
osver: '15',
versionName: _versionName,
).writeToBuffer()),
'x-bili-network-bin': base64Encode(network.Network(
type: network.NetworkType.WIFI,
tf: network.TFType.TF_UNKNOWN,
oid: '')
.writeToBuffer()),
'x-bili-restriction-bin': base64Encode(Restriction(
teenagersMode: false,
lessonsMode: false,
mode: ModeType.NORMAL,
review: false,
disableRcmd: false,
basicMode: false)
.writeToBuffer()),
type: network.NetworkType.WIFI,
).writeToBuffer()),
'x-bili-locale-bin': base64Encode(Locale(
cLocale: LocaleIds(language: 'zh', region: 'CN'),
sLocale: LocaleIds(language: 'zh', region: 'CN'),
simCode: '',
timezone: 'Asia/Shanghai')
.writeToBuffer()),
cLocale: LocaleIds(language: 'zh', region: 'CN', script: 'Hans'),
sLocale: LocaleIds(language: 'zh', region: 'CN', script: 'Hans'),
timezone: 'Asia/Shanghai',
).writeToBuffer()),
'x-bili-exps-bin': '',
};
static final _unprintableRegExp = RegExp(r"[^\u4e00-\u9fa5UP]");
static Options options =
Options(headers: headers, responseType: ResponseType.bytes);
static Uint8List compressProtobuf(Uint8List proto) {
proto = const GZipEncoder().encodeBytes(proto);
@@ -186,8 +125,7 @@ class GrpcRepo {
static Future<LoadingState<T>> request<T>(String url,
GeneratedMessage request, T Function(Uint8List) grpcParser) async {
final response = await Request().post(HttpString.appBaseUrl + url,
data: compressProtobuf(request.writeToBuffer()),
options: Options(headers: headers, responseType: ResponseType.bytes));
data: compressProtobuf(request.writeToBuffer()), options: options);
if (response.data is Map) {
return Error(response.data['message']);
@@ -219,9 +157,7 @@ class GrpcRepo {
? 'CODE: ${grpcMsg.code}(${grpcMsg.message})\nMSG: $errMsg'
: errMsg;
} catch (e) {
msg = utf8
.decode(msgBytes, allowMalformed: true)
.replaceAll(_unprintableRegExp, '');
msg = utf8.decode(msgBytes, allowMalformed: true);
}
}
return Error(msg);

View File

@@ -1,7 +1,8 @@
import 'package:PiliPlus/grpc/bilibili/app/im/v1.pb.dart';
import 'package:PiliPlus/grpc/bilibili/im/interfaces/v1.pb.dart';
import 'package:PiliPlus/grpc/bilibili/im/type.pb.dart';
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/grpc/url.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:fixnum/fixnum.dart';
import 'package:protobuf/protobuf.dart' show PbMap;
@@ -14,7 +15,7 @@ class ImGrpc {
required String content,
MsgType msgType = MsgType.EN_MSG_TYPE_TEXT,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.sendMsg,
ReqSendMsg(
msg: Msg(
@@ -34,7 +35,7 @@ class ImGrpc {
}
static Future<LoadingState<RspShareList>> shareList({int size = 10}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.shareList,
ReqShareList(size: size),
RspShareList.fromBuffer,
@@ -46,7 +47,7 @@ class ImGrpc {
Int64? endSeqno,
Int64? beginSeqno,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.syncFetchSessionMsgs,
ReqSessionMsg(
talkerId: Int64(talkerId),
@@ -63,7 +64,7 @@ class ImGrpc {
static Future<LoadingState<SessionMainReply>> sessionMain({
PbMap<int, Offset>? offset,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.sessionMain,
SessionMainReq(
paginationParams: PaginationParams(offsets: offset),
@@ -76,7 +77,7 @@ class ImGrpc {
PbMap<int, Offset>? offset,
SessionPageType? pageType,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.sessionSecondary,
SessionSecondaryReq(
paginationParams: PaginationParams(offsets: offset),
@@ -90,7 +91,7 @@ class ImGrpc {
SessionPageType? pageType,
SessionId? sessionId,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.clearUnread,
ClearUnreadReq(
pageType: pageType,
@@ -104,7 +105,7 @@ class ImGrpc {
SessionPageType? pageType,
SessionId? sessionId,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.sessionUpdate,
SessionUpdateReq(
pageType: pageType,
@@ -118,7 +119,7 @@ class ImGrpc {
SessionId? sessionId,
Int64? topTimeMicros,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.pinSession,
PinSessionReq(
sessionId: sessionId,
@@ -131,7 +132,7 @@ class ImGrpc {
static Future<LoadingState<UnPinSessionReply>> unpinSession({
SessionId? sessionId,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.unpinSession,
UnPinSessionReq(
sessionId: sessionId,
@@ -143,7 +144,7 @@ class ImGrpc {
static Future<LoadingState<DeleteSessionListReply>> deleteSessionList({
SessionPageType? pageType,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.deleteSessionList,
DeleteSessionListReq(
pageType: pageType,
@@ -154,7 +155,7 @@ class ImGrpc {
static Future<LoadingState<GetImSettingsReply>> getImSettings(
{IMSettingType? type}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.getImSettings,
GetImSettingsReq(
type: type,
@@ -165,7 +166,7 @@ class ImGrpc {
static Future<LoadingState<SetImSettingsReply>> setImSettings(
{PbMap<int, Setting>? settings}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.setImSettings,
SetImSettingsReq(
settings: settings,
@@ -175,7 +176,7 @@ class ImGrpc {
}
static Future<LoadingState<KeywordBlockingListReply>> keywordBlockingList() {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.keywordBlockingList,
KeywordBlockingListReq(),
KeywordBlockingListReply.fromBuffer,
@@ -184,7 +185,7 @@ class ImGrpc {
static Future<LoadingState<KeywordBlockingAddReply>> keywordBlockingAdd(
String keyword) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.keywordBlockingAdd,
KeywordBlockingAddReq(keyword: keyword),
KeywordBlockingAddReply.fromBuffer,
@@ -193,7 +194,7 @@ class ImGrpc {
static Future<LoadingState<KeywordBlockingDeleteReply>> keywordBlockingDelete(
String keyword) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.keywordBlockingDelete,
KeywordBlockingDeleteReq(keyword: keyword),
KeywordBlockingDeleteReply.fromBuffer,
@@ -202,7 +203,7 @@ class ImGrpc {
static Future<LoadingState<RspTotalUnread>> getTotalUnread(
{int? unreadType}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.getTotalUnread,
ReqTotalUnread(unreadType: unreadType, showUnfollowList: 1),
RspTotalUnread.fromBuffer,

View File

@@ -1,7 +1,8 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart';
import 'package:PiliPlus/grpc/bilibili/pagination.pb.dart';
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/grpc/url.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:fixnum/fixnum.dart';
@@ -45,7 +46,7 @@ class ReplyGrpc {
required String? offset,
required Int64? cursorNext,
}) async {
final res = await GrpcRepo.request(
final res = await GrpcReq.request(
GrpcUrl.mainList,
MainListReq(
oid: Int64(oid),
@@ -87,7 +88,7 @@ class ReplyGrpc {
required Mode mode,
required String? offset,
}) async {
final res = await GrpcRepo.request(
final res = await GrpcReq.request(
GrpcUrl.detailList,
DetailListReq(
oid: Int64(oid),
@@ -111,7 +112,7 @@ class ReplyGrpc {
required int dialog,
required String? offset,
}) async {
final res = await GrpcRepo.request(
final res = await GrpcReq.request(
GrpcUrl.dialogList,
DialogListReq(
oid: Int64(oid),

View File

@@ -1,6 +1,7 @@
import 'package:PiliPlus/grpc/bilibili/app/dynamic/v2.pb.dart';
import 'package:PiliPlus/grpc/bilibili/pagination.pb.dart';
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/grpc/url.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:fixnum/fixnum.dart';
@@ -10,7 +11,7 @@ class SpaceGrpc {
String? next,
required String filterType,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.opusSpaceFlow,
OpusSpaceFlowReq(
hostMid: Int64(hostMid),

48
lib/grpc/url.dart Normal file
View File

@@ -0,0 +1,48 @@
class GrpcUrl {
// static const playerOnline =
// '/bilibili.app.playeronline.v1.PlayerOnline/PlayerOnline';
// static const popular = '/bilibili.app.show.v1.Popular/Index';
// dynamic
static const dynV1 = '/bilibili.app.dynamic.v1.Dynamic';
// static const dynV2 = '/bilibili.app.dynamic.v2.Dynamic';
static const opusV2 = '/bilibili.app.dynamic.v2.Opus';
static const dynRed = '$dynV1/DynRed';
static const opusSpaceFlow = '$opusV2/OpusSpaceFlow';
static const opusDetail = '$opusV2/OpusDetail';
// static const dynSpace = '$dynV2/DynSpace';
// danmaku
static const dmSegMobile = '/bilibili.community.service.dm.v1.DM/DmSegMobile';
// reply
static const reply = '/bilibili.main.community.reply.v1.Reply';
static const mainList = '$reply/MainList';
static const detailList = '$reply/DetailList';
static const dialogList = '$reply/DialogList';
// static const replyInfo = '$reply/ReplyInfo';
// im
static const im = '/bilibili.im.interface.v1.ImInterface';
static const im2 = '/bilibili.app.im.v1.im';
static const sendMsg = '$im/SendMsg';
static const shareList = '$im/ShareList';
static const sessionMain = '$im2/SessionMain';
static const sessionSecondary = '$im2/SessionSecondary';
static const clearUnread = '$im2/ClearUnread';
static const sessionUpdate = '$im2/SessionUpdate';
static const pinSession = '$im2/PinSession';
static const unpinSession = '$im2/UnpinSession';
static const deleteSessionList = '$im2/DeleteSessionList';
static const getImSettings = '$im2/GetImSettings';
static const setImSettings = '$im2/SetImSettings';
static const keywordBlockingList = '$im2/KeywordBlockingList';
static const keywordBlockingAdd = '$im2/KeywordBlockingAdd';
static const keywordBlockingDelete = '$im2/KeywordBlockingDelete';
static const syncFetchSessionMsgs = '$im/SyncFetchSessionMsgs';
static const getTotalUnread = '$im/GetTotalUnread';
// view
static const viewunite = '/bilibili.app.viewunite.v1.View';
static const view = '$viewunite/View';
}

View File

@@ -1,13 +1,14 @@
import 'package:PiliPlus/grpc/bilibili/app/viewunite/v1.pb.dart'
show ViewReq, ViewReply;
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/grpc/url.dart';
import 'package:PiliPlus/http/loading_state.dart';
class ViewGrpc {
static Future<LoadingState<ViewReply>> view({
required String bvid,
}) {
return GrpcRepo.request(
return GrpcReq.request(
GrpcUrl.view,
ViewReq(
bvid: bvid,

View File

@@ -164,10 +164,10 @@ class LiveHttp {
if (isLogin) 'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'device_name': 'vivo',
'device_name': 'android',
'device_type': '0',
'fnval': '912',
'disable_rcmd': '0',
@@ -180,7 +180,7 @@ class LiveHttp {
if (isLogin) 'relation_page': '1',
's_locale': 'zh_CN',
'scale': '2',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': DateTime.now().millisecondsSinceEpoch ~/ 1000,
};
AppSign.appSign(
@@ -229,10 +229,10 @@ class LiveHttp {
'actionKey': 'appkey',
if (areaId != null) 'area_id': areaId,
if (parentAreaId != null) 'parent_area_id': parentAreaId,
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'device_name': 'vivo',
'device_name': 'android',
'device_type': '0',
'fnval': '912',
'disable_rcmd': '0',
@@ -248,7 +248,7 @@ class LiveHttp {
'tag_version': '1',
's_locale': 'zh_CN',
'scale': '2',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(),
};
AppSign.appSign(
@@ -274,14 +274,14 @@ class LiveHttp {
if (isLogin) 'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'disable_rcmd': '0',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': DateTime.now().millisecondsSinceEpoch ~/ 1000,
};
AppSign.appSign(
@@ -309,14 +309,14 @@ class LiveHttp {
if (isLogin) 'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'disable_rcmd': '0',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': DateTime.now().millisecondsSinceEpoch ~/ 1000,
};
AppSign.appSign(
@@ -347,14 +347,14 @@ class LiveHttp {
'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'disable_rcmd': '0',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': DateTime.now().millisecondsSinceEpoch ~/ 1000,
};
AppSign.appSign(
@@ -385,7 +385,7 @@ class LiveHttp {
if (isLogin) 'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'disable_rcmd': '0',
@@ -395,7 +395,7 @@ class LiveHttp {
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': DateTime.now().millisecondsSinceEpoch ~/ 1000,
};
AppSign.appSign(
@@ -426,7 +426,7 @@ class LiveHttp {
if (isLogin) 'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'device': 'pad',
'page': page,
@@ -436,7 +436,7 @@ class LiveHttp {
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'statistics': Constants.statisticsApp,
'ts': DateTime.now().millisecondsSinceEpoch ~/ 1000,
'type': type.name,
};

View File

@@ -98,7 +98,7 @@ class LoginHttp {
'build': '2001100',
'buvid': buvid,
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'channel': 'master',
'cid': cid,
// if (deviceTouristId != null) 'device_tourist_id': deviceTouristId,
'disable_rcmd': '0',
@@ -147,7 +147,7 @@ class LoginHttp {
// 'build': '2001100',
// 'buvid': buvid,
// 'c_locale': 'zh_CN',
// 'channel': 'yingyongbao',
// 'channel': 'master',
// 'deviceInfo': 'xxxxxx',
// 'disable_rcmd': '0',
// 'dt': Uri.encodeComponent(Encrypter(RSA(publicKey: publicKey))
@@ -199,7 +199,7 @@ class LoginHttp {
'build': '2001100',
'buvid': buvid,
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'channel': 'master',
'device': 'phone',
'device_id': deviceId,
//'device_meta': '',
@@ -267,7 +267,7 @@ class LoginHttp {
'buvid': buvid,
'c_locale': 'zh_CN',
'captcha_key': captchaKey,
'channel': 'yingyongbao',
'channel': 'master',
'cid': cid,
'code': code,
'device': 'phone',
@@ -441,7 +441,7 @@ class LoginHttp {
'build': '2001100',
'buvid': buvid,
// 'c_locale': 'zh_CN',
// 'channel': 'yingyongbao',
// 'channel': 'master',
'code': code,
// 'device': 'phone',
// 'device_id': deviceId,

View File

@@ -245,7 +245,7 @@ class SearchHttp {
final res = await Request().get(
Api.searchRecommend,
queryParameters: {
'build': '8350200',
'build': '8430300',
'c_locale': 'zh_CN',
'mobi_app': 'android',
'platform': 'android',

View File

@@ -76,10 +76,10 @@ class VideoHttp {
Map<String, String> data = {
'build': '2001100',
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'channel': 'master',
'column': '4',
'device': 'pad',
'device_name': 'vivo',
'device_name': 'android',
'device_type': '0',
'disable_rcmd': '0',
'flush': '5',

View File

@@ -64,9 +64,9 @@ class _EditProfilePageState extends State<EditProfilePage> {
Future<void> _getInfo() async {
Map<String, String> data = {
'build': '1462100',
'build': '2001100',
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'channel': 'master',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
@@ -336,9 +336,9 @@ class _EditProfilePageState extends State<EditProfilePage> {
}
Map<String, String> data = {
'access_key': accessKey!,
'build': '1462100',
'build': '2001100',
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'channel': 'master',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',

View File

@@ -1,6 +1,6 @@
import 'dart:math';
import 'package:PiliPlus/grpc/grpc_repo.dart';
import 'package:PiliPlus/grpc/grpc_req.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart';
@@ -26,7 +26,7 @@ class LoginUtils {
static Future<void> onLoginMain() async {
final account = Accounts.main;
GrpcRepo.updateHeaders(account.accessKey);
GrpcReq.updateHeaders(account.accessKey);
try {
final cookies = account.cookieJar.toList();
final webManager = web.CookieManager();
@@ -105,7 +105,7 @@ class LoginUtils {
..face.value = ''
..isLogin.value = false;
GrpcRepo.updateHeaders(null);
GrpcReq.updateHeaders(null);
await Future.wait([
web.CookieManager().deleteAllCookies(),