| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- //
- // JXPlaybackProgressManager.h
- // AICity
- //
- // Feature: 003-ios-api-https
- // Task: T036 - iOS播放进度本地存储
- // Created on 2025-10-14.
- //
- #import <Foundation/Foundation.h>
- #import <CoreData/CoreData.h>
- @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<JXPlaybackProgress *> *)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<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
- /**
- * 获取所有播放进度
- * @param completion 完成回调
- */
- - (void)getAllProgressWithCompletion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
- /**
- * 获取最近播放的剧集进度
- * @param limit 限制数量
- * @param completion 完成回调
- */
- - (void)getRecentProgressWithLimit:(NSInteger)limit
- completion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
- /**
- * 获取已完成的剧集
- * @param completion 完成回调
- */
- - (void)getCompletedProgressWithCompletion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
- /**
- * 获取未同步的播放进度
- * @param completion 完成回调
- */
- - (void)getUnsyncedProgressWithCompletion:(void(^)(NSArray<JXPlaybackProgress *> * _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<NSString *> *)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
|