Skip to content
71 changes: 71 additions & 0 deletions lib/modules/roads/cached_road_list.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import 'package:kazumi/modules/roads/road_module.dart';

/// 播放列表缓存状态
enum RoadListLoadStatus {
pending, // 加载中
success, // 成功
error, // 失败
notStarted, // 未开始
}

/// 缓存的播放列表数据
class CachedRoadList {
final List<Road> roadList;
final RoadListLoadStatus status;
final DateTime timestamp;
final String? errorMessage;

CachedRoadList({
required this.roadList,
required this.status,
required this.timestamp,
this.errorMessage,
});

/// 创建成功状态的缓存
factory CachedRoadList.success(List<Road> roadList) {
return CachedRoadList(
roadList: roadList,
status: RoadListLoadStatus.success,
timestamp: DateTime.now(),
);
}

/// 创建加载中状态的缓存
factory CachedRoadList.pending() {
return CachedRoadList(
roadList: [],
status: RoadListLoadStatus.pending,
timestamp: DateTime.now(),
);
}

/// 创建失败状态的缓存
factory CachedRoadList.error(String errorMessage) {
return CachedRoadList(
roadList: [],
status: RoadListLoadStatus.error,
timestamp: DateTime.now(),
errorMessage: errorMessage,
);
}

bool get isSuccess => status == RoadListLoadStatus.success;
bool get isPending => status == RoadListLoadStatus.pending;
bool get isError => status == RoadListLoadStatus.error;
bool get isNotStarted => status == RoadListLoadStatus.notStarted;

/// 检查缓存是否已过期
///
/// [maxAge] 最大缓存时长,默认1小时
bool isExpired({Duration maxAge = const Duration(hours: 1)}) {
// pending 和 notStarted 状态不算过期
if (isPending || isNotStarted) {
return false;
}

final now = DateTime.now();
final age = now.difference(timestamp);
return age > maxAge;
}
}
5 changes: 4 additions & 1 deletion lib/modules/search/plugin_search_module.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ class SearchItem {
});

factory SearchItem.fromJson(Map<String, dynamic> json) {
return SearchItem(name: json['name'], src: json['src']);
return SearchItem(
name: json['name'],
src: json['src'],
);
}
}

Expand Down
2 changes: 2 additions & 0 deletions lib/pages/index_module.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import 'package:kazumi/repositories/collect_repository.dart';
import 'package:kazumi/repositories/search_history_repository.dart';
import 'package:kazumi/repositories/collect_crud_repository.dart';
import 'package:kazumi/repositories/history_repository.dart';
import 'package:kazumi/repositories/video_source_repository.dart';

class IndexModule extends Module {
@override
Expand All @@ -31,6 +32,7 @@ class IndexModule extends Module {
i.addSingleton<ISearchHistoryRepository>(SearchHistoryRepository.new);
i.addSingleton<ICollectCrudRepository>(CollectCrudRepository.new);
i.addSingleton<IHistoryRepository>(HistoryRepository.new);
i.addSingleton<IVideoSourceRepository>(VideoSourceRepository.new);

// Controller层
i.addSingleton(PopularController.new);
Expand Down
Loading
Loading