mixDownloadOperation.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // mixDownloadOperation.h
  3. // 双子星云手机
  4. //
  5. // Created by xd h on 2024/6/27.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import "mixDownloadCacheManager.h"
  9. extern NSString * _Nullable const mixDownloadCompleteNoti;
  10. typedef void(^mixReceiveResponseOperation)(NSString *filePath);
  11. typedef void(^mixReceivDataOperation)(NSInteger completeSize,NSInteger expectSize);
  12. typedef void(^mixCompleteOperation)(NSDictionary *respose,NSError *error);
  13. /** 下载状态*/
  14. typedef enum : NSUInteger {
  15. DownloadStateWaiting = 0, /** 下载等待中 */
  16. DownloadStateDoing, /** 下载中 */
  17. DownloadStateSuspended, /** 下载暂停 */
  18. DownloadStateCompleted, /** 下载完成 */
  19. DownloadStateFailed, /** 下载失败 */
  20. } MixDownloadStateType;
  21. NS_ASSUME_NONNULL_BEGIN
  22. @protocol mixDownloadOperationProtocol <NSObject>
  23. // 供queue管理方法
  24. // 处理响应值
  25. - (void)operateWithResponse:(NSURLResponse *)response;
  26. // 处理接收到的碎片
  27. - (void)operateWithReceivingData:(NSData *)data;
  28. // 处理完成回调
  29. - (void)operateWithComplete:(NSError *)error;
  30. /**
  31. 设置block回调
  32. @param didReceiveResponse 开始下载的回调
  33. @param didReceivData 接收到下载的回调
  34. @param didComplete 下载完成的回调
  35. */
  36. - (void)configCallBacksWithDidReceiveResponse:(mixReceiveResponseOperation)didReceiveResponse
  37. didReceivData:(mixReceivDataOperation)didReceivData
  38. didComplete:(mixCompleteOperation)didComplete;
  39. @end
  40. @interface mixDownloadOperation : NSObject <mixDownloadOperationProtocol>
  41. /** 绑定的标示及task的创建 */
  42. @property (readonly,nonatomic, copy)NSString *url;
  43. /** 下载任务 */
  44. @property (nonatomic,strong)NSURLSessionDataTask *dataTask;
  45. /** 文件句柄 可以记录文件的下载的位置 */
  46. @property (nonatomic,strong) NSFileHandle *handle;
  47. /** 下载的文件总大小 */
  48. @property (nonatomic,assign) int64_t totalSize;
  49. /** 当前下载了多少 */
  50. @property (nonatomic,assign) int64_t currentSize;
  51. /** 当前下载文件名称 */
  52. @property (nonatomic,copy) NSString *fileName;
  53. /** 当前下载文件沙盒全路径 */
  54. @property (nonatomic,copy) NSString *fullPath;
  55. /** 文件下载状态 */
  56. @property (nonatomic,assign) MixDownloadStateType downloadState;
  57. /** 下载完成-时间戳 */
  58. @property (nonatomic,assign) NSInteger timeStamp;
  59. /** 文件类型 */
  60. @property (nonatomic,assign) NSInteger fileType;
  61. /** 是否完成 */
  62. @property (nonatomic, assign) NSInteger isFinished;
  63. // 创建下载操作任务
  64. - (instancetype)initWith:(NSString *)url session:(NSURLSession *)session;
  65. - (NSDictionary *)downLoadInfoWithFinished:(BOOL)finished;
  66. @end
  67. NS_ASSUME_NONNULL_END