opt: buvid

This commit is contained in:
My-Responsitories
2025-09-23 12:20:07 +08:00
parent d727e2a62a
commit da1ea68f8b
11 changed files with 102 additions and 62 deletions

View File

@@ -2,6 +2,7 @@ import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/models/common/account_type.dart';
import 'package:PiliPlus/utils/accounts.dart';
import 'package:PiliPlus/utils/id_utils.dart';
import 'package:PiliPlus/utils/login_utils.dart';
import 'package:cookie_jar/cookie_jar.dart';
import 'package:hive/hive.dart';
@@ -32,6 +33,8 @@ sealed class Account {
String? get refresh => throw UnimplementedError();
String get buvid => throw UnimplementedError();
const Account();
}
@@ -51,6 +54,9 @@ class LoginAccount extends Account {
@override
@HiveField(3)
final Set<AccountType> type;
@override
@HiveField(4)
final String buvid;
@override
bool activited = false;
@@ -69,11 +75,19 @@ class LoginAccount extends Account {
late final String csrf =
cookieJar.domainCookies['bilibili.com']!['/']!['bili_jct']!.cookie.value;
@override
Future<void> delete() => _box.delete(_midStr);
bool _hasDelete = false;
@override
Future<void> onChange() => _box.put(_midStr, this);
Future<void> delete() {
assert(_hasDelete = true);
return _box.delete(_midStr);
}
@override
Future<void> onChange() {
assert(!_hasDelete);
return _box.put(_midStr, this);
}
@override
Map<String, dynamic>? toJson() => {
@@ -81,6 +95,7 @@ class LoginAccount extends Account {
'accessKey': accessKey,
'refresh': refresh,
'type': type.map((i) => i.index).toList(),
'buvid': buvid,
};
late final String _midStr = cookieJar
@@ -95,7 +110,9 @@ class LoginAccount extends Account {
this.accessKey,
this.refresh, [
Set<AccountType>? type,
]) : type = type ?? {} {
String? buvid,
]) : type = type ?? {},
buvid = buvid ?? LoginUtils.generateBuvid() {
cookieJar.setBuvid3();
}
@@ -104,6 +121,7 @@ class LoginAccount extends Account {
json['accessKey'],
json['refresh'],
(json['type'] as Iterable?)?.map((i) => AccountType.values[i]).toSet(),
json['buvid'],
);
@override
@@ -131,12 +149,15 @@ class AnonymousAccount extends Account {
final String csrf = '';
@override
final Map<String, String> headers = Constants.baseHeaders;
@override
String buvid = LoginUtils.generateBuvid();
@override
bool activited = false;
@override
Future<void> delete() async {
buvid = LoginUtils.generateBuvid();
await cookieJar.deleteAll();
cookieJar.setBuvid3();
}

View File

@@ -18,13 +18,14 @@ class LoginAccountAdapter extends TypeAdapter<LoginAccount> {
fields[1] as String?,
fields[2] as String?,
(fields[3] as List?)?.cast<AccountType>().toSet(),
fields[4] as String?,
);
}
@override
void write(BinaryWriter writer, LoginAccount obj) {
writer
..writeByte(4)
..writeByte(5)
..writeByte(0)
..write(obj.cookieJar)
..writeByte(1)
@@ -32,7 +33,9 @@ class LoginAccountAdapter extends TypeAdapter<LoginAccount> {
..writeByte(2)
..write(obj.refresh)
..writeByte(3)
..write(obj.type.toList());
..write(obj.type.toList())
..writeByte(4)
..write(obj.buvid);
}
@override

View File

@@ -49,11 +49,12 @@ abstract class LoginUtils {
static Future<void> onLoginMain() async {
final account = Accounts.main;
GrpcReq.updateHeaders(account.accessKey);
setWebCookie(account);
RequestUtils.syncHistoryStatus();
final result = await UserHttp.userInfo();
if (result.isSuccess) {
GrpcReq.updateHeaders(account.accessKey, account.buvid);
setWebCookie(account);
RequestUtils.syncHistoryStatus();
final UserInfoData data = result.data;
if (data.isLogin == true) {
Get.find<AccountService>()
@@ -114,7 +115,7 @@ abstract class LoginUtils {
..face.value = ''
..isLogin.value = false;
GrpcReq.updateHeaders(null);
GrpcReq.updateHeaders(null, AnonymousAccount().buvid);
await Future.wait([
if (!Platform.isWindows) web.CookieManager.instance().deleteAllCookies(),
@@ -166,8 +167,6 @@ abstract class LoginUtils {
return 'XY${md5Str[2]}${md5Str[12]}${md5Str[22]}$md5Str';
}
static final buvid = Pref.buvid;
// static String getUUID() {
// return const Uuid().v4().replaceAll('-', '');
// }

View File

@@ -221,8 +221,7 @@ abstract class LocalCacheKey {
blackMids = 'blackMids',
danmakuFilterRules = 'danmakuFilterRules',
mixinKey = 'mixinKey',
timeStamp = 'timeStamp',
buvid = 'buvid';
timeStamp = 'timeStamp';
}
abstract class VideoBoxKey {

View File

@@ -26,7 +26,6 @@ import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart';
import 'package:PiliPlus/utils/context_ext.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/login_utils.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart';
import 'package:flutter/material.dart';
@@ -801,15 +800,6 @@ abstract class Pref {
static bool get silentDownImg =>
_setting.get(SettingBoxKey.silentDownImg, defaultValue: false);
static String get buvid {
String? buvid = _localCache.get(LocalCacheKey.buvid);
if (buvid == null) {
buvid = LoginUtils.generateBuvid();
_localCache.put(LocalCacheKey.buvid, buvid);
}
return buvid;
}
static bool get showMemberShop =>
_setting.get(SettingBoxKey.showMemberShop, defaultValue: false);