From 1345fd36e4f829ff662a222f188ed68c4cb8102c Mon Sep 17 00:00:00 2001 From: My-Responsitories <107370289+My-Responsitories@users.noreply.github.com> Date: Tue, 23 Sep 2025 15:58:40 +0800 Subject: [PATCH] opt: account (#1306) * opt: account * opt: account * opt: live api * opt: buvid * Revert "opt: buvid" This reverts commit da1ea68f8bfd0b9af6958062557c85135ab8b08d. * tweak --- lib/grpc/grpc_req.dart | 2 +- lib/http/api.dart | 21 --- lib/http/live.dart | 43 ++--- lib/http/login.dart | 2 +- lib/http/pgc.dart | 17 +- lib/http/reply.dart | 2 +- lib/pages/live/controller.dart | 15 +- lib/pages/live_area/controller.dart | 6 +- .../live_area_detail/child/controller.dart | 4 - lib/pages/live_area_detail/controller.dart | 9 +- lib/pages/live_search/child/controller.dart | 5 - lib/pages/login/controller.dart | 18 +- lib/pages/mine/controller.dart | 3 +- .../setting/models/privacy_settings.dart | 29 +++- lib/utils/accounts.dart | 32 ++-- lib/utils/accounts/account.dart | 156 +++++++----------- .../accounts/account_manager/account_mgr.dart | 15 +- lib/utils/update.dart | 2 +- 18 files changed, 173 insertions(+), 208 deletions(-) diff --git a/lib/grpc/grpc_req.dart b/lib/grpc/grpc_req.dart index 2a0c6ef79..1e2b3108d 100644 --- a/lib/grpc/grpc_req.dart +++ b/lib/grpc/grpc_req.dart @@ -141,7 +141,7 @@ class GrpcReq { GeneratedMessage request, T Function(Uint8List) grpcParser, ) async { - final response = await Request().post( + final response = await Request().post( HttpString.appBaseUrl + url, data: compressProtobuf(request.writeToBuffer()), options: options, diff --git a/lib/http/api.dart b/lib/http/api.dart index 47bd9dc1a..110262cd7 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -398,27 +398,6 @@ class Api { static const String pgcUpdate = '/pgc/web/follow/status/update'; - // 番剧列表 - // https://api.bilibili.com/pgc/season/index/result? - // st=1& - // order=3 - // season_version=-1 全部-1 正片1 电影2 其他3 - // spoken_language_type=-1 全部-1 原生1 中文配音2 - // area=-1& - // is_finish=-1& - // copyright=-1& - // season_status=-1& - // season_month=-1& - // year=-1& - // style_id=-1& - // sort=0& - // page=1& - // season_type=1& - // pagesize=20& - // type=1 - static const String pgcIndex = - '/pgc/season/index/result?st=1&order=3&season_version=-1&spoken_language_type=-1&area=-1&is_finish=-1©right=-1&season_status=-1&season_month=-1&year=-1&style_id=-1&sort=0&season_type=1&pagesize=20&type=1'; - // 我的追番/追剧 ?type=1&pn=1&ps=15 static const String favPgc = '/x/space/bangumi/follow/list'; diff --git a/lib/http/live.dart b/lib/http/live.dart index b41c31e4d..295978042 100644 --- a/lib/http/live.dart +++ b/lib/http/live.dart @@ -4,6 +4,7 @@ import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/login.dart'; import 'package:PiliPlus/http/ua_type.dart'; +import 'package:PiliPlus/models/common/account_type.dart'; import 'package:PiliPlus/models/common/live_search_type.dart'; import 'package:PiliPlus/models_new/live/live_area_list/area_item.dart'; import 'package:PiliPlus/models_new/live/live_area_list/area_list.dart'; @@ -20,12 +21,20 @@ import 'package:PiliPlus/models_new/live/live_search/data.dart'; import 'package:PiliPlus/models_new/live/live_second_list/data.dart'; import 'package:PiliPlus/models_new/live/live_superchat/data.dart'; import 'package:PiliPlus/utils/accounts.dart'; +import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/app_sign.dart'; import 'package:PiliPlus/utils/wbi_sign.dart'; import 'package:dio/dio.dart'; -class LiveHttp { - static Future sendLiveMsg({roomId, msg, dmType, emoticonOptions}) async { +abstract final class LiveHttp { + static Account get recommend => Accounts.get(AccountType.recommend); + + static Future sendLiveMsg({ + required Object roomId, + required Object msg, + Object? dmType, + Object? emoticonOptions, + }) async { String csrf = Accounts.main.csrf; var res = await Request().post( Api.sendLiveMsg, @@ -165,11 +174,10 @@ class LiveHttp { static Future> liveFeedIndex({ required int pn, - required bool isLogin, bool moduleSelect = false, }) async { final params = { - 'access_key': ?Accounts.main.accessKey, + 'access_key': ?recommend.accessKey, 'appkey': Constants.appKey, 'channel': 'master', 'actionKey': 'appkey', @@ -187,7 +195,7 @@ class LiveHttp { 'network': 'wifi', 'page': pn, 'platform': 'android', - if (isLogin) 'relation_page': 1, + if (recommend.isLogin) 'relation_page': 1, 's_locale': 'zh_CN', 'scale': 2, 'statistics': Constants.statisticsApp, @@ -245,13 +253,12 @@ class LiveHttp { static Future> liveSecondList({ required int pn, - required bool isLogin, - required areaId, - required parentAreaId, + required Object? areaId, + required Object? parentAreaId, String? sortType, }) async { final params = { - 'access_key': ?Accounts.main.accessKey, + 'access_key': ?recommend.accessKey, 'appkey': Constants.appKey, 'actionKey': 'appkey', 'channel': 'master', @@ -313,11 +320,9 @@ class LiveHttp { } } - static Future?>> liveAreaList({ - required bool isLogin, - }) async { + static Future?>> liveAreaList() async { final params = { - 'access_key': ?Accounts.main.accessKey, + 'access_key': ?recommend.accessKey, 'appkey': Constants.appKey, 'actionKey': 'appkey', 'build': 8430300, @@ -352,9 +357,7 @@ class LiveHttp { } } - static Future>> getLiveFavTag({ - required bool isLogin, - }) async { + static Future>> getLiveFavTag() async { final params = { 'access_key': ?Accounts.main.accessKey, 'appkey': Constants.appKey, @@ -432,11 +435,10 @@ class LiveHttp { } static Future?>> liveRoomAreaList({ - required bool isLogin, - required parentid, + required Object parentid, }) async { final params = { - 'access_key': ?Accounts.main.accessKey, + 'access_key': ?recommend.accessKey, 'appkey': Constants.appKey, 'actionKey': 'appkey', 'build': 8430300, @@ -473,13 +475,12 @@ class LiveHttp { } static Future> liveSearch({ - required bool isLogin, required int page, required String keyword, required LiveSearchType type, }) async { final params = { - 'access_key': ?Accounts.main.accessKey, + 'access_key': ?recommend.accessKey, 'appkey': Constants.appKey, 'actionKey': 'appkey', 'build': 8430300, diff --git a/lib/http/login.dart b/lib/http/login.dart index def57cfc1..8b7ced525 100644 --- a/lib/http/login.dart +++ b/lib/http/login.dart @@ -17,7 +17,7 @@ import 'package:encrypt/encrypt.dart'; class LoginHttp { static final String deviceId = LoginUtils.genDeviceId(); - static final String buvid = LoginUtils.buvid; + static String get buvid => LoginUtils.buvid; static final Map headers = { 'buvid': buvid, 'env': 'prod', diff --git a/lib/http/pgc.dart b/lib/http/pgc.dart index 31c74d08f..61fbf6cda 100644 --- a/lib/http/pgc.dart +++ b/lib/http/pgc.dart @@ -62,8 +62,23 @@ class PgcHttp { int? indexType, }) async { var res = await Request().get( - Api.pgcIndex, + Api.pgcIndexResult, queryParameters: { + 'st': 1, + 'order': 3, + 'season_version': -1, + 'spoken_language_type': -1, + 'area': -1, + 'is_finish': -1, + 'copyright': -1, + 'season_status': -1, + 'season_month': -1, + 'year': -1, + 'style_id': -1, + 'sort': 0, + 'season_type': 1, + 'pagesize': 20, + 'type': 1, 'page': page, 'index_type': ?indexType, }, diff --git a/lib/http/reply.dart b/lib/http/reply.dart index 0e7a6945e..fba2bd71c 100644 --- a/lib/http/reply.dart +++ b/lib/http/reply.dart @@ -13,7 +13,7 @@ import 'package:dio/dio.dart'; class ReplyHttp { static final Options options = Options( headers: {...Constants.baseHeaders, 'cookie': ''}, - extra: {'account': NoAccount()}, + extra: {'account': const NoAccount()}, ); static Future replyList({ diff --git a/lib/pages/live/controller.dart b/lib/pages/live/controller.dart index bd456a425..79c343fcb 100644 --- a/lib/pages/live/controller.dart +++ b/lib/pages/live/controller.dart @@ -7,7 +7,6 @@ import 'package:PiliPlus/models_new/live/live_feed_index/data.dart'; import 'package:PiliPlus/models_new/live/live_second_list/data.dart'; import 'package:PiliPlus/models_new/live/live_second_list/tag.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/services/account_service.dart'; import 'package:get/get.dart'; class LiveController extends CommonListController { @@ -17,8 +16,6 @@ class LiveController extends CommonListController { queryData(); } - AccountService accountService = Get.find(); - int? count; // area @@ -75,16 +72,12 @@ class LiveController extends CommonListController { if (areaIndex.value != 0) { return LiveHttp.liveSecondList( pn: page, - isLogin: accountService.isLogin.value, areaId: areaId, parentAreaId: parentAreaId, sortType: sortType, ); } - return LiveHttp.liveFeedIndex( - pn: page, - isLogin: accountService.isLogin.value, - ); + return LiveHttp.liveFeedIndex(pn: page); } @override @@ -99,11 +92,7 @@ class LiveController extends CommonListController { } Future queryTop() async { - final res = await LiveHttp.liveFeedIndex( - pn: page, - isLogin: accountService.isLogin.value, - moduleSelect: true, - ); + final res = await LiveHttp.liveFeedIndex(pn: page, moduleSelect: true); if (res.isSuccess) { final data = res.data; topState.value = Pair( diff --git a/lib/pages/live_area/controller.dart b/lib/pages/live_area/controller.dart index 6f07adf35..62580cddf 100644 --- a/lib/pages/live_area/controller.dart +++ b/lib/pages/live_area/controller.dart @@ -36,12 +36,10 @@ class LiveAreaController @override Future?>> customGetData() => - LiveHttp.liveAreaList(isLogin: accountService.isLogin.value); + LiveHttp.liveAreaList(); Future queryFavTags() async { - favState.value = await LiveHttp.getLiveFavTag( - isLogin: accountService.isLogin.value, - ); + favState.value = await LiveHttp.getLiveFavTag(); } Future setFavTag() async { diff --git a/lib/pages/live_area_detail/child/controller.dart b/lib/pages/live_area_detail/child/controller.dart index d6b7dd63e..8f126daea 100644 --- a/lib/pages/live_area_detail/child/controller.dart +++ b/lib/pages/live_area_detail/child/controller.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/models_new/live/live_feed_index/card_data_list_item.dar import 'package:PiliPlus/models_new/live/live_second_list/data.dart'; import 'package:PiliPlus/models_new/live/live_second_list/tag.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/services/account_service.dart'; import 'package:get/get.dart'; class LiveAreaChildController @@ -23,8 +22,6 @@ class LiveAreaChildController final RxInt tagIndex = 0.obs; List? newTags; - AccountService accountService = Get.find(); - @override void onInit() { super.onInit(); @@ -53,7 +50,6 @@ class LiveAreaChildController Future> customGetData() => LiveHttp.liveSecondList( pn: page, - isLogin: accountService.isLogin.value, areaId: areaId, parentAreaId: parentAreaId, sortType: sortType, diff --git a/lib/pages/live_area_detail/controller.dart b/lib/pages/live_area_detail/controller.dart index 554bb1bd6..ec54c3ed2 100644 --- a/lib/pages/live_area_detail/controller.dart +++ b/lib/pages/live_area_detail/controller.dart @@ -4,8 +4,6 @@ import 'package:PiliPlus/http/live.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/live/live_area_list/area_item.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/services/account_service.dart'; -import 'package:get/get.dart'; class LiveAreaDatailController extends CommonListController?, AreaItem> { @@ -15,8 +13,6 @@ class LiveAreaDatailController late int initialIndex = 0; - AccountService accountService = Get.find(); - @override void onInit() { super.onInit(); @@ -33,8 +29,5 @@ class LiveAreaDatailController @override Future?>> customGetData() => - LiveHttp.liveRoomAreaList( - isLogin: accountService.isLogin.value, - parentid: parentAreaId, - ); + LiveHttp.liveRoomAreaList(parentid: parentAreaId); } diff --git a/lib/pages/live_search/child/controller.dart b/lib/pages/live_search/child/controller.dart index 6c573b09d..7801359b3 100644 --- a/lib/pages/live_search/child/controller.dart +++ b/lib/pages/live_search/child/controller.dart @@ -4,8 +4,6 @@ import 'package:PiliPlus/models/common/live_search_type.dart'; import 'package:PiliPlus/models_new/live/live_search/data.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/live_search/controller.dart'; -import 'package:PiliPlus/services/account_service.dart'; -import 'package:get/get.dart'; class LiveSearchChildController extends CommonListController { @@ -14,8 +12,6 @@ class LiveSearchChildController final LiveSearchController controller; final LiveSearchType searchType; - AccountService accountService = Get.find(); - @override void checkIsEnd(int length) { switch (searchType) { @@ -48,7 +44,6 @@ class LiveSearchChildController @override Future> customGetData() { return LiveHttp.liveSearch( - isLogin: accountService.isLogin.value, page: page, keyword: controller.editingController.text, type: searchType, diff --git a/lib/pages/login/controller.dart b/lib/pages/login/controller.dart index 5a8945244..7b61e1afd 100644 --- a/lib/pages/login/controller.dart +++ b/lib/pages/login/controller.dart @@ -690,7 +690,11 @@ class LoginPageController extends GetxController tokenInfo['refresh_token'], ); await Future.wait([account.onChange(), AnonymousAccount().delete()]); - Accounts.accountMode.updateAll((_, a) => a == account ? account : a); + for (int i = 0; i < AccountType.values.length; i++) { + if (Accounts.accountMode[i].mid == account.mid) { + Accounts.accountMode[i] = account; + } + } if (Accounts.main.isLogin) { SmartDialog.showToast('登录成功'); } else { @@ -704,7 +708,7 @@ class LoginPageController extends GetxController SmartDialog.showToast('请先登录'); return Get.toNamed('/loginPage'); } - final selectAccount = Map.of(Accounts.accountMode); + final selectAccount = List.of(Accounts.accountMode); final options = { AnonymousAccount(): '0', ...Accounts.account.toMap().map( @@ -729,9 +733,9 @@ class LoginPageController extends GetxController .map( (e) => Builder( builder: (context) => RadioGroup( - groupValue: selectAccount[e], + groupValue: selectAccount[e.index], onChanged: (v) { - selectAccount[e] = v!; + selectAccount[e.index] = v!; (context as Element).markNeedsBuild(); }, child: WrapRadioOptionsGroup( @@ -756,9 +760,9 @@ class LoginPageController extends GetxController ), TextButton( onPressed: () { - for (var i in selectAccount.entries) { - if (i.value != Accounts.get(i.key)) { - Accounts.set(i.key, i.value); + for (var (i, v) in selectAccount.indexed) { + if (v != Accounts.accountMode[i]) { + Accounts.set(AccountType.values[i], v); } } Get.back(); diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index 50e20fc87..3cc0ba113 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -229,7 +229,8 @@ class MineController } res == true ? Accounts.set(AccountType.heartbeat, AnonymousAccount()) - : Accounts.accountMode[AccountType.heartbeat] = AnonymousAccount(); + : Accounts.accountMode[AccountType.heartbeat.index] = + AnonymousAccount(); }); } else { Accounts.set(AccountType.heartbeat, Accounts.main); diff --git a/lib/pages/setting/models/privacy_settings.dart b/lib/pages/setting/models/privacy_settings.dart index efab85103..6702aac2e 100644 --- a/lib/pages/setting/models/privacy_settings.dart +++ b/lib/pages/setting/models/privacy_settings.dart @@ -41,11 +41,9 @@ List get privacySettings => [ context: Get.context!, builder: (context) { return AlertDialog( - title: const Text('查看详情'), + title: const Text('账号模式详情'), content: SingleChildScrollView( - child: Text( - AccountManager.apiTypeSet[AccountType.heartbeat]!.join('\n'), - ), + child: _getAccountDetail(context), ), actions: [ TextButton( @@ -58,7 +56,26 @@ List get privacySettings => [ ); }, leading: const Icon(Icons.flag_outlined), - title: '了解无痕模式', - subtitle: '查看无痕模式作用的API列表', + title: '了解账号模式', + subtitle: '查看各个账号模式作用的API列表', ), ]; + +Widget _getAccountDetail(BuildContext context) { + final slivers = []; + final theme = TextTheme.of(context); + for (var i in AccountType.values) { + final url = AccountManager.apiTypeSet[i]; + if (url == null) continue; + + slivers + ..add(Center(child: Text(i.title, style: theme.titleMedium))) + ..add(SelectableText(url.join('\n'))); + } + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8, + children: slivers, + ); +} diff --git a/lib/utils/accounts.dart b/lib/utils/accounts.dart index 8a161624c..6798bf7a6 100644 --- a/lib/utils/accounts.dart +++ b/lib/utils/accounts.dart @@ -7,9 +7,12 @@ import 'package:hive/hive.dart'; abstract class Accounts { static late final Box account; - static final Map accountMode = {}; - static Account get main => accountMode[AccountType.main]!; - static Account get heartbeat => accountMode[AccountType.heartbeat]!; + static final List accountMode = List.filled( + AccountType.values.length, + AnonymousAccount(), + ); + static Account get main => accountMode[AccountType.main.index]; + static Account get heartbeat => accountMode[AccountType.heartbeat.index]; static Account get history { final heartbeat = Accounts.heartbeat; if (heartbeat is AnonymousAccount) { @@ -70,14 +73,11 @@ abstract class Accounts { static Future refresh() async { for (var a in account.values) { for (var t in a.type) { - accountMode[t] = a; + accountMode[t.index] = a; } } - for (var type in AccountType.values) { - accountMode[type] ??= AnonymousAccount(); - } await Future.wait( - (accountMode.values.toSet()..retainWhere((i) => !i.activited)).map( + (accountMode.toSet()..removeWhere((i) => i.activited)).map( Request.buvidActive, ), ); @@ -85,7 +85,7 @@ abstract class Accounts { static Future clear() async { await account.clear(); - for (var i in AccountType.values) { + for (int i = 0; i < AccountType.values.length; i++) { accountMode[i] = AnonymousAccount(); } await AnonymousAccount().delete(); @@ -100,9 +100,11 @@ abstract class Accounts { static Future deleteAll(Set accounts) async { var isloginMain = Accounts.main.isLogin; - Accounts.accountMode.updateAll( - (_, a) => accounts.contains(a) ? AnonymousAccount() : a, - ); + for (int i = 0; i < AccountType.values.length; i++) { + if (accounts.contains(accountMode[i])) { + accountMode[i] = AnonymousAccount(); + } + } await Future.wait(accounts.map((i) => i.delete())); if (isloginMain && !Accounts.main.isLogin) { await LoginUtils.onLogoutMain(); @@ -110,8 +112,8 @@ abstract class Accounts { } static Future set(AccountType key, Account account) async { - await (accountMode[key]?..type.remove(key))?.onChange(); - accountMode[key] = account..type.add(key); + await (accountMode[key.index]..type.remove(key)).onChange(); + accountMode[key.index] = account..type.add(key); await account.onChange(); if (!account.activited) await Request.buvidActive(account); switch (key) { @@ -129,6 +131,6 @@ abstract class Accounts { } static Account get(AccountType key) { - return accountMode[key]!; + return accountMode[key.index]; } } diff --git a/lib/utils/accounts/account.dart b/lib/utils/accounts/account.dart index 668066f61..3f0b7a510 100644 --- a/lib/utils/accounts/account.dart +++ b/lib/utils/accounts/account.dart @@ -5,41 +5,52 @@ import 'package:PiliPlus/utils/id_utils.dart'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:hive/hive.dart'; -abstract class Account { - final bool isLogin = false; - late final DefaultCookieJar cookieJar; - String? accessKey; - String? refresh; - late final Set type; +sealed class Account { + Map? toJson() => null; - final int mid = 0; - late String csrf; - final Map headers = const {}; + Future onChange() => Future.value(); - bool activited = false; + Set get type => const {}; - Future delete(); - Future onChange(); + bool get activited => false; - Map? toJson(); + set activited(bool value) => throw UnimplementedError(); + + String? get accessKey => throw UnimplementedError(); + + DefaultCookieJar get cookieJar => throw UnimplementedError(); + + String get csrf => throw UnimplementedError(); + + Future delete() => throw UnimplementedError(); + + Map get headers => throw UnimplementedError(); + + bool get isLogin => throw UnimplementedError(); + + int get mid => throw UnimplementedError(); + + String? get refresh => throw UnimplementedError(); + + const Account(); } @HiveType(typeId: 9) -class LoginAccount implements Account { +class LoginAccount extends Account { @override final bool isLogin = true; @override @HiveField(0) - late final DefaultCookieJar cookieJar; + final DefaultCookieJar cookieJar; @override @HiveField(1) - String? accessKey; + final String? accessKey; @override @HiveField(2) - String? refresh; + final String? refresh; @override @HiveField(3) - late final Set type; + final Set type; @override bool activited = false; @@ -55,14 +66,22 @@ class LoginAccount implements Account { }; @override - late String csrf = + late final String csrf = cookieJar.domainCookies['bilibili.com']!['/']!['bili_jct']!.cookie.value; - @override - Future delete() => _box.delete(_midStr); + bool _hasDelete = false; @override - Future onChange() => _box.put(_midStr, this); + Future delete() { + assert(_hasDelete = true); + return _box.delete(_midStr); + } + + @override + Future onChange() { + assert(!_hasDelete); + return _box.put(_midStr, this); + } @override Map? toJson() => { @@ -88,16 +107,12 @@ class LoginAccount implements Account { cookieJar.setBuvid3(); } - LoginAccount.fromJson(Map json) { - cookieJar = BiliCookieJar.fromJson(json['cookies'])..setBuvid3(); - accessKey = json['accessKey']; - refresh = json['refresh']; - type = - (json['type'] as Iterable?) - ?.map((i) => AccountType.values[i]) - .toSet() ?? - {}; - } + factory LoginAccount.fromJson(Map json) => LoginAccount( + BiliCookieJar.fromJson(json['cookies']), + json['accessKey'], + json['refresh'], + (json['type'] as Iterable?)?.map((i) => AccountType.values[i]).toSet(), + ); @override int get hashCode => mid.hashCode; @@ -107,21 +122,21 @@ class LoginAccount implements Account { identical(this, other) || (other is LoginAccount && mid == other.mid); } -class AnonymousAccount implements Account { +class AnonymousAccount extends Account { @override final bool isLogin = false; @override - late final DefaultCookieJar cookieJar; + final DefaultCookieJar cookieJar = DefaultCookieJar()..setBuvid3(); @override - String? accessKey; + final String? accessKey = null; @override - String? refresh; + final String? refresh = null; @override - Set type = {}; + final Set type = {}; @override final int mid = 0; @override - String csrf = ''; + final String csrf = ''; @override final Map headers = Constants.baseHeaders; @@ -134,17 +149,9 @@ class AnonymousAccount implements Account { cookieJar.setBuvid3(); } - @override - Future onChange() async {} - - @override - Map? toJson() => null; - static final _instance = AnonymousAccount._(); - AnonymousAccount._() { - cookieJar = DefaultCookieJar(ignoreExpires: true)..setBuvid3(); - } + AnonymousAccount._(); factory AnonymousAccount() => _instance; @@ -179,8 +186,9 @@ extension BiliCookieJar on DefaultCookieJar { []; void setBuvid3() { - domainCookies['bilibili.com'] ??= {'/': {}}; - domainCookies['bilibili.com']!['/']!['buvid3'] ??= SerializableCookie( + (domainCookies['bilibili.com'] ??= { + '/': {}, + })['/']!['buvid3'] ??= SerializableCookie( Cookie('buvid3', IdUtils.genBuvid3())..setBiliDomain(), ); } @@ -208,52 +216,6 @@ extension BiliCookieJar on DefaultCookieJar { }; } -class NoAccount implements Account { - @override - String? accessKey; - - @override - bool activited = false; - - @override - DefaultCookieJar cookieJar = DefaultCookieJar(); - - @override - String csrf = ''; - - @override - String? refresh; - - @override - Set type = const {}; - - @override - Future delete() { - return Future.value(); - } - - @override - final Map headers = const {}; - - @override - bool isLogin = false; - - @override - int mid = 0; - - @override - Future onChange() { - return Future.value(); - } - - @override - Map? toJson() { - return null; - } - - NoAccount._(); - - static final _instance = NoAccount._(); - - factory NoAccount() => _instance; +final class NoAccount extends Account { + const NoAccount(); } diff --git a/lib/utils/accounts/account_manager/account_mgr.dart b/lib/utils/accounts/account_manager/account_mgr.dart index 84d02cb6e..14d4dc329 100644 --- a/lib/utils/accounts/account_manager/account_mgr.dart +++ b/lib/utils/accounts/account_manager/account_mgr.dart @@ -51,6 +51,7 @@ class AccountManager extends Interceptor { Api.getSeasonDetailApi, Api.liveRoomDmToken, Api.liveRoomDmPrefetch, + Api.superChatMsg, Api.searchByType, Api.dynSearch, Api.searchArchive, @@ -68,6 +69,18 @@ class AccountManager extends Interceptor { Api.liveList, Api.searchTrending, Api.searchRecommend, + Api.getRankApi, + Api.pgcRank, + Api.pgcSeasonRank, + Api.pgcIndexResult, + Api.popularSeriesOne, + Api.popularSeriesList, + Api.popularPrecious, + Api.liveAreaList, + Api.liveFeedIndex, + Api.liveSecondList, + Api.liveRoomAreaList, + Api.liveSearch, }, // progress AccountType.video: { @@ -118,7 +131,7 @@ class AccountManager extends Interceptor { late final Account account = options.extra['account'] ?? _findAccount(path); - if (_skipCookie(path) || account is NoAccount) return handler.next(options); + if (account is NoAccount || _skipCookie(path)) return handler.next(options); if (!account.isLogin && path == Api.heartBeat) { return handler.reject( diff --git a/lib/utils/update.dart b/lib/utils/update.dart index b77268f2d..86d330f71 100644 --- a/lib/utils/update.dart +++ b/lib/utils/update.dart @@ -25,7 +25,7 @@ abstract class Update { Api.latestApp, options: Options( headers: {'user-agent': UaType.mob.ua}, - extra: {'account': NoAccount()}, + extra: {'account': const NoAccount()}, ), ); if (res.data is Map || res.data.isEmpty) {