mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-06-25 20:00:13 +08:00
opt: buvid
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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('-', '');
|
||||
// }
|
||||
|
||||
@@ -221,8 +221,7 @@ abstract class LocalCacheKey {
|
||||
blackMids = 'blackMids',
|
||||
danmakuFilterRules = 'danmakuFilterRules',
|
||||
mixinKey = 'mixinKey',
|
||||
timeStamp = 'timeStamp',
|
||||
buvid = 'buvid';
|
||||
timeStamp = 'timeStamp';
|
||||
}
|
||||
|
||||
abstract class VideoBoxKey {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user