feat: 删除已观看历史记录 issues #81

This commit is contained in:
guozhigq
2023-09-11 17:36:05 +08:00
parent 0e39453558
commit ef38844798
5 changed files with 67 additions and 4 deletions

View File

@ -164,6 +164,9 @@ class Api {
// 清空历史记录 // 清空历史记录
static const String clearHistory = '/x/v2/history/clear'; static const String clearHistory = '/x/v2/history/clear';
// 删除某条历史记录
static const String delHistory = '/x/v2/history/delete';
// 热搜 // 热搜
static const String hotSearchList = static const String hotSearchList =
'https://s.search.bilibili.com/main/hotword'; 'https://s.search.bilibili.com/main/hotword';

View File

@ -231,4 +231,21 @@ class UserHttp {
return {'status': false, 'msg': res.data['message']}; return {'status': false, 'msg': res.data['message']};
} }
} }
// 删除历史记录
static Future delHistory(kid) async {
var res = await Request().post(
Api.delHistory,
queryParameters: {
'kid': 'archive_$kid',
'jsonp': 'jsonp',
'csrf': await Request.getCsrf(),
},
);
if (res.data['code'] == 0) {
return {'status': true, 'msg': '已删除'};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
} }

View File

@ -121,4 +121,24 @@ class HistoryController extends GetxController {
}, },
); );
} }
// 删除某条历史记录
Future delHistory(kid) async {
var res = await UserHttp.delHistory(kid);
if (res['status']) {
historyList.removeWhere((e) => e.kid == kid);
SmartDialog.showToast(res['msg']);
}
}
// 删除已看历史记录
Future onDelHistory() async {
List<HisListItem> result =
historyList.where((e) => e.progress == -1).toList();
for (HisListItem i in result) {
await UserHttp.delHistory(i.kid);
historyList.removeWhere((e) => e.kid == i.kid);
}
SmartDialog.showToast('操作完成');
}
} }

View File

@ -66,6 +66,9 @@ class _HistoryPageState extends State<HistoryPage> {
case 'clear': case 'clear':
_historyController.onClearHistory(); _historyController.onClearHistory();
break; break;
case 'del':
_historyController.onDelHistory();
break;
default: default:
} }
}, },
@ -82,6 +85,10 @@ class _HistoryPageState extends State<HistoryPage> {
value: 'clear', value: 'clear',
child: Text('清空观看记录'), child: Text('清空观看记录'),
), ),
const PopupMenuItem<String>(
value: 'del',
child: Text('删除已看记录'),
),
], ],
), ),
const SizedBox(width: 6), const SizedBox(width: 6),
@ -112,6 +119,7 @@ class _HistoryPageState extends State<HistoryPage> {
return HistoryItem( return HistoryItem(
videoItem: videoItem:
_historyController.historyList[index], _historyController.historyList[index],
ctr: _historyController,
); );
}, },
childCount: childCount:

View File

@ -11,12 +11,14 @@ import 'package:pilipala/models/bangumi/info.dart';
import 'package:pilipala/models/common/business_type.dart'; import 'package:pilipala/models/common/business_type.dart';
import 'package:pilipala/models/common/search_type.dart'; import 'package:pilipala/models/common/search_type.dart';
import 'package:pilipala/models/live/item.dart'; import 'package:pilipala/models/live/item.dart';
import 'package:pilipala/pages/history/index.dart';
import 'package:pilipala/utils/id_utils.dart'; import 'package:pilipala/utils/id_utils.dart';
import 'package:pilipala/utils/utils.dart'; import 'package:pilipala/utils/utils.dart';
class HistoryItem extends StatelessWidget { class HistoryItem extends StatelessWidget {
final dynamic videoItem; final dynamic videoItem;
const HistoryItem({super.key, required this.videoItem}); final HistoryController? ctr;
const HistoryItem({super.key, required this.videoItem, this.ctr});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -176,7 +178,7 @@ class HistoryItem extends StatelessWidget {
}, },
), ),
), ),
VideoContent(videoItem: videoItem) VideoContent(videoItem: videoItem, ctr: ctr)
], ],
), ),
); );
@ -191,7 +193,8 @@ class HistoryItem extends StatelessWidget {
class VideoContent extends StatelessWidget { class VideoContent extends StatelessWidget {
final dynamic videoItem; final dynamic videoItem;
const VideoContent({super.key, required this.videoItem}); final HistoryController? ctr;
const VideoContent({super.key, required this.videoItem, this.ctr});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -253,7 +256,7 @@ class VideoContent extends StatelessWidget {
height: 24, height: 24,
child: PopupMenuButton<String>( child: PopupMenuButton<String>(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
tooltip: '稍后再看', tooltip: '功能菜单',
icon: Icon( icon: Icon(
Icons.more_vert_outlined, Icons.more_vert_outlined,
color: Theme.of(context).colorScheme.outline, color: Theme.of(context).colorScheme.outline,
@ -280,6 +283,18 @@ class VideoContent extends StatelessWidget {
], ],
), ),
), ),
PopupMenuItem<String>(
onTap: () => ctr!.delHistory(videoItem.kid),
value: 'pause',
height: 35,
child: const Row(
children: [
Icon(Icons.close_outlined, size: 16),
SizedBox(width: 6),
Text('删除记录', style: TextStyle(fontSize: 13))
],
),
),
], ],
), ),
), ),