Skip to content

A useful file downloader in iOS development, written in objective-C & Swift

Notifications You must be signed in to change notification settings

Luoyuanfeng/LYFDownloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

20 Commits

Repository files navigation

#LYFDownloader v1.4


  • v1.4 canh tân nội dung
  1. Tu phục liễu do vu_config.discretionary = YES;Tạo thành đích bộ phân thiết bị vô pháp khai thủy hạ tái nhậm vụ đích bug.
  2. Kiến nghị sử dụng thời đả khai Capabilities -> Backgrond Mode -> background fetch

  • v1.3 canh tân nội dung

1. Tăng gia liễu phương pháp dĩ phán đoạn hạ tái khí đương tiền thị phủ bao hàm mỗ cá nhậm vụ:

- (BOOL)containsTask:(NSString *)customKey;

  • v1.2 canh tân nội dung

1. Trực tiếp hoạch thủ đương tiền chính tại hạ tái đích nhậm vụ.

Kỳ lệ:

[LYFDownloadManager sharedInstance].downloadingTaskModel;

2. Ưu hóa thật hiện.


  • v1.1 canh tân nội dung
  1. Chi trì dụng hộ thối xuất đăng lục hậu đích tự động đình chỉ hòa tái thứ đăng lục hậu đích khôi phục hạ tái.
  2. Hạ tái thất bại thời đích thông tri ( thường thí khôi phục hạ tái thất bại siêu quá 3 thứ thời phao xuất thông tri ).
  3. Sang kiến hạ tái nhậm vụ bất nhu yếu tái truyện văn kiện danh tham sổ.
  4. customKey tất tu vi duy nhất id, dĩ bảo chứng hạ tái nhậm vụ đích duy nhất tính.

  • Thời tự đồ

Hắc sắc vi hạ tái lưu trình, lam sắc vi hoạch thủ nhậm vụ tín tức lưu trình.

时序图


  • Thật hiện
  1. Đan độc, phê lượng thao tác hạ tái nhậm vụ hòa hoạch thủ nhậm vụ sổ cư quân thông quá đan lệ LYFDownloadManager thật hiện.

  2. Điều dụng thiêm gia hạ tái nhậm vụ phương pháp thời, LYFDownloadManager phụ trách sang kiến nhất cá NSURLSession đích đại lý, tức nhất cá LYFDownloadInstance đối tượng, tại cai đối tượng trung thật hiện liễu NSURLSession đích chính tại hạ tái, hạ tái hoàn thành, xuất hiện thác ngộ cộng 3 cá đại lý phương pháp. Tại đại lý phương pháp đích thật hiện trung hoàn thành liễu hạ tái tiến độ, hạ tái tốc độ đích kế toán cập hạ tái hoàn thành, hạ tái thất bại thời đích hồi điều.

  3. Tại ngoại bộ nhu yếu hoạch thủ đương tiền đích hạ tái nhậm vụ tín tức thời, LYFDownloadManager hội thủ xuất sở nhu đích hạ tái nhậm vụ ( tức LYFDownloadInstance đối tượng ), căn cư kỳ trung đích sổ cư sang kiến LYFDownloadTaskModel đối tượng tịnh hướng ngoại đề cung, bảo chứng liễu tại hạ tái quá trình trung hạ tái nhậm vụ đích sổ cư bất hội bị ý ngoại tu cải, ngoại bộ khả dĩ sử dụng LYFDownloadTaskModel đối tượng trung đích sổ cư xoát tân giới diện hoặc canh tân sổ cư khố.

  4. Quan vu hậu đài hạ tái: Hậu đài hạ tái thông quá NSURLSessionConfiguration đích +backgroundSessionConfigurationWithIdentifier: Phương pháp thật hiện, cai phương pháp sử -sessionWithConfiguration:delegate:delegateQueue: Phương pháp sang kiến xuất đích NSURLSession khả dĩ bị thác quản cấp hệ thống tịnh tại hậu đài chấp hành. Đương chấp hành hoàn thành hậu tắc hội hoán khởi ứng dụng tiến hành hồi điều, vi ứng dụng lưu xuất nhất đoạn thời gian tiến hành hạ tái hoàn thành hậu đích thao tác ( như thiêm gia hạ nhất cá hạ tái nhậm vụ đẳng ).

  5. Quan vu đoạn điểm tục truyện: Đương ứng dụng xử vu tiền đài thời, hạ tái nhậm vụ đích tạm đình hòa khôi phục thông quá trực tiếp điều dụng NSURLSessionDoanloadTask đích -suspend hòa -resume phương pháp thật hiện. Đương ứng dụng tại hạ tái nhậm vụ chấp hành quá trình trung bị thối xuất thời, hệ thống hội tự động bảo tồn hữu quan đương tiền hạ tái nhậm vụ đích khôi phục sổ cư, đương ứng dụng bị khải động, thông quá đồng nhất cá identifier tái thứ sang kiến cai hạ tái nhậm vụ thời, hệ thống hội trảo đáo thượng thứ lưu hạ đích khôi phục sổ cư tịnh kế tục hạ tái.


### sử dụng:

  • Phối trí AppDelegate

1.#import "LYFDownloadManager.h"

2. Tại- (BOOL)application:didFinishLaunchingWithOptions:Trung điều dụngconfigWithDataRefreshInterval:taskStatusChangeHandler:

Kỳ lệ:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// khai khải hạ tái khí tịnh thiết định sổ cư xoát tân đích thời gian gian cách
[[LYFDownloadManager sharedInstance] configWithDataRefreshInterval:1.f taskStatusChangeHandler:^(NSArray<LYFDownloadTaskModel *> *changedTasksArray) {
// mỗi thứ hữu hạ tái nhậm vụ trạng thái biến hóa thời chấp hành cai hồi điều, kiến nghị sử dụng LYFDownloadTaskModel trung đích sổ cư canh tân sổ cư khố.
}];
return YES;
}

3. Thật hiện-application:handleEventsForBackgroundURLSession:completionHandler: Tịnh tại phương pháp trung điều dụng-taskDidFinishInBackground:completionHandler:Thật hiện hậu đài hạ tái hoàn thành thời đích hồi điều.

Kỳ lệ:

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(nonnull NSString *)identifier completionHandler:(nonnull void (^)())completionHandler {
[[LYFDownloadManager sharedInstance] taskDidFinishInBackground:identifier completionHandler:completionHandler];
}
  • Giới diện xoát tân

1. Sử dụngLYFRefreshDownloadInfoNotificationHoặc-(void)getAllDownloadTasksInfo:Hoạch thủ hạ tái nhậm vụ sổ tổ ( căn cư hạ tái nhậm vụ sang kiến thời gian bài tự ).

2. Sử dụngLYFDownloadTaskModelCanh tân giới diện.

### tiếp khẩu

  • LYFDownloadManager.h
//
// Created by la nguyên phong on 16/9/6.
// Copyright © 2016 niên la nguyên phong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "LYFDownloadTaskModel.h"

FOUNDATION_EXPORT NSString * const LYFRefreshDownloadInfoNotification;
FOUNDATION_EXPORT NSString * const LYFDownloadFailedNotification;

typedef NS_ENUM(int, LYFDownloaderRootFolder) {
LYFDownloaderRootFolderCache = 0,
LYFDownloaderRootFolderDocuments = 1
};
typedef NS_ENUM(int, LYFDownloadUserOperate) {
LYFDownloadUserOperateSaveOrUpdate = 1,
LYFDownloadUserOperateDelete,
LYFDownloadUserOperateDeleteAll
};
typedef void(^LYFTaskStatusChangedCallbackBlock)(NSArray<LYFDownloadTaskModel *>* changedArray, LYFDownloadUserOperate userOperate);

@interface LYFDownloadManager: NSObject

@property (nonatomic, assign) LYFDownloaderRootFolder rootFolder; // hạ tái đích căn mục lục ( cache hoặc documnets, mặc nhận cache )

@property (nonatomic, strong, readonly) LYFDownloadTaskModel *downloadingTaskModel; // đương tiền hạ tái nhậm vụ tín tức
@property (nonatomic, assign, readonly) int allTasksCount; // hạ tái nhậm vụ tổng sổ

#pragma mark - singleton
+ (instancetype)sharedInstance;

#pragma mark - phối trí phương pháp
/**
* thiết trí sổ cư xoát tân đích thời gian gian cách
* taskStatusChangeHandler thị tại hữu hạ tái nhậm vụ trạng thái phát sinh cải biến thời đích hồi điều, kiến nghị tại thử hồi điều trung thao tác sổ cư lộ khố
*/
- (void)configWithDataRefreshInterval:(NSTimeInterval)timeInterval taskStatusChangeHandler:(LYFTaskStatusChangedCallbackBlock)change;
/** -application:handleEventsForBackgroundURLSession:completionHandler: Trung điều dụng, hạ tái nhậm vụ tại hậu đài hoàn thành thời chấp hành */
- (void)taskDidFinishInBackground:(NSString *)customKey completionHandler:(void(^)())completion;

#pragma mark - hạ tái động tác
/** hoạch thủ sở hữu hạ tái nhậm vụ */
- (void)getAllDownloadTasksInfo:(void(^)(NSArray <LYFDownloadTaskModel *>* modelArray))completion;
/** thị phủ dĩ bao hàm mỗ cá hạ tái nhậm vụ */
- (BOOL)containsTask:(NSString *)customKey;

/****
* sang kiến hạ tái nhậm vụ
* customKey: Duy nhất tiêu thức, sử dụng customKey xác định duy nhất đích hạ tái nhậm vụ, tất tu
* url: Hạ tái địa chỉ, tất tu
* createTime: Sang kiến thời gian
* status: Hạ tái trạng thái, tân kiến hạ tái nhậm vụ thỉnh sử dụng TaskStatusNew, ứng dụng khải động thời khôi phục nguyên tiên hạ tái nhậm vụ thỉnh sử dụng tòng sổ cư khố độc thủ đích trạng thái, bất yếu sử dụng TaskStatusFinish sang kiến hạ tái nhậm vụ
* customInfo: Hạ tái nhậm vụ đích kỳ tha phụ đái tín tức, hạ tái quá trình trung do hạ tái nhậm vụ nhất trực huề đái
* expectedFileName: Dụng hộ kỳ vọng đích văn kiện danh, nil biểu kỳ sử dụng hệ thống kiến nghị văn kiện danh
* expectedDirectory: Dụng hộ kỳ vọng đích văn kiện tồn trữ lộ kính, nil biểu kỳ tồn trữ tại căn văn kiện giáp ( kiến rootFolder chúc tính ) hạ đích downloadFile văn kiện giáp trung
*/
- (void)addDownloadTaskForKey:(NSString *)customKey
url:(NSString *)url
createTime:(double)createTime
status:(LYFTaskStatus)status
customInfo:(NSDictionary *)customInfo
expectedDirectory:(NSString *)aDirectory;

/** sử dụng customKey khải động hạ tái */
- (void)startDownloadTaskForKey:(NSString *)customKey;
/** sử dụng customKey tạm đình hạ tái */
- (void)pauseDownloadTaskForKey:(NSString *)customKey;
/** sử dụng customKey san trừ hạ tái nhậm vụ */
- (void)deleteDownloadTaskForKey:(NSString *)customKey;
/** khai thủy sở hữu hạ tái nhậm vụ ( chỉ khải động tối tảo sang kiến đích nhậm vụ, kỳ tha tiến nhập đẳng đãi trạng thái ) */
- (void)startAll;
/** tạm đình sở hữu hạ tái nhậm vụ */
- (void)pauseAll;
/** san trừ sở hữu hạ tái nhậm vụ */
- (void)deleteAll;
/** cường chế thủ tiêu sở hữu hạ tái nhậm vụ tịnh sinh thành khôi phục sổ cư, dụng vu thối xuất đăng lục */
- (void)cancelAllByProduceResumeData;

@end
  • LYFDownloadTaskModel.h
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSInteger, LYFTaskStatus) {
LYFTaskStatusNew = 0, // sang kiến tân nhậm vụ sử dụng

LYFTaskStatusDownloading = 1, // xoát tân liệt biểu, canh tân db sử dụng
LYFTaskStatusWaiting = 2,
LYFTaskStatusPause = 3,

LYFTaskStatusFinish = 4
};

@interface LYFDownloadTaskModel: NSObject

@property (nonatomic, copy) NSString *customKey; // id tiêu thức
@property (nonatomic, strong) NSDictionary *customInfo; // kỳ tha phụ đái tín tức
@property (nonatomic, assign) double taskCreateTime; // hạ tái nhậm vụ đích sang kiến thời gian (ms thời gian trạc )
@property (nonatomic, assign) LYFTaskStatus status; // hạ tái trạng thái
@property (nonatomic, copy) NSString *customFolderDirectory; // sa hạp văn kiện giáp hạ nhu yếu đích lộ kính
@property (nonatomic, copy) NSString *urlString; // văn kiện địa chỉ
@property (nonatomic, assign) int64_t currentSpeed; // đương tiền đích hạ tái tốc độ (kb/s)
@property (nonatomic, assign) int64_t total; // tổng đại tiểu (b)
@property (nonatomic, assign) float completePercentage; // hoàn thành bách phân bỉ (0~1)
@property (nonatomic, assign) int taskCount; // hạ tái nhậm vụ tổng sổ

@end
  • TODO

    1. Hoàn thiện đích bị vong lục mô thức.
    2. Swift bản.