opt history account

Closes #948

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-08-06 21:22:59 +08:00
parent eb9f3cd21c
commit f663301eae
8 changed files with 77 additions and 32 deletions

View File

@@ -13,6 +13,7 @@ import 'package:PiliPlus/models_new/space_setting/data.dart';
import 'package:PiliPlus/models_new/sub/sub/data.dart'; import 'package:PiliPlus/models_new/sub/sub/data.dart';
import 'package:PiliPlus/models_new/video/video_tag/data.dart'; import 'package:PiliPlus/models_new/video/video_tag/data.dart';
import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/accounts.dart';
import 'package:PiliPlus/utils/accounts/account.dart';
import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/wbi_sign.dart'; import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
@@ -80,6 +81,7 @@ class UserHttp {
required String type, required String type,
int? max, int? max,
int? viewAt, int? viewAt,
Account? account,
}) async { }) async {
var res = await Request().get( var res = await Request().get(
Api.historyList, Api.historyList,
@@ -89,6 +91,7 @@ class UserHttp {
'max': max ?? 0, 'max': max ?? 0,
'view_at': viewAt ?? 0, 'view_at': viewAt ?? 0,
}, },
options: Options(extra: {'account': account ?? Accounts.history}),
); );
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
return Success(HistoryData.fromJson(res.data['data'])); return Success(HistoryData.fromJson(res.data['data']));
@@ -98,22 +101,27 @@ class UserHttp {
} }
// 暂停观看历史 // 暂停观看历史
static Future pauseHistory(bool switchStatus) async { static Future pauseHistory(bool switchStatus, {Account? account}) async {
// 暂停switchStatus传true 否则false // 暂停switchStatus传true 否则false
account ??= Accounts.history;
var res = await Request().post( var res = await Request().post(
Api.pauseHistory, Api.pauseHistory,
queryParameters: { queryParameters: {
'switch': switchStatus, 'switch': switchStatus,
'jsonp': 'jsonp', 'jsonp': 'jsonp',
'csrf': Accounts.heartbeat.csrf, 'csrf': account.csrf,
}, },
options: Options(extra: {'account': account}),
); );
return res; return res;
} }
// 观看历史暂停状态 // 观看历史暂停状态
static Future historyStatus() async { static Future historyStatus({Account? account}) async {
var res = await Request().get(Api.historyStatus); var res = await Request().get(
Api.historyStatus,
options: Options(extra: {'account': account ?? Accounts.history}),
);
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']}; return {'status': true, 'data': res.data['data']};
} else { } else {
@@ -122,13 +130,15 @@ class UserHttp {
} }
// 清空历史记录 // 清空历史记录
static Future clearHistory() async { static Future clearHistory({Account? account}) async {
account ??= Accounts.history;
var res = await Request().post( var res = await Request().post(
Api.clearHistory, Api.clearHistory,
queryParameters: { queryParameters: {
'jsonp': 'jsonp', 'jsonp': 'jsonp',
'csrf': Accounts.heartbeat.csrf, 'csrf': account.csrf,
}, },
options: Options(extra: {'account': account}),
); );
return res; return res;
} }
@@ -204,15 +214,17 @@ class UserHttp {
} }
// 删除历史记录 // 删除历史记录
static Future delHistory(String kid) async { static Future delHistory(String kid, {Account? account}) async {
account ??= Accounts.history;
var res = await Request().post( var res = await Request().post(
Api.delHistory, Api.delHistory,
data: { data: {
'kid': kid, 'kid': kid,
'jsonp': 'jsonp', 'jsonp': 'jsonp',
'csrf': Accounts.heartbeat.csrf, 'csrf': account.csrf,
}, },
options: Options( options: Options(
extra: {'account': account},
contentType: Headers.formUrlEncodedContentType, contentType: Headers.formUrlEncodedContentType,
), ),
); );
@@ -241,6 +253,7 @@ class UserHttp {
static Future<LoadingState<HistoryData>> searchHistory({ static Future<LoadingState<HistoryData>> searchHistory({
required int pn, required int pn,
required String keyword, required String keyword,
Account? account,
}) async { }) async {
var res = await Request().get( var res = await Request().get(
Api.searchHistory, Api.searchHistory,
@@ -249,6 +262,7 @@ class UserHttp {
'keyword': keyword, 'keyword': keyword,
'business': 'all', 'business': 'all',
}, },
options: Options(extra: {'account': account ?? Accounts.history}),
); );
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
return Success(HistoryData.fromJson(res.data['data'])); return Success(HistoryData.fromJson(res.data['data']));

View File

@@ -23,6 +23,7 @@ import 'package:PiliPlus/models_new/video/video_note_list/data.dart';
import 'package:PiliPlus/models_new/video/video_play_info/data.dart'; import 'package:PiliPlus/models_new/video/video_play_info/data.dart';
import 'package:PiliPlus/models_new/video/video_relation/data.dart'; import 'package:PiliPlus/models_new/video/video_relation/data.dart';
import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/accounts.dart';
import 'package:PiliPlus/utils/accounts/account.dart';
import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/id_utils.dart';
@@ -674,15 +675,18 @@ class VideoHttp {
required int desc, required int desc,
required dynamic oid, required dynamic oid,
required dynamic upperMid, required dynamic upperMid,
Account? account,
}) async { }) async {
account ??= Accounts.history;
await Request().post( await Request().post(
Api.mediaListHistory, Api.mediaListHistory,
queryParameters: { queryParameters: {
'desc': desc, 'desc': desc,
'oid': oid, 'oid': oid,
'upper_mid': upperMid, 'upper_mid': upperMid,
'csrf': Accounts.heartbeat.csrf, 'csrf': account.csrf,
}, },
options: Options(extra: {'account': account}),
); );
} }

View File

@@ -1,4 +1,5 @@
import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/utils/accounts.dart';
import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_key.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -11,6 +12,8 @@ class HistoryBaseController extends GetxController {
RxBool enableMultiSelect = false.obs; RxBool enableMultiSelect = false.obs;
RxInt checkedCount = 0.obs; RxInt checkedCount = 0.obs;
final account = Accounts.history;
// 清空观看历史 // 清空观看历史
void onClearHistory(BuildContext context, VoidCallback onSuccess) { void onClearHistory(BuildContext context, VoidCallback onSuccess) {
showDialog( showDialog(
@@ -31,7 +34,7 @@ class HistoryBaseController extends GetxController {
onPressed: () async { onPressed: () async {
Get.back(); Get.back();
SmartDialog.showLoading(msg: '请求中'); SmartDialog.showLoading(msg: '请求中');
var res = await UserHttp.clearHistory(); var res = await UserHttp.clearHistory(account: account);
SmartDialog.dismiss(); SmartDialog.dismiss();
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
SmartDialog.showToast('清空观看历史'); SmartDialog.showToast('清空观看历史');
@@ -66,7 +69,10 @@ class HistoryBaseController extends GetxController {
TextButton( TextButton(
onPressed: () async { onPressed: () async {
SmartDialog.showLoading(msg: '请求中'); SmartDialog.showLoading(msg: '请求中');
var res = await UserHttp.pauseHistory(pauseStatus); var res = await UserHttp.pauseHistory(
pauseStatus,
account: account,
);
SmartDialog.dismiss(); SmartDialog.dismiss();
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
SmartDialog.showToast(pauseStatus ? '暂停观看历史' : '恢复观看历史'); SmartDialog.showToast(pauseStatus ? '暂停观看历史' : '恢复观看历史');

View File

@@ -6,6 +6,7 @@ import 'package:PiliPlus/models_new/history/list.dart';
import 'package:PiliPlus/models_new/history/tab.dart'; import 'package:PiliPlus/models_new/history/tab.dart';
import 'package:PiliPlus/pages/common/multi_select/multi_select_controller.dart'; import 'package:PiliPlus/pages/common/multi_select/multi_select_controller.dart';
import 'package:PiliPlus/pages/history/base_controller.dart'; import 'package:PiliPlus/pages/history/base_controller.dart';
import 'package:PiliPlus/utils/accounts/account.dart';
import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_key.dart';
@@ -20,6 +21,8 @@ class HistoryController
late final baseCtr = Get.put(HistoryBaseController()); late final baseCtr = Get.put(HistoryBaseController());
Account get account => baseCtr.account;
final String? type; final String? type;
TabController? tabController; TabController? tabController;
late RxList<HistoryTab> tabs = <HistoryTab>[].obs; late RxList<HistoryTab> tabs = <HistoryTab>[].obs;
@@ -74,7 +77,7 @@ class HistoryController
// 观看历史暂停状态 // 观看历史暂停状态
Future<void> historyStatus() async { Future<void> historyStatus() async {
var res = await UserHttp.historyStatus(); var res = await UserHttp.historyStatus(account: account);
if (res['status']) { if (res['status']) {
baseCtr.pauseStatus.value = res['data']; baseCtr.pauseStatus.value = res['data'];
GStorage.localCache.put(LocalCacheKey.historyPause, res['data']); GStorage.localCache.put(LocalCacheKey.historyPause, res['data']);
@@ -90,15 +93,13 @@ class HistoryController
// 删除已看历史记录 // 删除已看历史记录
void onDelViewedHistory() { void onDelViewedHistory() {
if (loadingState.value.isSuccess) { final viewedList = loadingState.value.dataOrNull
final viewedList = loadingState.value.data! ?.where((e) => e.progress == -1)
.where((e) => e.progress == -1) .toSet();
.toSet(); if (viewedList != null && viewedList.isNotEmpty) {
if (viewedList.isNotEmpty) { _onDelete(viewedList);
_onDelete(viewedList); } else {
} else { SmartDialog.showToast('无已看记录');
SmartDialog.showToast('无已看记录');
}
} }
} }
@@ -108,6 +109,7 @@ class HistoryController
removeList removeList
.map((item) => '${item.history.business}_${item.kid}') .map((item) => '${item.history.business}_${item.kid}')
.join(','), .join(','),
account: account,
); );
if (response['status']) { if (response['status']) {
afterDelete(removeList); afterDelete(removeList);
@@ -128,8 +130,12 @@ class HistoryController
} }
@override @override
Future<LoadingState<HistoryData>> customGetData() => Future<LoadingState<HistoryData>> customGetData() => UserHttp.historyList(
UserHttp.historyList(type: type ?? 'all', max: max, viewAt: viewAt); type: type ?? 'all',
max: max,
viewAt: viewAt,
account: account,
);
@override @override
void onClose() { void onClose() {

View File

@@ -5,6 +5,7 @@ import 'package:PiliPlus/models_new/history/data.dart';
import 'package:PiliPlus/models_new/history/list.dart'; import 'package:PiliPlus/models_new/history/list.dart';
import 'package:PiliPlus/pages/common/multi_select/base.dart'; import 'package:PiliPlus/pages/common/multi_select/base.dart';
import 'package:PiliPlus/pages/common/search/common_search_controller.dart'; import 'package:PiliPlus/pages/common/search/common_search_controller.dart';
import 'package:PiliPlus/utils/accounts.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -15,6 +16,7 @@ class HistorySearchController
Future<LoadingState<HistoryData>> customGetData() => UserHttp.searchHistory( Future<LoadingState<HistoryData>> customGetData() => UserHttp.searchHistory(
pn: page, pn: page,
keyword: editController.value.text, keyword: editController.value.text,
account: account,
); );
@override @override
@@ -22,8 +24,13 @@ class HistorySearchController
return response.list; return response.list;
} }
final account = Accounts.history;
Future<void> onDelHistory(int index, kid, String business) async { Future<void> onDelHistory(int index, kid, String business) async {
var res = await UserHttp.delHistory('${business}_$kid'); var res = await UserHttp.delHistory(
'${business}_$kid',
account: account,
);
if (res['status']) { if (res['status']) {
loadingState loadingState
..value.data!.removeAt(index) ..value.data!.removeAt(index)
@@ -45,6 +52,7 @@ class HistorySearchController
removeList removeList
.map((item) => '${item.history.business!}_${item.kid!}') .map((item) => '${item.history.business!}_${item.kid!}')
.join(','), .join(','),
account: account,
); );
if (response['status']) { if (response['status']) {
afterDelete(removeList); afterDelete(removeList);

View File

@@ -16,6 +16,13 @@ class Accounts {
static final Map<AccountType, Account> accountMode = {}; static final Map<AccountType, Account> accountMode = {};
static Account get main => accountMode[AccountType.main]!; static Account get main => accountMode[AccountType.main]!;
static Account get heartbeat => accountMode[AccountType.heartbeat]!; static Account get heartbeat => accountMode[AccountType.heartbeat]!;
static Account get history {
final heartbeat = Accounts.heartbeat;
if (heartbeat is AnonymousAccount) {
return Accounts.main;
}
return heartbeat;
}
// static set main(Account account) => set(AccountType.main, account); // static set main(Account account) => set(AccountType.main, account);
static Future<void> init() async { static Future<void> init() async {

View File

@@ -29,13 +29,13 @@ class AccountManager extends Interceptor {
Api.heartBeat, Api.heartBeat,
Api.historyReport, Api.historyReport,
Api.roomEntryAction, Api.roomEntryAction,
Api.historyList, // Api.historyList,
Api.pauseHistory, // Api.pauseHistory,
Api.clearHistory, // Api.clearHistory,
Api.delHistory, // Api.delHistory,
Api.searchHistory, // Api.searchHistory,
Api.historyStatus, // Api.historyStatus,
Api.mediaListHistory, // Api.mediaListHistory,
// progress // progress
Api.pgcInfo, Api.pgcInfo,
Api.pugvInfo, Api.pugvInfo,

View File

@@ -5,7 +5,7 @@ import 'package:PiliPlus/utils/storage_key.dart';
class Data { class Data {
static Future<void> init() async { static Future<void> init() async {
if (!Accounts.main.isLogin) { if (!Accounts.history.isLogin) {
return; return;
} }
var res = await UserHttp.historyStatus(); var res = await UserHttp.historyStatus();