├── .gitignore ├── .swift-version ├── DownloadManager.xcworkspace └── contents.xcworkspacedata ├── LICENSE ├── ObjcDemo ├── DownloadManagerDemo │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon20.png │ │ │ ├── Icon20@2x-1.png │ │ │ ├── Icon20@2x.png │ │ │ ├── Icon20@3x.png │ │ │ ├── Icon29.png │ │ │ ├── Icon29@2x-1.png │ │ │ ├── Icon29@2x.png │ │ │ ├── Icon29@3x.png │ │ │ ├── Icon40.png │ │ │ ├── Icon40@2x-1.png │ │ │ ├── Icon40@2x.png │ │ │ ├── Icon40@3x.png │ │ │ ├── Icon60@2x.png │ │ │ ├── Icon60@3x.png │ │ │ ├── Icon76.png │ │ │ ├── Icon76@2x.png │ │ │ └── Icon83.5@2x.png │ │ └── Contents.json │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── ConfigurationViewController.h │ ├── ConfigurationViewController.m │ ├── Info.plist │ ├── Main.storyboard │ └── main.m └── ObjCDMDemo.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ └── contents.xcworkspacedata ├── README.md ├── SDEDownloadManager.podspec ├── SDEDownloadManager ├── .jazzy.yaml ├── Assets │ ├── ActionButtonIcon.xcassets │ │ ├── Contents.json │ │ ├── Delete.imageset │ │ │ ├── Contents.json │ │ │ ├── Delete.png │ │ │ ├── Delete@2x.png │ │ │ └── Delete@3x.png │ │ ├── Delete_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── Delete_filled.png │ │ │ ├── Delete_filled@2x.png │ │ │ └── Delete_filled@3x.png │ │ ├── Download.imageset │ │ │ ├── Contents.json │ │ │ ├── Download.png │ │ │ ├── Download@2x.png │ │ │ └── Download@3x.png │ │ ├── Download_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── Download_filled.png │ │ │ ├── Download_filled@2x.png │ │ │ └── Download_filled@3x.png │ │ ├── Finish.imageset │ │ │ ├── Contents.json │ │ │ ├── Finish.png │ │ │ ├── Finish@2x.png │ │ │ └── Finish@3x.png │ │ ├── Finish_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── Finish_filled.png │ │ │ ├── Finish_filled@2x.png │ │ │ └── Finish_filled@3x.png │ │ ├── Insert.imageset │ │ │ ├── Contents.json │ │ │ ├── Insert.png │ │ │ ├── Insert@2x.png │ │ │ └── Insert@3x.png │ │ ├── Pause.imageset │ │ │ ├── Contents.json │ │ │ ├── Pause.png │ │ │ ├── Pause@2x.png │ │ │ └── Pause@3x.png │ │ ├── Pause_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── Pause_filled.png │ │ │ ├── Pause_filled@2x.png │ │ │ └── Pause_filled@3x.png │ │ ├── Remove.imageset │ │ │ ├── Contents.json │ │ │ ├── Remove.png │ │ │ ├── Remove@2x.png │ │ │ └── Remove@3x.png │ │ ├── Resume.imageset │ │ │ ├── Contents.json │ │ │ ├── Resume.png │ │ │ ├── Resume@2x.png │ │ │ └── Resume@3x.png │ │ ├── Resume_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── Resume_filled.png │ │ │ ├── Resume_filled@2x.png │ │ │ └── Resume_filled@3x.png │ │ └── Smash.imageset │ │ │ ├── Contents.json │ │ │ ├── Smash.png │ │ │ ├── Smash@2x.png │ │ │ └── Smash@3x.png │ ├── ButtonItemIcon.xcassets │ │ ├── Contents.json │ │ ├── PlusMinus.imageset │ │ │ ├── Contents.json │ │ │ ├── PlusMinus.png │ │ │ ├── PlusMinus@2x.png │ │ │ └── PlusMinus@3x.png │ │ ├── PlusMinus_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── PlusMinus_filled.png │ │ │ ├── PlusMinus_filled@2x.png │ │ │ └── PlusMinus_filled@3x.png │ │ ├── Restore.imageset │ │ │ ├── Contents.json │ │ │ ├── Restore.png │ │ │ ├── Restore@2x.png │ │ │ └── Restore@3x.png │ │ ├── Selected.imageset │ │ │ ├── Contents.json │ │ │ ├── Selected.png │ │ │ ├── Selected@2x.png │ │ │ └── Selected@3x.png │ │ ├── Sort.imageset │ │ │ ├── Contents.json │ │ │ ├── Sort.png │ │ │ ├── Sort@2x.png │ │ │ └── Sort@3x.png │ │ ├── Stop.imageset │ │ │ ├── Contents.json │ │ │ ├── Stop.png │ │ │ ├── Stop@2x.png │ │ │ └── Stop@3x.png │ │ ├── Stop_filled.imageset │ │ │ ├── Contents.json │ │ │ ├── Stop_filled.png │ │ │ ├── Stop_filled@2x.png │ │ │ └── Stop_filled@3x.png │ │ └── Unselected.imageset │ │ │ ├── Contents.json │ │ │ ├── Unselected.png │ │ │ ├── Unselected@2x.png │ │ │ └── Unselected@3x.png │ ├── FileExtensionIcon.xcassets │ │ ├── Contents.json │ │ ├── PDF.imageset │ │ │ ├── Contents.json │ │ │ ├── PDF.png │ │ │ ├── PDF@2x.png │ │ │ └── PDF@3x.png │ │ ├── RAR.imageset │ │ │ ├── Contents.json │ │ │ ├── RAR.png │ │ │ ├── RAR@2x.png │ │ │ └── RAR@3x.png │ │ └── ZIP.imageset │ │ │ ├── Contents.json │ │ │ ├── ZIP.png │ │ │ ├── ZIP@2x.png │ │ │ └── ZIP@3x.png │ └── FileTypeIcon.xcassets │ │ ├── Audio.imageset │ │ ├── Audio.png │ │ ├── Audio@2x.png │ │ ├── Audio@3x.png │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Document.imageset │ │ ├── Contents.json │ │ ├── Document.png │ │ ├── Document@2x.png │ │ └── Document@3x.png │ │ ├── Image.imageset │ │ ├── Contents.json │ │ ├── Image.png │ │ ├── Image@2x.png │ │ └── Image@3x.png │ │ ├── Music.imageset │ │ ├── Contents.json │ │ ├── Music.png │ │ ├── Music@2x.png │ │ └── Music@3x.png │ │ ├── Other.imageset │ │ ├── Contents.json │ │ ├── Other.png │ │ ├── Other@2x.png │ │ └── Other@3x.png │ │ └── Video.imageset │ │ ├── Contents.json │ │ ├── Video.png │ │ ├── Video@2x.png │ │ └── Video@3x.png ├── FeatureTests │ ├── ControlDownloadCountTests.swift │ ├── FeatureTests-Bridging-Header.h │ ├── Info.plist │ ├── LoadAndSavePerformanceTests.swift │ ├── MultipleTasksTests.swift │ ├── SingleTaskTests.swift │ └── TestShare.swift ├── Info.plist ├── LocalizableFiles │ ├── en.lproj │ │ └── Localizable.strings │ └── zh-Hans.lproj │ │ └── Localizable.strings ├── Manager │ ├── DMExtension.swift │ ├── DownloadManager.swift │ ├── DownloadOperation.swift │ ├── DownloadTracker.swift │ ├── FrameworkShare.swift │ ├── ListSorter.swift │ ├── SessionDelegate.swift │ └── ThumbnailCacher.swift ├── SDEDownloadManager.h ├── SDEDownloadManager.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── SDEDownloadManager.xcscheme └── ViewController │ ├── DownloadListController.swift │ ├── DownloadTrackerCell.swift │ ├── RestoreTaskController.swift │ ├── SliderAlertController.swift │ ├── SortViewController.swift │ ├── TableViewController.swift │ └── URLPickerController.swift ├── SwiftDemo ├── DownloadManagerDemo │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon20.png │ │ │ ├── Icon20@2x-1.png │ │ │ ├── Icon20@2x.png │ │ │ ├── Icon20@3x.png │ │ │ ├── Icon29.png │ │ │ ├── Icon29@2x-1.png │ │ │ ├── Icon29@2x.png │ │ │ ├── Icon29@3x.png │ │ │ ├── Icon40.png │ │ │ ├── Icon40@2x-1.png │ │ │ ├── Icon40@2x.png │ │ │ ├── Icon40@3x.png │ │ │ ├── Icon60@2x.png │ │ │ ├── Icon60@3x.png │ │ │ ├── Icon76.png │ │ │ ├── Icon76@2x.png │ │ │ └── Icon83.5@2x.png │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── ConfigurationViewController.swift │ ├── Info.plist │ └── Main.storyboard └── SwiftDMDemo.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ └── contents.xcworkspacedata └── docs ├── Classes.html ├── Classes ├── DownloadListController.html ├── DownloadTrackerCell.html ├── SDEDownloadManager.html ├── SDETableViewController.html ├── SliderAlertController.html └── URLPickerController.html ├── Enums.html ├── Enums ├── AccessoryButtonStyle.html ├── BarButtonAppearanceStyle.html ├── CellImageViewStyle.html ├── ComparisonOrder.html ├── ComparisonType.html ├── DeleteMode.html ├── DeleteTaskType.html ├── DownloadState.html ├── DownloadTaskState.html ├── ImageViewStyle.html ├── ListContent.html ├── NavigationBarAction.html ├── NavigationBarActionEnum.html ├── ThumbnailShape.html ├── ToolBarAction.html └── ToolBarActionEnum.html ├── Extensions.html ├── Extensions ├── String.html └── URLSessionTask.html ├── Protocols.html ├── Protocols ├── AccessoryButtonDelegate.html └── DownloadActivityTrackable.html ├── badge.svg ├── css ├── highlight.css └── jazzy.css ├── docsets ├── SDEDownloadManager.docset │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── Documents │ │ ├── Classes.html │ │ ├── Classes │ │ │ ├── DownloadListController.html │ │ │ ├── DownloadTrackerCell.html │ │ │ ├── SDEDownloadManager.html │ │ │ ├── SDETableViewController.html │ │ │ ├── SliderAlertController.html │ │ │ └── URLPickerController.html │ │ ├── Enums.html │ │ ├── Enums │ │ │ ├── AccessoryButtonStyle.html │ │ │ ├── BarButtonAppearanceStyle.html │ │ │ ├── CellImageViewStyle.html │ │ │ ├── ComparisonOrder.html │ │ │ ├── ComparisonType.html │ │ │ ├── DeleteMode.html │ │ │ ├── DeleteTaskType.html │ │ │ ├── DownloadState.html │ │ │ ├── DownloadTaskState.html │ │ │ ├── ImageViewStyle.html │ │ │ ├── ListContent.html │ │ │ ├── NavigationBarAction.html │ │ │ ├── NavigationBarActionEnum.html │ │ │ ├── ThumbnailShape.html │ │ │ ├── ToolBarAction.html │ │ │ └── ToolBarActionEnum.html │ │ ├── Extensions.html │ │ ├── Extensions │ │ │ ├── String.html │ │ │ └── URLSessionTask.html │ │ ├── Protocols.html │ │ ├── Protocols │ │ │ ├── AccessoryButtonDelegate.html │ │ │ └── DownloadActivityTrackable.html │ │ ├── badge.svg │ │ ├── css │ │ │ ├── highlight.css │ │ │ └── jazzy.css │ │ ├── img │ │ │ ├── carat.png │ │ │ ├── dash.png │ │ │ └── gh.png │ │ ├── index.html │ │ ├── js │ │ │ ├── jazzy.js │ │ │ └── jquery.min.js │ │ ├── search.json │ │ └── undocumented.json │ │ └── docSet.dsidx ├── SDEDownloadManager.tgz └── SDEDownloadManager.xml ├── img ├── carat.png ├── dash.png └── gh.png ├── index.html ├── js ├── jazzy.js └── jquery.min.js └── search.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | .DS_Store 6 | 7 | ## Build generated 8 | build/ 9 | DerivedData/ 10 | 11 | ## Various settings 12 | *.pbxuser 13 | !default.pbxuser 14 | *.mode1v3 15 | !default.mode1v3 16 | *.mode2v3 17 | !default.mode2v3 18 | *.perspectivev3 19 | !default.perspectivev3 20 | xcuserdata/ 21 | 22 | ## Other 23 | *.moved-aside 24 | *.xccheckout 25 | *.xcscmblueprint 26 | 27 | ## Obj-C/Swift specific 28 | *.hmap 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | ## Playgrounds 34 | timeline.xctimeline 35 | playground.xcworkspace 36 | 37 | # Swift Package Manager 38 | # 39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 40 | # Packages/ 41 | # Package.pins 42 | # Package.resolved 43 | .build/ 44 | 45 | # CocoaPods 46 | # 47 | # We recommend against adding the Pods directory to your .gitignore. However 48 | # you should judge for yourself, the pros and cons are mentioned at: 49 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 50 | # 51 | # Pods/ 52 | 53 | # Carthage 54 | # 55 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 56 | # Carthage/Checkouts 57 | 58 | Carthage/Build 59 | 60 | # fastlane 61 | # 62 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 63 | # screenshots whenever they are needed. 64 | # For more information about the recommended setup visit: 65 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 66 | 67 | fastlane/report.xml 68 | fastlane/Preview.html 69 | fastlane/screenshots 70 | fastlane/test_output -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.0 -------------------------------------------------------------------------------- /DownloadManager.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 seedante 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ObjcDMDemo 4 | // 5 | // Created by seedante on 8/6/17. 6 | // 7 | // Copyright (c) 2017 seedante 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in all 17 | // copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | // SOFTWARE. 26 | // 27 | 28 | #import 29 | 30 | @interface AppDelegate : UIResponder 31 | 32 | @property (strong, nonatomic) UIWindow * _Nullable window; 33 | //@property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes); 34 | @property (nullable) void (^updateScreenshotHandler)(void); 35 | //(void (^)(void))completionHandler 36 | 37 | @end 38 | 39 | -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ObjcDMDemo 4 | // 5 | // Created by seedante on 8/6/17. 6 | // 7 | // Copyright (c) 2017 seedante 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in all 17 | // copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | // SOFTWARE. 26 | // 27 | 28 | #import "AppDelegate.h" 29 | 30 | @interface AppDelegate () 31 | 32 | @end 33 | 34 | @implementation AppDelegate 35 | 36 | 37 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 38 | // Override point for customization after application launch. 39 | [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert categories:nil]]; 40 | return YES; 41 | } 42 | 43 | 44 | - (void)applicationWillResignActive:(UIApplication *)application { 45 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 46 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 47 | } 48 | 49 | 50 | - (void)applicationDidEnterBackground:(UIApplication *)application { 51 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 52 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 53 | } 54 | 55 | 56 | - (void)applicationWillEnterForeground:(UIApplication *)application { 57 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 58 | } 59 | 60 | 61 | - (void)applicationDidBecomeActive:(UIApplication *)application { 62 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 63 | } 64 | 65 | 66 | - (void)applicationWillTerminate:(UIApplication *)application { 67 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 68 | } 69 | 70 | - (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler{ 71 | self.updateScreenshotHandler = completionHandler; 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon20@2x-1.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon29@2x-1.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon40@2x-1.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon20.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon20@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon29.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon29@2x.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon40.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon40@2x.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon76.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "idiom" : "ios-marketing", 107 | "size" : "1024x1024", 108 | "scale" : "1x" 109 | } 110 | ], 111 | "info" : { 112 | "version" : 1, 113 | "author" : "xcode" 114 | } 115 | } -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x-1.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@3x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x-1.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@3x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x-1.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@3x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@2x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@3x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76@2x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/ObjcDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon83.5@2x.png -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/ConfigurationViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ObjcDMDemo 4 | // 5 | // Created by seedante on 8/6/17. 6 | // 7 | // Copyright (c) 2017 seedante 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in all 17 | // copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | // SOFTWARE. 26 | // 27 | 28 | #import 29 | @import SDEDownloadManager; 30 | 31 | @interface ConfigurationViewController : UIViewController 32 | 33 | @property enum ListContent displayContent; 34 | @property enum CellImageViewStyle cellImageViewStyle; 35 | @property enum ThumbnailShape fileThumbnailShape; 36 | @property enum AccessoryButtonStyle actionButtonStyle; 37 | 38 | @property BOOL allowsTrackingDownloadDetail; 39 | @property BOOL allowsTrackingSpeed; 40 | @property BOOL allowsTrackingProgress; 41 | 42 | @property enum BarButtonAppearanceStyle barButtonAppearanceStyle; 43 | @property BOOL buttonIconFilled; 44 | 45 | @property BOOL allowsStop; 46 | @property BOOL allowsRedownload; 47 | @property BOOL allowsDeletion; 48 | @property BOOL allowsRestoration; 49 | @property enum DeleteMode deleteMode; 50 | 51 | @property BOOL allowsEditingByEditButtonItem; 52 | @property BOOL allowsEditingByLongPress; 53 | 54 | @property BOOL allowsSwitchingSortMode; 55 | @property BOOL shouldDisplaySortOrderInSortView; 56 | 57 | @property BOOL allowsManagingAllTasksOnToolBar; 58 | 59 | @property BOOL startToDownloadImmediately; 60 | @property BOOL isTrashOpened; 61 | 62 | @property CGFloat cellHeight; 63 | @property CGFloat fileThumbnailHeight; 64 | @property NSInteger scrollSpeedThreshold; 65 | 66 | @end 67 | 68 | -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ObjCDMDemo 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | CFBundleLocalizations 47 | 48 | en 49 | zh 50 | 51 | NSAppTransportSecurity 52 | 53 | NSAllowsArbitraryLoads 54 | 55 | NSExceptionDomains 56 | 57 | devstreaming.apple.com 58 | 59 | NSExceptionAllowsInsecureHTTPLoads 60 | 61 | NSIncludesSubdomains 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /ObjcDemo/DownloadManagerDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ObjcDMDemo 4 | // 5 | // Created by seedante on 8/6/17. 6 | // Copyright © 2017 seedante. All rights reserved. 7 | // 8 | 9 | 10 | #import 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ObjcDemo/ObjCDMDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 | SDEDownloadManager 6 | 7 |

8 | 9 | `SDEDownloadManager` is a download management library, which is written with Swift and is compatible with Objective-C. 10 | 11 | The same name class [SDEDownloadManager](https://seedante.github.io/SDEDownloadManager/Classes/SDEDownloadManager.html) provides download management features. And, a UITableViewController subclass, [DownloadListController](https://seedante.github.io/SDEDownloadManager/Classes/DownloadListController.html), coordinates with [SDEDownloadManager](https://seedante.github.io/SDEDownloadManager/Classes/SDEDownloadManager.html) to display and manage download tasks, and track download activity. 12 | 13 | [API Reference](https://seedante.github.io/SDEDownloadManager/): Quick help in Xcode maybe doesn't work well out of framework, you will need this. It's generated by [jazzy](https://github.com/realm/jazzy). 14 | 15 | ## Requirements 16 | 17 | * iOS 8.0/Swift 4.0 18 | 19 | 20 | ## Library Components 21 | 22 | #### SDEDownloadManager [[Document]](https://seedante.github.io/SDEDownloadManager/Classes/SDEDownloadManager.html) 23 | 24 | * Basic download management: download/pause/resume/stop/restart/delete. 25 | * Sort download list with predefine types and powerful predicate. 26 | * Control download count: it's good as you think. 27 | * Track download activity: download progress and speed. 28 | * Cache thumbnails for files. 29 | * Handle part authentication: Basic, Digest, and server trust. 30 | * Handle app force quit in downloading and you have to do nothing. 31 | 32 | The features it **doesn't support**: 33 | 34 | * Don't support specifying file store location. It's meaningless on iOS devices. 35 | * Don't support playing and caching online media file. It just download file. 36 | * Don't support limiting download speed. 37 | * Don't support multithreading download for a single file. 38 | 39 | 40 | #### DownloadListController [[Document]](https://seedante.github.io/SDEDownloadManager/Classes/DownloadListController.html) [[Cheat Sheet]](https://github.com/seedante/SDEDownloadManager/wiki/Cheat-Sheet) 41 | 42 | * Custom content to display: 43 | 44 | ![](https://raw.githubusercontent.com/seedante/iOS-Note/master/SDEDownloadManager/DownloadListType.png) 45 | 46 | * Custom cell content. All elements in the cell are customizable, some examples: 47 | 48 | ![](https://raw.githubusercontent.com/seedante/iOS-Note/master/SDEDownloadManager/CellTypeA.png) 49 | ![](https://raw.githubusercontent.com/seedante/iOS-Note/master/SDEDownloadManager/CellTypeB.png) 50 | ![](https://raw.githubusercontent.com/seedante/iOS-Note/master/SDEDownloadManager/CellTypeC.png) 51 | Except textLabel, other elements could be hidden. 52 | 53 | You also could use custom UITableViewCell. There is only one cell available for now. 54 | 55 | * Custom manage features in cell swipe and multiple selection, these features are disabled by default; 56 | * Adjust max download count by `adjustButtonItem`; 57 | * Sort list by `sortButtonItem`. 58 | ![](https://raw.githubusercontent.com/seedante/iOS-Note/master/SDEDownloadManager/Swipe.CDC.Sort.png) 59 | 60 | #### SliderAlertController [[Document]](https://seedante.github.io/SDEDownloadManager/Classes/SliderAlertController.html) 61 | 62 | A UIViewController subclass like UIAlertController to display a slider, allows to display custom symbol for special vaule, like "∞" for 0 above. 63 | 64 | #### URLPickerController [[Document]](https://seedante.github.io/SDEDownloadManager/Classes/URLPickerController.html) 65 | 66 | A UITableViewController subclass to pick URL strings. In demo, I use it to pick files for `DownloadListController` to download. 67 | 68 | 69 | ## What you need to know before using the library 70 | 71 | `SDEDownloadManager` maintains a `downloadList` for all tasks, which is a `[[String]]`and is designed for UITableView/UICollectionView. 72 | 73 | Here is the only method to create a SDEDownloadManager object: 74 | 75 | static func manager(identifier: String, manualMode: Bool = false) -> SDEDownloadManager 76 | 77 | If a download manager with specified identifier exists in the memory already, this method returns it directly, so you don't have to keep a reference to use it in other places. 78 | 79 | let libraryLink = "https://codeload.github.com/seedante/SDEDownloadManager/zip/master" 80 | SDEDownloadManager.manager(identifier: "Link").download([libraryLink]) 81 | 82 | 83 | SDEDownloadManager has two sort modes: manual and predefined mode(include: `.addTime`, `.fileName`, `.fileSize`, `.fileType`). The two sort modes can switch to each other freely in `sortListBy(type:order:)`. Except for obvious sort difference, what's difference between with two modes? 84 | 85 | 1. Download new file. In predefined mode, you just need to offer download URL, but in manual mode, you must also offer its insert location in `downloadList`. 86 | 87 | 2. A section in UITableView with `.plain` style can't be distinguished from last section if it doesn't have a title, so in manual mode, when you insert a new section, it must have a title. 88 | 89 | Although you can switch between with two sort modes freely, switching from manual mode to predefined mode will lose all section titles, and switching from predefined mode to manual mode will integrate all tasks into one section with a placeholder title, so choose sort mode based on your usage scenario discreetly. 90 | 91 | In addition, in predefined mode, when downloading a new file, its name and type maybe change, and its file size is known after its meta info is fetched, so SDEDownloadManager change its sort type to `.addTime` automatically if it's not. 92 | 93 | 94 | ## Installation 95 | 96 | CocoaPods: `pod 'SDEDownloadManager'` 97 | 98 | Carthage: `github "seedante/SDEDownloadManager"` 99 | 100 | If you are not familiar with CocoaPods or Carthage, or you want to install it manually, reference to [Installation Guide](https://github.com/seedante/SDEDownloadManager/wiki/Installation-Guide). 101 | 102 | After installation, import SDEDownloadManager into your project: 103 | 104 | // In Swift file 105 | import SDEDownloadManager 106 | // In Objective-C file 107 | @import SDEDownloadManager; 108 | 109 | 110 | ## Localization for UIViewController in the Library 111 | 112 | Supported localizable languages for now: English, Simplified Chinese. 113 | 114 | ## License 115 | 116 | SDEDownloadManager is released under the [MIT LICENSE](https://github.com/seedante/SDEDownloadManager/blob/master/LICENSE). -------------------------------------------------------------------------------- /SDEDownloadManager.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'SDEDownloadManager' 3 | s.version = '0.9.0' 4 | s.summary = 'A pure Swift implemented library to download file from the web.' 5 | s.description = <<-DESC 6 | 7 | SDEDownloadManager is a download management library, which is written with Swift and is 8 | compatible with Objective-C. 9 | 10 | The same name class SDEDownloadManager provides download management features. And, 11 | a UITableViewController subclass, DownloadListController, coordinates with 12 | SDEDownloadManager to display and manage download tasks, and track download activity. 13 | 14 | DESC 15 | 16 | s.homepage = 'https://github.com/seedante/SDEDownloadManager' 17 | 18 | s.license = { :type => 'MIT', :file => 'LICENSE' } 19 | s.author = { 'seedante' => 'seedante@gmail.com' } 20 | s.platform = :ios, '8.0' 21 | s.swift_version = '4.0' 22 | 23 | s.source = { :git => "https://github.com/seedante/SDEDownloadManager.git", :tag => s.version } 24 | s.source_files = ['SDEDownloadManager/**/*.swift', 'SDEDownloadManager/SDEDownloadManager.h'] 25 | s.exclude_files = 'SDEDownloadManager/FeatureTests' 26 | s.resources = ['SDEDownloadManager/Assets/*.xcassets', 'SDEDownloadManager/LocalizableFiles/**/*.strings'] 27 | s.public_header_files = 'SDEDownloadManager/SDEDownloadManager.h' 28 | 29 | end 30 | -------------------------------------------------------------------------------- /SDEDownloadManager/.jazzy.yaml: -------------------------------------------------------------------------------- 1 | author: seedante 2 | github_url: https://github.com/seedante/SDEDownloadManager/ 3 | root_url: https://seedante.github.io/SDEDownloadManager/ 4 | module: SDEDownloadManager 5 | output: docs 6 | theme: apple 7 | module_version: 0.9.0 8 | swift_version: "4.0.3" 9 | -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Delete.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Delete@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Delete@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Delete.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Delete@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Delete@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete.imageset/Delete@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Delete_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Delete_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Delete_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Delete_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Delete_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Delete_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Delete_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Delete_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Delete_filled.imageset/Delete_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Download.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Download@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Download@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Download.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Download@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Download@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Download@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download.imageset/Download@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Download_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Download_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Download_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Download_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Download_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Download_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Download_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Download_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Download_filled.imageset/Download_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Finish.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Finish@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Finish@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Finish.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Finish@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Finish@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Finish@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish.imageset/Finish@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Finish_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Finish_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Finish_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Finish_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Finish_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Finish_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Finish_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Finish_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Finish_filled.imageset/Finish_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Insert.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Insert@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Insert@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Insert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Insert.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Insert@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Insert@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Insert@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Insert.imageset/Insert@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Pause.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Pause@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Pause@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Pause.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Pause@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Pause@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause.imageset/Pause@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Pause_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Pause_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Pause_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Pause_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Pause_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Pause_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Pause_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Pause_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Pause_filled.imageset/Pause_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Remove.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Remove@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Remove@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Remove.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Remove@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Remove@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Remove@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Remove.imageset/Remove@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Resume.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Resume@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Resume@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Resume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Resume.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Resume@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Resume@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Resume@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume.imageset/Resume@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Resume_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Resume_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Resume_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Resume_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Resume_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Resume_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Resume_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Resume_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Resume_filled.imageset/Resume_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Smash.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Smash@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Smash@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "original" 25 | } 26 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Smash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Smash.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Smash@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Smash@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Smash@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ActionButtonIcon.xcassets/Smash.imageset/Smash@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "PlusMinus.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "PlusMinus@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "PlusMinus@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/PlusMinus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/PlusMinus.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/PlusMinus@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/PlusMinus@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/PlusMinus@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus.imageset/PlusMinus@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "PlusMinus_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "PlusMinus_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "PlusMinus_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/PlusMinus_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/PlusMinus_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/PlusMinus_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/PlusMinus_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/PlusMinus_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/PlusMinus_filled.imageset/PlusMinus_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Restore.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Restore@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Restore@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Restore.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Restore@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Restore@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Restore@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Restore.imageset/Restore@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Selected.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Selected@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Selected.imageset/Selected@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Sort.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Sort@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Sort@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Sort.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Sort@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Sort@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Sort@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Sort.imageset/Sort@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Stop.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Stop@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Stop@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Stop.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Stop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Stop@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Stop@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop.imageset/Stop@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Stop_filled.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Stop_filled@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Stop_filled@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Stop_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Stop_filled.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Stop_filled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Stop_filled@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Stop_filled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Stop_filled.imageset/Stop_filled@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Unselected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Unselected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Unselected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Unselected.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Unselected@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Unselected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/ButtonItemIcon.xcassets/Unselected.imageset/Unselected@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "PDF.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "PDF@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "PDF@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/PDF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/PDF.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/PDF@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/PDF@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/PDF@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/PDF.imageset/PDF@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "RAR.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "RAR@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "RAR@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/RAR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/RAR.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/RAR@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/RAR@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/RAR@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/RAR.imageset/RAR@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ZIP.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ZIP@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ZIP@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/ZIP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/ZIP.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/ZIP@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/ZIP@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/ZIP@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileExtensionIcon.xcassets/ZIP.imageset/ZIP@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Audio.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Audio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Audio@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Audio@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Audio@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Audio.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Audio.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Audio@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Audio@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Document.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Document@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Document@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Document.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Document@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Document@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Document@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Document.imageset/Document@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Image.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Image@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Image@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Image.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Image@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Image@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Image@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Image.imageset/Image@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Music.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Music@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Music@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Music.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Music@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Music@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Music@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Music.imageset/Music@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Other.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Other@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Other@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Other.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Other.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Other@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Other@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Other@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Other.imageset/Other@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Video.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Video@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Video@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Video.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Video@2x.png -------------------------------------------------------------------------------- /SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Video@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SDEDownloadManager/Assets/FileTypeIcon.xcassets/Video.imageset/Video@3x.png -------------------------------------------------------------------------------- /SDEDownloadManager/FeatureTests/ControlDownloadCountTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ControlCountOfDownloadTests.swift 3 | // DownloadManager 4 | // 5 | // Created by seedante on 8/30/17. 6 | // 7 | // Copyright (c) 2017 seedante 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in all 17 | // copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | // SOFTWARE. 26 | // 27 | 28 | import XCTest 29 | @testable import SDEDownloadManager 30 | 31 | 32 | class ControlDownloadCountTests: XCTestCase { 33 | let slideURLStrings: [String] = [host + Network2013Slide, 34 | host + Network2014Slide, 35 | host + Network2015Slide, 36 | host + Network2016Slide, 37 | host + URLSession2016Slide] 38 | let SDVideoURLStrings: [String] = [host + Network2013SDVideo, 39 | host + Network2014SDVideo, 40 | host + Network2015SDVideo, 41 | host + Network2016SDVideo, 42 | host + URLSession2016SDVideo] 43 | let HDVideoURLStrings: [String] = [host + Network2013HDVideo, 44 | host + Network2014HDVideo, 45 | host + Network2015HDVideo, 46 | host + Network2016HDVideo, 47 | host + URLSession2016HDVideo] 48 | 49 | override func setUp() { 50 | NSLog("setUp") 51 | super.setUp() 52 | waitForDownloadManagerReady(testManager) 53 | testManager.isTrashOpened = false 54 | _ = testManager.emptyToDeleteList() 55 | _ = testManager.deleteAllTasks() 56 | sleep(1) 57 | XCTAssert(testManager.downloadTaskInfo.isEmpty, "All tasks should be deleted") 58 | if testManager.countOfRunningTask > 0{ 59 | XCTFail("All executing operations should be cancelled") 60 | } 61 | 62 | testManager.pauseDownloadBySuspendingSessionTask = true 63 | testManager.maxDownloadCount = OperationQueue.defaultMaxConcurrentOperationCount 64 | testManager.saveData() 65 | } 66 | 67 | override func tearDown() { 68 | NSLog("tearDown") 69 | // Put teardown code here. This method is called after the invocation of each test method in the class. 70 | super.tearDown() 71 | testManager.isTrashOpened = false 72 | _ = testManager.emptyToDeleteList() 73 | _ = testManager.deleteAllTasks() 74 | sleep(1) 75 | XCTAssert(testManager.downloadTaskInfo.isEmpty, "All tasks should be deleted") 76 | if testManager.countOfRunningTask > 0{ 77 | XCTFail("All executing operations should be cancelled") 78 | } 79 | 80 | testManager.pauseDownloadBySuspendingSessionTask = true 81 | testManager.maxDownloadCount = OperationQueue.defaultMaxConcurrentOperationCount 82 | testManager.saveData() 83 | } 84 | 85 | func testPauseTaskBySuspend(){ 86 | testManager.pauseDownloadBySuspendingSessionTask = true 87 | testManager.maxDownloadCount = 5 88 | XCTAssertEqual(testManager.maxDownloadCount, 5) 89 | _ = testManager.download(SDVideoURLStrings) 90 | sleep(1) 91 | verifyRunningTaskOfURLString(SDVideoURLStrings[0]) 92 | verifyRunningTaskOfURLString(SDVideoURLStrings[1]) 93 | verifyRunningTaskOfURLString(SDVideoURLStrings[2]) 94 | verifyRunningTaskOfURLString(SDVideoURLStrings[3]) 95 | verifyRunningTaskOfURLString(SDVideoURLStrings[4]) 96 | 97 | 98 | var testCount = 5 99 | while testCount > 0 { 100 | NSLog("Test No.\(6 - testCount)") 101 | let limitCount = Int(arc4random_uniform(UInt32(SDVideoURLStrings.count + 3))) 102 | NSLog("limitCount: \(limitCount)") 103 | testManager.maxDownloadCount = limitCount 104 | let compareValue = limitCount == 0 ? Int.max : limitCount 105 | XCTAssert(testManager.countOfRunningTask <= compareValue) 106 | testCount -= 1 107 | 108 | let seedValue = Int(arc4random_uniform(UInt32(100))) 109 | let randomIndex = Int(arc4random_uniform(UInt32(testManager._downloadTaskSet.count))) 110 | if seedValue < 50{ 111 | _ = testManager.pauseTasks(at: [IndexPath(row: randomIndex, section: 0)]) 112 | }else if seedValue < 70{ 113 | _ = testManager.stopTasks(at: [IndexPath(row: randomIndex, section: 0)]) 114 | }else if seedValue < 90{ 115 | _ = testManager.download([slideURLStrings[testCount]]) 116 | sleep(5) 117 | } 118 | } 119 | } 120 | 121 | func testPauseTaskByStop(){ 122 | testManager.pauseDownloadBySuspendingSessionTask = false 123 | testManager.maxDownloadCount = 5 124 | XCTAssertEqual(testManager.maxDownloadCount, 5) 125 | _ = testManager.download(SDVideoURLStrings) 126 | sleep(1) 127 | verifyRunningTaskOfURLString(SDVideoURLStrings[0]) 128 | verifyRunningTaskOfURLString(SDVideoURLStrings[1]) 129 | verifyRunningTaskOfURLString(SDVideoURLStrings[2]) 130 | verifyRunningTaskOfURLString(SDVideoURLStrings[3]) 131 | verifyRunningTaskOfURLString(SDVideoURLStrings[4]) 132 | 133 | 134 | var testCount = 5 135 | while testCount > 0 { 136 | NSLog("Test No.\(6 - testCount)") 137 | let limitCount = Int(arc4random_uniform(UInt32(SDVideoURLStrings.count + 3))) 138 | NSLog("limitCount: \(limitCount)") 139 | testManager.maxDownloadCount = limitCount 140 | sleep(1) 141 | let compareValue = limitCount == 0 ? Int.max : limitCount 142 | XCTAssert(testManager.countOfRunningTask <= compareValue) 143 | testCount -= 1 144 | 145 | let seedValue = Int(arc4random_uniform(UInt32(100))) 146 | let randomIndex = Int(arc4random_uniform(UInt32(testManager._downloadTaskSet.count))) 147 | if seedValue < 50{ 148 | _ = testManager.pauseTasks(at: [IndexPath(row: randomIndex, section: 0)]) 149 | }else if seedValue < 70{ 150 | _ = testManager.stopTasks(at: [IndexPath(row: randomIndex, section: 0)]) 151 | }else if seedValue < 90{ 152 | _ = testManager.download([slideURLStrings[testCount]]) 153 | sleep(5) 154 | } 155 | } 156 | 157 | } 158 | 159 | // Except for -1(NSOperationQueueDefaultMaxConcurrentOperationCount), for any number less than 1, maxDownloadCount will be set to -1. 160 | func testSetInvalidMaxDownloadCount(){ 161 | testManager.maxDownloadCount = 1 162 | XCTAssert(testManager.maxDownloadCount == 1) 163 | 164 | testManager.maxDownloadCount = 0 165 | XCTAssert(testManager.maxDownloadCount == OperationQueue.defaultMaxConcurrentOperationCount) 166 | 167 | testManager.maxDownloadCount = 1 168 | XCTAssert(testManager.maxDownloadCount == 1) 169 | 170 | testManager.maxDownloadCount = -2 171 | XCTAssert(testManager.maxDownloadCount == OperationQueue.defaultMaxConcurrentOperationCount) 172 | } 173 | 174 | } 175 | -------------------------------------------------------------------------------- /SDEDownloadManager/FeatureTests/FeatureTests-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /SDEDownloadManager/FeatureTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SDEDownloadManager/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleExecutable 6 | $(EXECUTABLE_NAME) 7 | CFBundleIdentifier 8 | $(PRODUCT_BUNDLE_IDENTIFIER) 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | $(PRODUCT_NAME) 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleShortVersionString 16 | 0.9 17 | CFBundleVersion 18 | $(CURRENT_PROJECT_VERSION) 19 | NSPrincipalClass 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SDEDownloadManager/LocalizableFiles/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | SDEDownloadManager 4 | 5 | Created by seedante on 8/11/17. 6 | Copyright © 2017 seedante. All rights reserved. 7 | */ 8 | 9 | 10 | /* Alert Message: Note to Set MaxDownloadCount */ 11 | "(No limit when value is 0)" = "(No limit when value is 0)"; 12 | 13 | /* PlaceHolder Section Title for Empty DownloadList in Manual Mode */ 14 | "Add New Section" = "Add New Section"; 15 | 16 | /* Alert Title: Adjust MaxDownloadCount */ 17 | "Adjust Max Download Count" = "Adjust Max Download Count"; 18 | 19 | /* AddTime Descending Order */ 20 | "AddTime Order: New -> Old" = "New -> Old"; 21 | 22 | /* AddTime Ascending Order */ 23 | "AddTime Order: Old -> New" = "Old -> New"; 24 | 25 | /* Switch Sort Mode: Predefined to Manual */ 26 | "All files will be integrated into one section." = "All files will be integrated into one section."; 27 | 28 | /* Ascending Order */ 29 | "Ascending" = "Ascending"; 30 | 31 | /* Adjust MaxDownloadCount */ 32 | "Button.Adjust" = "Adjust"; 33 | 34 | /* Cancel Action */ 35 | "Button.Cancel" = "Cancel"; 36 | 37 | /* Confirm Action */ 38 | "Button.Confirm" = "Confirm"; 39 | 40 | /* Delete Task and Related File */ 41 | "Button.Delete" = "Delete"; 42 | 43 | /* Delete All Tasks */ 44 | "Button.DeleteAll" = "DeleteAll"; 45 | 46 | /* Exit Edit Mode */ 47 | "Button.Done" = "Done"; 48 | 49 | /* Enter Edit Mode */ 50 | "Button.Edit" = "Edit"; 51 | 52 | /* Clean All Deleted Tasks in the Trash */ 53 | "Button.Empty" = "Empty"; 54 | 55 | /* Task is Finished */ 56 | "Button.Finished" = "Finished"; 57 | 58 | /* Pause Download */ 59 | "Button.Pause" = "Pause"; 60 | 61 | /* Pause All Downloading Tasks */ 62 | "Button.PauseAll" = "PauseAll"; 63 | 64 | /* Pick Selected URLs */ 65 | "Button.Pick" = "Pick"; 66 | 67 | /* Change File Display Name */ 68 | "Button.Rename" = "Rename"; 69 | 70 | /* Redownload the File */ 71 | "Button.Restart" = "Restart"; 72 | 73 | /* Put Deleted Task Back to Download List */ 74 | "Button.Restore" = "Restore"; 75 | 76 | /* Resume Download */ 77 | "Button.Resume" = "Resume"; 78 | 79 | /* Resume All Unfinished Tasks */ 80 | "Button.ResumeAll" = "ResumeAll"; 81 | 82 | /* Select All Cells */ 83 | "Button.SelectAll" = "SelectAll"; 84 | 85 | /* Sort Download List */ 86 | "Button.Sort" = "Sort"; 87 | 88 | /* Start Download */ 89 | "Button.Start" = "Start"; 90 | 91 | /* Stop Download */ 92 | "Button.Stop" = "Stop"; 93 | 94 | /* Stop All Download */ 95 | "Button.StopAll" = "StopAll"; 96 | 97 | /* Deselect All Cells */ 98 | "Button.UnselectAll" = "UnselectAll"; 99 | 100 | /* Alert Title: Empty Trash */ 101 | "Empty Trash?" = "Empty Trash?"; 102 | 103 | /* Alert Action Title: Cancel to Restore a Task and Return */ 104 | "Cancel and Return" = "Cancel and Return"; 105 | 106 | /* Alert Title: Delete All Tasks */ 107 | "Delete All Files?" = "Delete All Files?"; 108 | 109 | /* Alert Title: deleteMode == .optional */ 110 | "Delete File and Record Both" = "Delete File and Record Both"; 111 | 112 | /* Alert Title: deleteMode == .optional */ 113 | "Delete File Only" = "Delete File Only"; 114 | 115 | /* Alert Title: Delete Multiple Tasks */ 116 | "Delete Selected %d Files?" = "Delete Selected %d Files?"; 117 | 118 | /* Alert Title: Delete Single Task */ 119 | "Delete This File?" = "Delete This File?"; 120 | 121 | /* Delete BarButtonItem Action */ 122 | "Delete(%d)" = "Delete(%d)"; 123 | 124 | /* Descending Order */ 125 | "Descending" = "Descending"; 126 | 127 | /* FileName Ascending Order */ 128 | "FileName Order: A -> Z" = "A -> Z"; 129 | 130 | /* FileName Descending Order */ 131 | "FileName Order: Z -> A" = "Z -> A"; 132 | 133 | /* FileSize Descending Order */ 134 | "FileSize Order: Big -> Small" = "Big -> Small"; 135 | 136 | /* FileSize Ascending Order */ 137 | "FileSize Order: Small -> Big" = "Small -> Big"; 138 | 139 | /* Audio File Type */ 140 | "FileType.Audio" = "Audio"; 141 | 142 | /* Document File Type */ 143 | "FileType.Document" = "Document"; 144 | 145 | /* Image File Type */ 146 | "FileType.Image" = "Image"; 147 | 148 | /* Other File Type */ 149 | "FileType.Other" = "Other"; 150 | 151 | /* Video File Type */ 152 | "FileType.Video" = "Video"; 153 | 154 | /* PlaceHolderTitle */ 155 | "HeaderViewTitle.PlaceHolderTitle" = "Title"; 156 | 157 | /* HeaderView Title for AddTime */ 158 | "HeaderViewTitle.Sorted by Add Time" = "Sorted by Add Time"; 159 | 160 | /* HeaderView Title for FileName */ 161 | "HeaderViewTitle.Sorted by File Name" = "Sorted by File Name"; 162 | 163 | /* HeaderView Title for FileSize */ 164 | "HeaderViewTitle.Sorted by File Size" = "Sorted by File Size"; 165 | 166 | /* HeaderView Title for ToDelete Tasks */ 167 | "HeaderViewTitle.Trash" = "Trash"; 168 | 169 | /* HeaderView Title for Unfinished Tasks */ 170 | "HeaderViewTitle.UnfinishedList" = "UnfinishedList"; 171 | 172 | /* FileName Ascending Order in Section */ 173 | "Inner Order: FileName: A -> Z" = "FileName: A -> Z"; 174 | 175 | /* FileName Descending Order in Section */ 176 | "Inner Order: FileName: Z -> A" = "FileName: Z -> A"; 177 | 178 | /* Alert Title: Input Section Title */ 179 | "Input Title for The Section" = "Input Title for The Section"; 180 | 181 | /* Switch Sort Mode: Manual to Predefined */ 182 | "It will lose all section titles." = "It will lose all section titles."; 183 | 184 | /* Detele Task Alert Message: deleteMode == .optional */ 185 | "Just Delete File" = "Just Delete File"; 186 | 187 | /* Detele Task Alert Message: deleteMode == .optional */ 188 | "Keep the Record" = "Keep the Record"; 189 | 190 | /* Alert Title: Move Multiple Task to Trash */ 191 | "Move Selected %d Files to Trash?" = "Move Selected %d Files to Trash?"; 192 | 193 | /* Alert Title: deleteMode == .optional */ 194 | "Move to Trash" = "Move to Trash"; 195 | 196 | /* Alert Title: Move Single Task to Trash */ 197 | "Move to Trash?" = "Move to Trash?"; 198 | 199 | /* Alert Title: Delete All Tasks */ 200 | "Move All Files to Trash?" = "Move All Files to Trash?"; 201 | 202 | /* URL is not in the download list */ 203 | "NotInList" = "NotInList"; 204 | 205 | /* Pause BarButtonItem Action */ 206 | "Pause(%d)" = "Pause(%d)"; 207 | 208 | /* Processing Temp File */ 209 | "Processing file..." = "Processing file..."; 210 | 211 | /* Alert Title: Restart Task */ 212 | "Redownload the File?" = "Redownload the File?"; 213 | 214 | /* Content for Cell in Restore Location */ 215 | "Restore to Here!" = "Restore to Here!"; 216 | 217 | /* Alert Title: ToDelete Task Restoration */ 218 | "Restore to Original Location?" = "Restore to Original Location?"; 219 | 220 | /* Alert Title: Restore a Task */ 221 | "Restore to Highlighted Location?" = "Restore to Highlighted Location?"; 222 | 223 | /* Alert Title: Resume All Tasks */ 224 | "Resume All Tasks?" = "Resume All Tasks?"; 225 | 226 | /* Alert Title: Resume Multiple Tasks */ 227 | "Resume Selected Tasks?" = "Resume Selected Tasks?"; 228 | 229 | /* Alert Title: Resume Single Task */ 230 | "Resume the Task?" = "Resume the Task?"; 231 | 232 | /* Resume BarButtonItem Action */ 233 | "Resume(%d)" = "Resume(%d)"; 234 | 235 | /* PlaceHolder for UITextField to Input a Section Title */ 236 | "Section Title" = "Section Title"; 237 | 238 | /* SortOrder Header Title */ 239 | "SortOrder" = "SortOrder"; 240 | 241 | /* FileType SortOrder Header Title */ 242 | "SortOrderInGroup" = "SortOrderInGroup"; 243 | 244 | /* SortType Header Title */ 245 | "SortType" = "SortType"; 246 | 247 | /* Sort by Add Time */ 248 | "SortType.AddTime" = "AddTime"; 249 | 250 | /* Sort by File Name */ 251 | "SortType.FileName" = "FileName"; 252 | 253 | /* Sort by File Size */ 254 | "SortType.FileSize" = "FileSize"; 255 | 256 | /* Sort by File Type */ 257 | "SortType.FileType" = "FileType"; 258 | 259 | /* Switch to Manual Mode */ 260 | "SortType.Manual" = "Manual"; 261 | 262 | /* Alert Title: Stop All Tasks */ 263 | "Stop All Tasks?" = "Stop All Tasks?"; 264 | 265 | /* Alert Title: Stop Multiple Tasks */ 266 | "Stop Selected Tasks?" = "Stop Selected Tasks?"; 267 | 268 | /* Alert Title: Stop Single Task */ 269 | "Stop the Task?" = "Stop the Task?"; 270 | 271 | /* Stop BarButtonItem Action */ 272 | "Stop(%d)" = "Stop(%d)"; 273 | 274 | /* Alert Message: deleteMode == .onlyFile */ 275 | "The record will be retained." = "The record will be retained."; 276 | 277 | /* HeaderView Title for AddTime */ 278 | "Time.Future" = "Future"; 279 | 280 | /* HeaderView Title for AddTime */ 281 | "Time.Today" = "Today"; 282 | 283 | /* HeaderView Title for AddTime */ 284 | "Time.Yesterday" = "Yesterday"; 285 | 286 | /* HeaderView Title for AddTime */ 287 | "Time.Last 7 Days" = "Last 7 Days"; 288 | 289 | /* HeaderView Title for AddTime */ 290 | "Time.Last 30 Days" = "Last 30 Days"; 291 | 292 | /* HeaderView Title for AddTime */ 293 | "Time.Older" = "Older"; 294 | 295 | /* Alert Title: Change File Display Name */ 296 | "Update File Name" = "Update File Name"; 297 | 298 | /* Alert Title: Update Section Title */ 299 | "Update Section Title" = "Update Section Title"; 300 | 301 | /* HeaderView Title for FileSize */ 302 | "Unknown Size" = "Unknown Size"; 303 | 304 | /* HeaderView Title for FileSize */ 305 | "0 ~ 1 MB" = "0 ~ 1 MB"; 306 | 307 | /* HeaderView Title for FileSize */ 308 | "1 MB ~ 100 MB" = "1 MB ~ 100 MB"; 309 | 310 | /* HeaderView Title for FileSize */ 311 | "100 MB ~ 1 GB" = "100 MB ~ 1 GB"; 312 | 313 | /* HeaderView Title for FileSize */ 314 | "Larger Than 1 GB" = "Larger Than 1 GB"; 315 | -------------------------------------------------------------------------------- /SDEDownloadManager/LocalizableFiles/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | SDEDownloadManager 4 | 5 | Created by seedante on 8/11/17. 6 | Copyright © 2017 seedante. All rights reserved. 7 | */ 8 | 9 | /* Alert Message: Note to Set MaxDownloadCount */ 10 | "(No limit when value is 0)" = "(值为0时无限制)"; 11 | 12 | /* PlaceHolder Section Title for Empty DownloadList in Manual Mode */ 13 | "Add New Section" = "添加新分组"; 14 | 15 | /* Alert Title: Adjust MaxDownloadCount */ 16 | "Adjust Max Download Count" = "调整最大下载量"; 17 | 18 | /* AddTime Descending Order */ 19 | "AddTime Order: New -> Old" = "新 -> 旧"; 20 | 21 | /* AddTime Ascending Order */ 22 | "AddTime Order: Old -> New" = "旧 -> 新"; 23 | 24 | /* Switch Sort Mode: Predefined to Manual */ 25 | "All files will be integrated into one section." = "所有文件将会整合到同一组。"; 26 | 27 | /* Ascending Order */ 28 | "Ascending" = "升序"; 29 | 30 | /* Adjust MaxDownloadCount */ 31 | "Button.Adjust" = "调整"; 32 | 33 | /* Cancel Action */ 34 | "Button.Cancel" = "取消"; 35 | 36 | /* Confirm Action */ 37 | "Button.Confirm" = "确定"; 38 | 39 | /* Delete Task and Related File */ 40 | "Button.Delete" = "删除"; 41 | 42 | /* Delete All Tasks */ 43 | "Button.DeleteAll" = "全部删除"; 44 | 45 | /* Exit Edit Mode */ 46 | "Button.Done" = "结束"; 47 | 48 | /* Enter Edit Mode */ 49 | "Button.Edit" = "编辑"; 50 | 51 | /* Clean All Deleted Tasks in the Trash */ 52 | "Button.Empty" = "清空"; 53 | 54 | /* Task is Finished */ 55 | "Button.Finished" = "完成"; 56 | 57 | /* Pause Download */ 58 | "Button.Pause" = "暂停"; 59 | 60 | /* Pause All Downloading Tasks */ 61 | "Button.PauseAll" = "全部暂停"; 62 | 63 | /* Pick Selected URLs */ 64 | "Button.Pick" = "选取"; 65 | 66 | /* Change File Display Name */ 67 | "Button.Rename" = "重命名"; 68 | 69 | /* Redownload the File */ 70 | "Button.Restart" = "重新下载"; 71 | 72 | /* Put Deleted Task Back to Download List */ 73 | "Button.Restore" = "恢复"; 74 | 75 | /* Resume Download */ 76 | "Button.Resume" = "继续"; 77 | 78 | /* Resume All Unfinished Tasks */ 79 | "Button.ResumeAll" = "全部开始"; 80 | 81 | /* Select All Cells */ 82 | "Button.SelectAll" = "全选"; 83 | 84 | /* Sort Download List */ 85 | "Button.Sort" = "排序"; 86 | 87 | /* Start Download */ 88 | "Button.Start" = "下载"; 89 | 90 | /* Stop Download */ 91 | "Button.Stop" = "停止"; 92 | 93 | /* Stop All Download */ 94 | "Button.StopAll" = "全部停止"; 95 | 96 | /* Deselect All Cells */ 97 | "Button.UnselectAll" = "取消全选"; 98 | 99 | /* Alert Action Title: Cancel to Restore a Task and Return */ 100 | "Cancel and Return" = "取消并返回"; 101 | 102 | /* Alert Title: Delete All Tasks */ 103 | "Delete All Files?" = "删除全部文件?"; 104 | 105 | /* Alert Title: deleteMode == .optional */ 106 | "Delete File and Record Both" = "文件和记录都删除"; 107 | 108 | /* Alert Title: deleteMode == .optional */ 109 | "Delete File Only" = "仅删除文件"; 110 | 111 | /* Alert Title: Delete Multiple Tasks */ 112 | "Delete Selected %d Files?" = "删除选中的%d个文件?"; 113 | 114 | /* Alert Title: Delete Single Task */ 115 | "Delete This File?" = "删除该文件?"; 116 | 117 | /* Delete BarButtonItem Action */ 118 | "Delete(%d)" = "删除(%d)"; 119 | 120 | /* Descending Order */ 121 | "Descending" = "降序"; 122 | 123 | /* Alert Title: Empty Trash */ 124 | "Empty Trash?" = "清空回收站?"; 125 | 126 | /* FileName Ascending Order */ 127 | "FileName Order: A -> Z" = "A -> Z"; 128 | 129 | /* FileName Descending Order */ 130 | "FileName Order: Z -> A" = "Z -> A"; 131 | 132 | /* FileSize Descending Order */ 133 | "FileSize Order: Big -> Small" = "大 -> 小"; 134 | 135 | /* FileSize Ascending Order */ 136 | "FileSize Order: Small -> Big" = "小 -> 大"; 137 | 138 | /* Audio File Type */ 139 | "FileType.Audio" = "音频"; 140 | 141 | /* Document File Type */ 142 | "FileType.Document" = "文档"; 143 | 144 | /* Image File Type */ 145 | "FileType.Image" = "图像"; 146 | 147 | /* Other File Type */ 148 | "FileType.Other" = "其它"; 149 | 150 | /* Video File Type */ 151 | "FileType.Video" = "视频"; 152 | 153 | /* PlaceHolderTitle */ 154 | "HeaderViewTitle.PlaceHolderTitle" = "标题"; 155 | 156 | /* HeaderView Title for AddTime */ 157 | "HeaderViewTitle.Sorted by Add Time" = "按添加时间排列"; 158 | 159 | /* HeaderView Title for FileName */ 160 | "HeaderViewTitle.Sorted by File Name" = "按文件名排列"; 161 | 162 | /* HeaderView Title for FileSize */ 163 | "HeaderViewTitle.Sorted by File Size" = "按文件大小排列"; 164 | 165 | /* HeaderView Title for ToDelete Tasks */ 166 | "HeaderViewTitle.Trash" = "回收站"; 167 | 168 | /* HeaderView Title for Unfinished Tasks */ 169 | "HeaderViewTitle.UnfinishedList" = "未完成列表"; 170 | 171 | /* FileName Ascending Order in Section */ 172 | "Inner Order: FileName: A -> Z" = "文件名: A -> Z"; 173 | 174 | /* FileName Descending Order in Section */ 175 | "Inner Order: FileName: Z -> A" = "文件名: Z -> A"; 176 | 177 | /* Alert Title: Input Section Title */ 178 | "Input Title for The Section" = "输入分组标题"; 179 | 180 | /* Switch Sort Mode: Manual to Predefined */ 181 | "It will lose all section titles." = "这样做将会丢失所有标题。"; 182 | 183 | /* Detele Task Alert Message: deleteMode == .optional */ 184 | "Just Delete File" = "仅删除文件"; 185 | 186 | /* Detele Task Alert Message: deleteMode == .optional */ 187 | "Keep the Record" = "保留记录"; 188 | 189 | /* Alert Title: Move Multiple Task to Trash */ 190 | "Move Selected %d Files to Trash?" = "移动选中的%d个文件到回收站?"; 191 | 192 | /* Alert Title: deleteMode == .optional */ 193 | "Move to Trash" = "移到回收站"; 194 | 195 | /* Alert Title: Move Single Task to Trash */ 196 | "Move to Trash?" = "移到回收站?"; 197 | 198 | /* Alert Title: Delete All Tasks */ 199 | "Move All Files to Trash?" = "全部移到回收站?"; 200 | 201 | /* URL is not in the download list */ 202 | "NotInList" = "NotInList"; 203 | 204 | /* Pause BarButtonItem Action */ 205 | "Pause(%d)" = "暂停(%d)"; 206 | 207 | /* Processing Temp File */ 208 | "Processing file..." = "处理文件中..."; 209 | 210 | /* Alert Title: Restart Task */ 211 | "Redownload the File?" = "重新下载该文件?"; 212 | 213 | /* Content for Cell in Restore Location */ 214 | "Restore to Here!" = "恢复到这里!"; 215 | 216 | /* Alert Title: ToDelete Task Restoration */ 217 | "Restore to Original Location?" = "恢复到原来的位置?"; 218 | 219 | /* Alert Title: Restore a Task */ 220 | "Restore to Highlighted Location?" = "恢复到高亮位置?"; 221 | 222 | /* Alert Title: Resume All Tasks */ 223 | "Resume All Tasks?" = "开始全部任务?"; 224 | 225 | /* Alert Title: Resume Multiple Tasks */ 226 | "Resume Selected Tasks?" = "开始选中的任务?"; 227 | 228 | /* Alert Title: Resume Single Task */ 229 | "Resume the Task?" = "开始该任务?"; 230 | 231 | /* Resume BarButtonItem Action */ 232 | "Resume(%d)" = "继续(%d)"; 233 | 234 | /* PlaceHolder for UITextField to Input a Section Title */ 235 | "Section Title" = "标题"; 236 | 237 | /* SortOrder Header Title */ 238 | "SortOrder" = "顺序"; 239 | 240 | /* FileType SortOrder Header Title */ 241 | "SortOrderInGroup" = "段内顺序"; 242 | 243 | /* SortType Header Title */ 244 | "SortType" = "排列方式"; 245 | 246 | /* Sort by Add Time */ 247 | "SortType.AddTime" = "添加时间"; 248 | 249 | /* Sort by File Name */ 250 | "SortType.FileName" = "文件名称"; 251 | 252 | /* Sort by File Size */ 253 | "SortType.FileSize" = "文件大小"; 254 | 255 | /* Sort by File Type */ 256 | "SortType.FileType" = "文件类型"; 257 | 258 | /* Switch to Manual Mode */ 259 | "SortType.Manual" = "手动调整"; 260 | 261 | /* Alert Title: Stop All Tasks */ 262 | "Stop All Tasks?" = "停止全部任务?"; 263 | 264 | /* Alert Title: Stop Multiple Tasks */ 265 | "Stop Selected Tasks?" = "停止选中的任务?"; 266 | 267 | /* Alert Title: Stop Single Task */ 268 | "Stop the Task?" = "停止该任务?"; 269 | 270 | /* Stop BarButtonItem Action */ 271 | "Stop(%d)" = "停止(%d)"; 272 | 273 | /* Alert Message: deleteMode == .onlyFile */ 274 | "The record will be retained." = "任务记录会被保留."; 275 | 276 | /* HeaderView Title for AddTime */ 277 | "Time.Future" = "未来的"; 278 | 279 | /* HeaderView Title for AddTime */ 280 | "Time.Today" = "今天"; 281 | 282 | /* HeaderView Title for AddTime */ 283 | "Time.Yesterday" = "昨天"; 284 | 285 | /* HeaderView Title for AddTime */ 286 | "Time.Last 7 Days" = "过去一周"; 287 | 288 | /* HeaderView Title for AddTime */ 289 | "Time.Last 30 Days" = "过去30天"; 290 | 291 | /* HeaderView Title for AddTime */ 292 | "Time.Older" = "更早的"; 293 | 294 | /* Alert Title: Change File Display Name */ 295 | "Update File Name" = "更新文件名"; 296 | 297 | /* Alert Title: Update Section Title */ 298 | "Update Section Title" = "更新标题"; 299 | 300 | /* HeaderView Title for FileSize */ 301 | "Unknown Size" = "大小未知"; 302 | 303 | /* HeaderView Title for FileSize */ 304 | "0 ~ 1 MB" = "0 ~ 1 MB"; 305 | 306 | /* HeaderView Title for FileSize */ 307 | "1 MB ~ 100 MB" = "1 MB ~ 100 MB"; 308 | 309 | /* HeaderView Title for FileSize */ 310 | "100 MB ~ 1 GB" = "100 MB ~ 1 GB"; 311 | 312 | /* HeaderView Title for FileSize */ 313 | "Larger Than 1 GB" = "大于 1 GB"; 314 | -------------------------------------------------------------------------------- /SDEDownloadManager/SDEDownloadManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // SDEDownloadManager.h 3 | // SDEDownloadManager 4 | // 5 | // Created by seedante on 5/16/17. 6 | // 7 | // Copyright (c) 2017 seedante 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in all 17 | // copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | // SOFTWARE. 26 | // 27 | 28 | 29 | #import 30 | 31 | //! Project version number for SDEDownloadManager. 32 | FOUNDATION_EXPORT double SDEDownloadManagerVersionNumber; 33 | 34 | //! Project version string for SDEDownloadManager. 35 | FOUNDATION_EXPORT const unsigned char SDEDownloadManagerVersionString[]; 36 | 37 | // In this header, you should import all the public headers of your framework using statements like #import 38 | 39 | 40 | -------------------------------------------------------------------------------- /SDEDownloadManager/SDEDownloadManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SDEDownloadManager/SDEDownloadManager.xcodeproj/xcshareddata/xcschemes/SDEDownloadManager.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 32 | 33 | 34 | 35 | 36 | 37 | 48 | 49 | 55 | 56 | 57 | 58 | 59 | 60 | 66 | 67 | 73 | 74 | 75 | 76 | 78 | 79 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // SwiftDMDemo 4 | // 5 | // Created by seedante on 7/26/17. 6 | // 7 | // Copyright (c) 2017 seedante 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in all 17 | // copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | // SOFTWARE. 26 | // 27 | 28 | import UIKit 29 | 30 | @UIApplicationMain 31 | class AppDelegate: UIResponder, UIApplicationDelegate { 32 | 33 | var window: UIWindow? 34 | 35 | 36 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 37 | // Override point for customization after application launch. 38 | application.registerUserNotificationSettings(UIUserNotificationSettings.init(types: .alert, categories: nil)) 39 | return true 40 | } 41 | 42 | func applicationWillResignActive(_ application: UIApplication) { 43 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 44 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 45 | } 46 | 47 | func applicationDidEnterBackground(_ application: UIApplication) { 48 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 49 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 50 | } 51 | 52 | func applicationWillEnterForeground(_ application: UIApplication) { 53 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 54 | } 55 | 56 | func applicationDidBecomeActive(_ application: UIApplication) { 57 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 58 | } 59 | 60 | func applicationWillTerminate(_ application: UIApplication) { 61 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 62 | } 63 | 64 | func application(_ application: UIApplication, didReceive notification: UILocalNotification) { 65 | // NSLog("\(#function)") 66 | } 67 | 68 | var updateScreenshotHandler: (() -> Void)? 69 | func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void){ 70 | NSLog("\(#function)") 71 | updateScreenshotHandler = completionHandler 72 | } 73 | } 74 | 75 | 76 | -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon29@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon20.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon20@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon29.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon29@2x-1.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon40.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon76.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "idiom" : "ios-marketing", 107 | "size" : "1024x1024", 108 | "scale" : "1x" 109 | } 110 | ], 111 | "info" : { 112 | "version" : 1, 113 | "author" : "xcode" 114 | } 115 | } -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x-1.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@2x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon20@3x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x-1.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@2x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon29@3x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x-1.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@2x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon40@3x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@2x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon60@3x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon76@2x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/SwiftDemo/DownloadManagerDemo/Assets.xcassets/AppIcon.appiconset/Icon83.5@2x.png -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /SwiftDemo/DownloadManagerDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | SwiftDMDemo 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleLocalizations 16 | 17 | en 18 | zh 19 | ja 20 | 21 | CFBundleName 22 | $(PRODUCT_NAME) 23 | CFBundlePackageType 24 | APPL 25 | CFBundleShortVersionString 26 | 1.0 27 | CFBundleVersion 28 | 1 29 | LSRequiresIPhoneOS 30 | 31 | NSAppTransportSecurity 32 | 33 | NSAllowsArbitraryLoads 34 | 35 | NSExceptionDomains 36 | 37 | devstreaming.apple.com 38 | 39 | NSExceptionAllowsInsecureHTTPLoads 40 | 41 | NSIncludesSubdomains 42 | 43 | 44 | 45 | 46 | UILaunchStoryboardName 47 | LaunchScreen 48 | UIMainStoryboardFile 49 | Main 50 | UIRequiredDeviceCapabilities 51 | 52 | armv7 53 | 54 | UISupportedInterfaceOrientations 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationLandscapeLeft 58 | UIInterfaceOrientationLandscapeRight 59 | 60 | UISupportedInterfaceOrientations~ipad 61 | 62 | UIInterfaceOrientationPortrait 63 | UIInterfaceOrientationPortraitUpsideDown 64 | UIInterfaceOrientationLandscapeLeft 65 | UIInterfaceOrientationLandscapeRight 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /SwiftDemo/SwiftDMDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

SDEDownloadManager Docs (100% documented)

17 |

View on GitHub

18 |

Install in Dash

19 |
20 |
21 |
22 | 27 |
28 |
29 | 116 |
117 |
118 |
119 |

Extensions

120 |

The following extensions are available globally.

121 | 122 |
123 |
124 |
125 | 132 |
    133 |
  • 134 |
    135 | 136 | 137 | 138 | URLSessionTask 139 | 140 |
    141 |
    142 |
    143 |
    144 |
    145 |
    146 | 147 | See more 148 |
    149 |
    150 |
    151 |
  • 152 |
  • 153 |
    154 | 155 | 156 | 157 | String 158 | 159 |
    160 |
    161 |
    162 |
    163 |
    164 |
    165 | 166 | See more 167 |
    168 |
    169 |

    Declaration

    170 |
    171 |

    Swift

    172 |
    struct String
    173 | 174 |
    175 |
    176 |
    177 |
    178 |
  • 179 |
180 |
181 |
182 |
183 | 187 |
188 |
189 | 190 | 191 | 192 | -------------------------------------------------------------------------------- /docs/Extensions/String.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | String Extension Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

SDEDownloadManager Docs (100% documented)

18 |

View on GitHub

19 |

Install in Dash

20 |
21 |
22 |
23 | 28 |
29 |
30 | 117 |
118 |
119 |
120 |

String

121 |
122 |
123 |
struct String
124 | 125 |
126 |
127 | 128 |
129 |
130 |
131 |
    132 |
  • 133 |
    134 | 135 | 136 | 137 | percentEncodingURLQueryString 138 | 139 |
    140 |
    141 |
    142 |
    143 |
    144 |
    145 |

    Returns a new string made from original string by replacing all characters not allowed in a query URL component.

    146 | 147 |
    148 |
    149 |

    Declaration

    150 |
    151 |

    Swift

    152 |
    public var percentEncodingURLQueryString: String?
    153 | 154 |
    155 |
    156 |
    157 |
    158 |
  • 159 |
160 |
161 |
162 |
163 | 167 |
168 |
169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /docs/Extensions/URLSessionTask.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | URLSessionTask Extension Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

SDEDownloadManager Docs (100% documented)

18 |

View on GitHub

19 |

Install in Dash

20 |
21 |
22 |
23 | 28 |
29 |
30 | 117 |
118 |
119 |
120 |

URLSessionTask

121 | 122 |
123 |
124 |
125 |
    126 |
  • 127 |
    128 | 129 | 130 | 131 | originalURLString 132 | 133 |
    134 |
    135 |
    136 |
    137 |
    138 |
    139 |

    Returns a URL string from original URL request.

    140 | 141 |
    142 |
    143 |

    Declaration

    144 |
    145 |

    Swift

    146 |
    public var originalURLString: String?
    147 | 148 |
    149 |
    150 |
    151 |
    152 |
  • 153 |
  • 154 |
    155 | 156 | 157 | 158 | currentURLString 159 | 160 |
    161 |
    162 |
    163 |
    164 |
    165 |
    166 |

    Returns a URL string from current URL request.

    167 | 168 |
    169 |
    170 |

    Declaration

    171 |
    172 |

    Swift

    173 |
    public var currentURLString: String?
    174 | 175 |
    176 |
    177 |
    178 |
    179 |
  • 180 |
181 |
182 |
183 |
184 | 188 |
189 |
190 | 191 | 192 | 193 | -------------------------------------------------------------------------------- /docs/badge.svg: -------------------------------------------------------------------------------- 1 | documentationdocumentation100%100% -------------------------------------------------------------------------------- /docs/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 60px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | 173 | .section { 174 | padding: 0 25px; } 175 | 176 | .highlight { 177 | background-color: #eee; 178 | padding: 10px 12px; 179 | border: 1px solid #e2e2e2; 180 | border-radius: 4px; 181 | overflow-x: auto; } 182 | 183 | .declaration .highlight { 184 | overflow-x: initial; 185 | padding: 0 40px 40px 0; 186 | margin-bottom: -25px; 187 | background-color: transparent; 188 | border: none; } 189 | 190 | .section-name { 191 | margin: 0; 192 | margin-left: 18px; } 193 | 194 | .task-group-section { 195 | padding-left: 6px; 196 | border-top: 1px solid #e2e2e2; } 197 | 198 | .task-group { 199 | padding-top: 0px; } 200 | 201 | .task-name-container a[name]:before { 202 | content: ""; 203 | display: block; 204 | padding-top: 70px; 205 | margin: -70px 0 0; } 206 | 207 | .item { 208 | padding-top: 8px; 209 | width: 100%; 210 | list-style-type: none; } 211 | .item a[name]:before { 212 | content: ""; 213 | display: block; 214 | padding-top: 70px; 215 | margin: -70px 0 0; } 216 | .item code { 217 | background-color: transparent; 218 | padding: 0; } 219 | .item .token { 220 | padding-left: 3px; 221 | margin-left: 15px; 222 | font-size: 11.9px; } 223 | .item .declaration-note { 224 | font-size: .85em; 225 | color: gray; 226 | font-style: italic; } 227 | 228 | .pointer-container { 229 | border-bottom: 1px solid #e2e2e2; 230 | left: -23px; 231 | padding-bottom: 13px; 232 | position: relative; 233 | width: 110%; } 234 | 235 | .pointer { 236 | background: #f9f9f9; 237 | border-left: 1px solid #e2e2e2; 238 | border-top: 1px solid #e2e2e2; 239 | height: 12px; 240 | left: 21px; 241 | top: -7px; 242 | -webkit-transform: rotate(45deg); 243 | -moz-transform: rotate(45deg); 244 | -o-transform: rotate(45deg); 245 | transform: rotate(45deg); 246 | position: absolute; 247 | width: 12px; } 248 | 249 | .height-container { 250 | display: none; 251 | left: -25px; 252 | padding: 0 25px; 253 | position: relative; 254 | width: 100%; 255 | overflow: hidden; } 256 | .height-container .section { 257 | background: #f9f9f9; 258 | border-bottom: 1px solid #e2e2e2; 259 | left: -25px; 260 | position: relative; 261 | width: 100%; 262 | padding-top: 10px; 263 | padding-bottom: 5px; } 264 | 265 | .aside, .language { 266 | padding: 6px 12px; 267 | margin: 12px 0; 268 | border-left: 5px solid #dddddd; 269 | overflow-y: hidden; } 270 | .aside .aside-title, .language .aside-title { 271 | font-size: 9px; 272 | letter-spacing: 2px; 273 | text-transform: uppercase; 274 | padding-bottom: 0; 275 | margin: 0; 276 | color: #aaa; 277 | -webkit-user-select: none; } 278 | .aside p:last-child, .language p:last-child { 279 | margin-bottom: 0; } 280 | 281 | .language { 282 | border-left: 5px solid #cde9f4; } 283 | .language .aside-title { 284 | color: #4b8afb; } 285 | 286 | .aside-warning { 287 | border-left: 5px solid #ff6666; } 288 | .aside-warning .aside-title { 289 | color: #ff0000; } 290 | 291 | .graybox { 292 | border-collapse: collapse; 293 | width: 100%; } 294 | .graybox p { 295 | margin: 0; 296 | word-break: break-word; 297 | min-width: 50px; } 298 | .graybox td { 299 | border: 1px solid #e2e2e2; 300 | padding: 5px 25px 5px 10px; 301 | vertical-align: middle; } 302 | .graybox tr td:first-of-type { 303 | text-align: right; 304 | padding: 7px; 305 | vertical-align: top; 306 | word-break: normal; 307 | width: 40px; } 308 | 309 | .slightly-smaller { 310 | font-size: 0.9em; } 311 | 312 | #footer { 313 | position: absolute; 314 | bottom: 10px; 315 | margin-left: 25px; } 316 | #footer p { 317 | margin: 0; 318 | color: #aaa; 319 | font-size: 0.8em; } 320 | 321 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 322 | display: none; } 323 | html.dash .main-content { 324 | width: 980px; 325 | margin-left: 0; 326 | border: none; 327 | width: 100%; 328 | top: 0; 329 | padding-bottom: 0; } 330 | html.dash .height-container { 331 | display: block; } 332 | html.dash .item .token { 333 | margin-left: 0; } 334 | html.dash .content-wrapper { 335 | width: auto; } 336 | html.dash #footer { 337 | position: static; } 338 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy.sdedownloadmanager 7 | CFBundleName 8 | SDEDownloadManager 9 | DocSetPlatformFamily 10 | sdedownloadmanager 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

SDEDownloadManager Docs (100% documented)

17 |

View on GitHub

18 |

Install in Dash

19 |
20 |
21 |
22 | 27 |
28 |
29 | 116 |
117 |
118 |
119 |

Extensions

120 |

The following extensions are available globally.

121 | 122 |
123 |
124 |
125 | 132 |
    133 |
  • 134 |
    135 | 136 | 137 | 138 | URLSessionTask 139 | 140 |
    141 |
    142 |
    143 |
    144 |
    145 |
    146 | 147 | See more 148 |
    149 |
    150 |
    151 |
  • 152 |
  • 153 |
    154 | 155 | 156 | 157 | String 158 | 159 |
    160 |
    161 |
    162 |
    163 |
    164 |
    165 | 166 | See more 167 |
    168 |
    169 |

    Declaration

    170 |
    171 |

    Swift

    172 |
    struct String
    173 | 174 |
    175 |
    176 |
    177 |
    178 |
  • 179 |
180 |
181 |
182 |
183 | 187 |
188 |
189 | 190 | 191 | 192 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/Extensions/String.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | String Extension Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

SDEDownloadManager Docs (100% documented)

18 |

View on GitHub

19 |

Install in Dash

20 |
21 |
22 |
23 | 28 |
29 |
30 | 117 |
118 |
119 |
120 |

String

121 |
122 |
123 |
struct String
124 | 125 |
126 |
127 | 128 |
129 |
130 |
131 |
    132 |
  • 133 |
    134 | 135 | 136 | 137 | percentEncodingURLQueryString 138 | 139 |
    140 |
    141 |
    142 |
    143 |
    144 |
    145 |

    Returns a new string made from original string by replacing all characters not allowed in a query URL component.

    146 | 147 |
    148 |
    149 |

    Declaration

    150 |
    151 |

    Swift

    152 |
    public var percentEncodingURLQueryString: String?
    153 | 154 |
    155 |
    156 |
    157 |
    158 |
  • 159 |
160 |
161 |
162 |
163 | 167 |
168 |
169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/badge.svg: -------------------------------------------------------------------------------- 1 | documentationdocumentation100%100% -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 60px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | 173 | .section { 174 | padding: 0 25px; } 175 | 176 | .highlight { 177 | background-color: #eee; 178 | padding: 10px 12px; 179 | border: 1px solid #e2e2e2; 180 | border-radius: 4px; 181 | overflow-x: auto; } 182 | 183 | .declaration .highlight { 184 | overflow-x: initial; 185 | padding: 0 40px 40px 0; 186 | margin-bottom: -25px; 187 | background-color: transparent; 188 | border: none; } 189 | 190 | .section-name { 191 | margin: 0; 192 | margin-left: 18px; } 193 | 194 | .task-group-section { 195 | padding-left: 6px; 196 | border-top: 1px solid #e2e2e2; } 197 | 198 | .task-group { 199 | padding-top: 0px; } 200 | 201 | .task-name-container a[name]:before { 202 | content: ""; 203 | display: block; 204 | padding-top: 70px; 205 | margin: -70px 0 0; } 206 | 207 | .item { 208 | padding-top: 8px; 209 | width: 100%; 210 | list-style-type: none; } 211 | .item a[name]:before { 212 | content: ""; 213 | display: block; 214 | padding-top: 70px; 215 | margin: -70px 0 0; } 216 | .item code { 217 | background-color: transparent; 218 | padding: 0; } 219 | .item .token { 220 | padding-left: 3px; 221 | margin-left: 15px; 222 | font-size: 11.9px; } 223 | .item .declaration-note { 224 | font-size: .85em; 225 | color: gray; 226 | font-style: italic; } 227 | 228 | .pointer-container { 229 | border-bottom: 1px solid #e2e2e2; 230 | left: -23px; 231 | padding-bottom: 13px; 232 | position: relative; 233 | width: 110%; } 234 | 235 | .pointer { 236 | background: #f9f9f9; 237 | border-left: 1px solid #e2e2e2; 238 | border-top: 1px solid #e2e2e2; 239 | height: 12px; 240 | left: 21px; 241 | top: -7px; 242 | -webkit-transform: rotate(45deg); 243 | -moz-transform: rotate(45deg); 244 | -o-transform: rotate(45deg); 245 | transform: rotate(45deg); 246 | position: absolute; 247 | width: 12px; } 248 | 249 | .height-container { 250 | display: none; 251 | left: -25px; 252 | padding: 0 25px; 253 | position: relative; 254 | width: 100%; 255 | overflow: hidden; } 256 | .height-container .section { 257 | background: #f9f9f9; 258 | border-bottom: 1px solid #e2e2e2; 259 | left: -25px; 260 | position: relative; 261 | width: 100%; 262 | padding-top: 10px; 263 | padding-bottom: 5px; } 264 | 265 | .aside, .language { 266 | padding: 6px 12px; 267 | margin: 12px 0; 268 | border-left: 5px solid #dddddd; 269 | overflow-y: hidden; } 270 | .aside .aside-title, .language .aside-title { 271 | font-size: 9px; 272 | letter-spacing: 2px; 273 | text-transform: uppercase; 274 | padding-bottom: 0; 275 | margin: 0; 276 | color: #aaa; 277 | -webkit-user-select: none; } 278 | .aside p:last-child, .language p:last-child { 279 | margin-bottom: 0; } 280 | 281 | .language { 282 | border-left: 5px solid #cde9f4; } 283 | .language .aside-title { 284 | color: #4b8afb; } 285 | 286 | .aside-warning { 287 | border-left: 5px solid #ff6666; } 288 | .aside-warning .aside-title { 289 | color: #ff0000; } 290 | 291 | .graybox { 292 | border-collapse: collapse; 293 | width: 100%; } 294 | .graybox p { 295 | margin: 0; 296 | word-break: break-word; 297 | min-width: 50px; } 298 | .graybox td { 299 | border: 1px solid #e2e2e2; 300 | padding: 5px 25px 5px 10px; 301 | vertical-align: middle; } 302 | .graybox tr td:first-of-type { 303 | text-align: right; 304 | padding: 7px; 305 | vertical-align: top; 306 | word-break: normal; 307 | width: 40px; } 308 | 309 | .slightly-smaller { 310 | font-size: 0.9em; } 311 | 312 | #footer { 313 | position: absolute; 314 | bottom: 10px; 315 | margin-left: 25px; } 316 | #footer p { 317 | margin: 0; 318 | color: #aaa; 319 | font-size: 0.8em; } 320 | 321 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 322 | display: none; } 323 | html.dash .main-content { 324 | width: 980px; 325 | margin-left: 0; 326 | border: none; 327 | width: 100%; 328 | top: 0; 329 | padding-bottom: 0; } 330 | html.dash .height-container { 331 | display: block; } 332 | html.dash .item .token { 333 | margin-left: 0; } 334 | html.dash .content-wrapper { 335 | width: auto; } 336 | html.dash #footer { 337 | position: static; } 338 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | // On doc load, toggle the URL hash discussion if present 12 | $(document).ready(function() { 13 | if (!window.jazzy.docset) { 14 | var linkToHash = $('a[href="' + window.location.hash +'"]'); 15 | linkToHash.trigger("click"); 16 | } 17 | }); 18 | 19 | // On token click, toggle its discussion and animate token.marginLeft 20 | $(".token").click(function(event) { 21 | if (window.jazzy.docset) { 22 | return; 23 | } 24 | var link = $(this); 25 | var animationDuration = 300; 26 | var tokenOffset = "15px"; 27 | var original = link.css('marginLeft') == tokenOffset; 28 | link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); 29 | $content = link.parent().parent().next(); 30 | $content.slideToggle(animationDuration); 31 | 32 | // Keeps the document from jumping to the hash. 33 | var href = $(this).attr('href'); 34 | if (history.pushState) { 35 | history.pushState({}, '', href); 36 | } else { 37 | location.hash = href; 38 | } 39 | event.preventDefault(); 40 | }); 41 | 42 | // Dumb down quotes within code blocks that delimit strings instead of quotations 43 | // https://github.com/realm/jazzy/issues/714 44 | $("code q").replaceWith(function () { 45 | return ["\"", $(this).contents(), "\""]; 46 | }); 47 | -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/Documents/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/seedante/Dev/OpenSource/SDEDownloadManager/SDEDownloadManager" 6 | } -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/docsets/SDEDownloadManager.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/docsets/SDEDownloadManager.tgz -------------------------------------------------------------------------------- /docs/docsets/SDEDownloadManager.xml: -------------------------------------------------------------------------------- 1 | 0.9.0https://seedante.github.io/SDEDownloadManager/docsets/SDEDownloadManager.tgz 2 | -------------------------------------------------------------------------------- /docs/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/img/carat.png -------------------------------------------------------------------------------- /docs/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/img/dash.png -------------------------------------------------------------------------------- /docs/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seedante/SDEDownloadManager/5b0d194d64d40afe4bb645511c4974eb01655f88/docs/img/gh.png -------------------------------------------------------------------------------- /docs/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | // On doc load, toggle the URL hash discussion if present 12 | $(document).ready(function() { 13 | if (!window.jazzy.docset) { 14 | var linkToHash = $('a[href="' + window.location.hash +'"]'); 15 | linkToHash.trigger("click"); 16 | } 17 | }); 18 | 19 | // On token click, toggle its discussion and animate token.marginLeft 20 | $(".token").click(function(event) { 21 | if (window.jazzy.docset) { 22 | return; 23 | } 24 | var link = $(this); 25 | var animationDuration = 300; 26 | var tokenOffset = "15px"; 27 | var original = link.css('marginLeft') == tokenOffset; 28 | link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); 29 | $content = link.parent().parent().next(); 30 | $content.slideToggle(animationDuration); 31 | 32 | // Keeps the document from jumping to the hash. 33 | var href = $(this).attr('href'); 34 | if (history.pushState) { 35 | history.pushState({}, '', href); 36 | } else { 37 | location.hash = href; 38 | } 39 | event.preventDefault(); 40 | }); 41 | 42 | // Dumb down quotes within code blocks that delimit strings instead of quotations 43 | // https://github.com/realm/jazzy/issues/714 44 | $("code q").replaceWith(function () { 45 | return ["\"", $(this).contents(), "\""]; 46 | }); 47 | --------------------------------------------------------------------------------