feat(library): 收藏与观看历史支持分页

This commit is contained in:
Zhou Weidong committed 2026-10-22 12:34:27 +08:00
1 parent 63d3b0f7ca
commit 235b50598a
24 files changed
+1015 -105

No files matched your search

+20 -7
View File
@@ -1,6 +1,7 @@
// Author: fruit.com.cn
import '../models/drama.dart';
import '../models/page_result.dart';
import 'api_client.dart';
/// 收藏接口:`/app/favorites*`(契约 §1.5)。需要登录态。
@@ -20,13 +21,25 @@ class LibraryApi {
return data == true;
}
Future<List<Drama>> favorites() async {
final data = await _client.get('/app/favorites');
if (data is! List) return const [];
return [
for (final item in data)
if (item is Map<String, dynamic>) Drama.fromCardJson(item),
];
Future<PageResult<Drama>> favorites({
int pageIndex = 1,
int pageSize = 20,
}) async {
final data = await _client.get(
'/app/favorites',
query: {'pageIndex': '$pageIndex', 'pageSize': '$pageSize'},
);
if (data is Map<String, dynamic>) {
return PageResult.fromJson(data, Drama.fromCardJson);
}
if (data is List) {
final list = data
.whereType<Map<String, dynamic>>()
.map(Drama.fromCardJson)
.toList(growable: false);
return PageResult(total: list.length, list: list);
}
return const PageResult();
}
Future<void> removeFavorite(String dramaId) async {
+18 -8
View File
@@ -1,5 +1,6 @@
// Author: fruit.com.cn
import '../models/page_result.dart';
import '../models/watch_progress.dart';
import 'api_client.dart';
@@ -39,17 +40,26 @@ class WatchApi {
return data is Map<String, dynamic> ? WatchProgress.fromJson(data) : null;
}
/// 最近观看(服务端按下标返回,已按更新时间倒序)。
Future<List<WatchProgress>> recent({int limit = 20}) async {
/// 最近观看分页(服务端已按更新时间倒序)。
Future<PageResult<WatchProgress>> recent({
int pageIndex = 1,
int pageSize = 20,
}) async {
final data = await _client.get(
'/app/watch/recent',
query: {'limit': '$limit'},
query: {'pageIndex': '$pageIndex', 'pageSize': '$pageSize'},
);
if (data is! List) return const [];
return [
for (final item in data)
if (item is Map<String, dynamic>) WatchProgress.fromJson(item),
];
if (data is Map<String, dynamic>) {
return PageResult.fromJson(data, WatchProgress.fromJson);
}
if (data is List) {
final list = data
.whereType<Map<String, dynamic>>()
.map(WatchProgress.fromJson)
.toList(growable: false);
return PageResult(total: list.length, list: list);
}
return const PageResult();
}
/// 删除某部剧的观看记录(记录页清单条用)。