JXPlaybackProgressManager.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. //
  2. // JXPlaybackProgressManager.h
  3. // AICity
  4. //
  5. // Feature: 003-ios-api-https
  6. // Task: T036 - iOS播放进度本地存储
  7. // Created on 2025-10-14.
  8. //
  9. #import <Foundation/Foundation.h>
  10. #import <CoreData/CoreData.h>
  11. @class JXPlaybackProgress;
  12. NS_ASSUME_NONNULL_BEGIN
  13. /**
  14. * 播放进度统计信息
  15. */
  16. @interface JXProgressStats : NSObject
  17. @property (nonatomic, assign) NSInteger totalCount; // 总播放进度数
  18. @property (nonatomic, assign) NSInteger completedCount; // 已完成数
  19. @property (nonatomic, assign) NSInteger unsyncedCount; // 未同步数
  20. @property (nonatomic, assign) NSInteger recentCount; // 最近7天播放数
  21. @end
  22. /**
  23. * 播放进度管理器
  24. *
  25. * 负责播放进度的本地存储、同步和管理
  26. * 使用CoreData实现数据持久化
  27. */
  28. @interface JXPlaybackProgressManager : NSObject
  29. /**
  30. * 单例实例
  31. */
  32. + (instancetype)sharedManager;
  33. /**
  34. * 初始化CoreData栈
  35. */
  36. - (void)setupCoreDataStack;
  37. /**
  38. * 保存播放进度
  39. * @param dramaId 剧ID
  40. * @param episodeId 剧集ID
  41. * @param position 播放位置(秒)
  42. * @param duration 总时长(秒)
  43. * @param isCompleted 是否已完成
  44. * @param completion 完成回调
  45. */
  46. - (void)saveProgressWithDramaId:(NSString *)dramaId
  47. episodeId:(NSString *)episodeId
  48. position:(NSInteger)position
  49. duration:(NSInteger)duration
  50. isCompleted:(BOOL)isCompleted
  51. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  52. /**
  53. * 保存播放进度(从模型对象)
  54. * @param progress 播放进度模型
  55. * @param completion 完成回调
  56. */
  57. - (void)saveProgress:(JXPlaybackProgress *)progress
  58. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  59. /**
  60. * 批量保存播放进度
  61. * @param progressList 播放进度列表
  62. * @param completion 完成回调
  63. */
  64. - (void)saveProgressBatch:(NSArray<JXPlaybackProgress *> *)progressList
  65. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  66. /**
  67. * 获取播放进度
  68. * @param episodeId 剧集ID
  69. * @param completion 完成回调
  70. */
  71. - (void)getProgressWithEpisodeId:(NSString *)episodeId
  72. completion:(void(^)(JXPlaybackProgress * _Nullable progress, NSError * _Nullable error))completion;
  73. /**
  74. * 获取剧的所有分集播放进度
  75. * @param dramaId 剧ID
  76. * @param completion 完成回调
  77. */
  78. - (void)getDramaProgressWithDramaId:(NSString *)dramaId
  79. completion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
  80. /**
  81. * 获取所有播放进度
  82. * @param completion 完成回调
  83. */
  84. - (void)getAllProgressWithCompletion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
  85. /**
  86. * 获取最近播放的剧集进度
  87. * @param limit 限制数量
  88. * @param completion 完成回调
  89. */
  90. - (void)getRecentProgressWithLimit:(NSInteger)limit
  91. completion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
  92. /**
  93. * 获取已完成的剧集
  94. * @param completion 完成回调
  95. */
  96. - (void)getCompletedProgressWithCompletion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
  97. /**
  98. * 获取未同步的播放进度
  99. * @param completion 完成回调
  100. */
  101. - (void)getUnsyncedProgressWithCompletion:(void(^)(NSArray<JXPlaybackProgress *> * _Nullable progressList, NSError * _Nullable error))completion;
  102. /**
  103. * 标记播放进度为已同步
  104. * @param episodeId 剧集ID
  105. * @param completion 完成回调
  106. */
  107. - (void)markAsSyncedWithEpisodeId:(NSString *)episodeId
  108. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  109. /**
  110. * 标记播放进度同步失败
  111. * @param episodeId 剧集ID
  112. * @param completion 完成回调
  113. */
  114. - (void)markSyncFailedWithEpisodeId:(NSString *)episodeId
  115. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  116. /**
  117. * 批量标记为已同步
  118. * @param episodeIds 剧集ID列表
  119. * @param completion 完成回调
  120. */
  121. - (void)markAsSyncedBatchWithEpisodeIds:(NSArray<NSString *> *)episodeIds
  122. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  123. /**
  124. * 删除播放进度
  125. * @param episodeId 剧集ID
  126. * @param completion 完成回调
  127. */
  128. - (void)deleteProgressWithEpisodeId:(NSString *)episodeId
  129. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  130. /**
  131. * 删除剧的所有播放进度
  132. * @param dramaId 剧ID
  133. * @param completion 完成回调
  134. */
  135. - (void)deleteDramaProgressWithDramaId:(NSString *)dramaId
  136. completion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  137. /**
  138. * 清理过期的播放进度(90天前)
  139. * @param completion 完成回调
  140. */
  141. - (void)cleanupExpiredProgressWithCompletion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  142. /**
  143. * 删除所有播放进度
  144. * @param completion 完成回调
  145. */
  146. - (void)deleteAllProgressWithCompletion:(nullable void(^)(BOOL success, NSError * _Nullable error))completion;
  147. /**
  148. * 获取播放进度统计信息
  149. * @param completion 完成回调
  150. */
  151. - (void)getProgressStatsWithCompletion:(void(^)(JXProgressStats * _Nullable stats, NSError * _Nullable error))completion;
  152. /**
  153. * 检查剧集是否有播放进度
  154. * @param episodeId 剧集ID
  155. * @param completion 完成回调
  156. */
  157. - (void)hasProgressWithEpisodeId:(NSString *)episodeId
  158. completion:(void(^)(BOOL hasProgress, NSError * _Nullable error))completion;
  159. /**
  160. * 获取播放进度百分比
  161. * @param episodeId 剧集ID
  162. * @param completion 完成回调
  163. */
  164. - (void)getProgressPercentageWithEpisodeId:(NSString *)episodeId
  165. completion:(void(^)(NSInteger percentage, NSError * _Nullable error))completion;
  166. /**
  167. * 检查剧集是否已完成
  168. * @param episodeId 剧集ID
  169. * @param completion 完成回调
  170. */
  171. - (void)isCompletedWithEpisodeId:(NSString *)episodeId
  172. completion:(void(^)(BOOL isCompleted, NSError * _Nullable error))completion;
  173. @end
  174. NS_ASSUME_NONNULL_END