mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
@@ -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+&@#/%=~_|]';
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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-\u9fa5,。;!?UP]");
|
||||
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);
|
||||
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
48
lib/grpc/url.dart
Normal 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';
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user