// // JXPlaybackProgressManager.h // AICity // // Feature: 003-ios-api-https // Task: T036 - iOS播放进度本地存储 // Created on 2025-10-14. // #import #import @class JXPlaybackProgress; NS_ASSUME_NONNULL_BEGIN /** * 播放进度统计信息 */ @interface JXProgressStats : NSObject @property (nonatomic, assign) NSInteger totalCount; // 总播放进度数 @property (nonatomic, assign) NSInteger completedCount; // 已完成数 @property (nonatomic, assign) NSInteger unsyncedCount; // 未同步数 @property (nonatomic, assign) NSInteger recentCount; // 最近7天播放数 @end /** * 播放进度管理器 * * 负责播放进度的本地存储、同步和管理 * 使用CoreData实现数据持久化 */ @interface JXPlaybackProgressManager : NSObject /** * 单例实例 */ + (instancetype)sharedManager; /** * 初始化CoreData栈 */ - (void)setupCoreDataStack; /** * 保存播放进度 * @param dramaId 剧ID * @param episodeId 剧集ID * @param position 播放位置(秒) * @param duration 总时长(秒) * @param isCompleted 是否已完成 * @param completion 完成回调 */ - (void)saveProgressWithDramaId:(NSString *)dramaId episodeId:(NSString *)episodeId position:(NSInteger)position duration:(NSInteger)duration isCompleted:(BOOL)isCompleted completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 保存播放进度(从模型对象) * @param progress 播放进度模型 * @param completion 完成回调 */ - (void)saveProgress:(JXPlaybackProgress *)progress completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 批量保存播放进度 * @param progressList 播放进度列表 * @param completion 完成回调 */ - (void)saveProgressBatch:(NSArray *)progressList completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 获取播放进度 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)getProgressWithEpisodeId:(NSString *)episodeId completion:(void(^)(JXPlaybackProgress * _Nullable progress, NSError * _Nullable error))completion; /** * 获取剧的所有分集播放进度 * @param dramaId 剧ID * @param completion 完成回调 */ - (void)getDramaProgressWithDramaId:(NSString *)dramaId completion:(void(^)(NSArray * _Nullable progressList, NSError * _Nullable error))completion; /** * 获取所有播放进度 * @param completion 完成回调 */ - (void)getAllProgressWithCompletion:(void(^)(NSArray * _Nullable progressList, NSError * _Nullable error))completion; /** * 获取最近播放的剧集进度 * @param limit 限制数量 * @param completion 完成回调 */ - (void)getRecentProgressWithLimit:(NSInteger)limit completion:(void(^)(NSArray * _Nullable progressList, NSError * _Nullable error))completion; /** * 获取已完成的剧集 * @param completion 完成回调 */ - (void)getCompletedProgressWithCompletion:(void(^)(NSArray * _Nullable progressList, NSError * _Nullable error))completion; /** * 获取未同步的播放进度 * @param completion 完成回调 */ - (void)getUnsyncedProgressWithCompletion:(void(^)(NSArray * _Nullable progressList, NSError * _Nullable error))completion; /** * 标记播放进度为已同步 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)markAsSyncedWithEpisodeId:(NSString *)episodeId completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 标记播放进度同步失败 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)markSyncFailedWithEpisodeId:(NSString *)episodeId completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 批量标记为已同步 * @param episodeIds 剧集ID列表 * @param completion 完成回调 */ - (void)markAsSyncedBatchWithEpisodeIds:(NSArray *)episodeIds completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 删除播放进度 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)deleteProgressWithEpisodeId:(NSString *)episodeId completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 删除剧的所有播放进度 * @param dramaId 剧ID * @param completion 完成回调 */ - (void)deleteDramaProgressWithDramaId:(NSString *)dramaId completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 清理过期的播放进度(90天前) * @param completion 完成回调 */ - (void)cleanupExpiredProgressWithCompletion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 删除所有播放进度 * @param completion 完成回调 */ - (void)deleteAllProgressWithCompletion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion; /** * 获取播放进度统计信息 * @param completion 完成回调 */ - (void)getProgressStatsWithCompletion:(void(^)(JXProgressStats * _Nullable stats, NSError * _Nullable error))completion; /** * 检查剧集是否有播放进度 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)hasProgressWithEpisodeId:(NSString *)episodeId completion:(void(^)(BOOL hasProgress, NSError * _Nullable error))completion; /** * 获取播放进度百分比 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)getProgressPercentageWithEpisodeId:(NSString *)episodeId completion:(void(^)(NSInteger percentage, NSError * _Nullable error))completion; /** * 检查剧集是否已完成 * @param episodeId 剧集ID * @param completion 完成回调 */ - (void)isCompletedWithEpisodeId:(NSString *)episodeId completion:(void(^)(BOOL isCompleted, NSError * _Nullable error))completion; @end NS_ASSUME_NONNULL_END