From be38e2731deffd49fcb237d4161e94b86aa86ec1 Mon Sep 17 00:00:00 2001 From: Amir Abbas Date: Fri, 2 Mar 2018 11:51:19 +0330 Subject: [PATCH] Addded discardableResult --- Sources/CloudFileProvider.swift | 1 + Sources/DropboxFileProvider.swift | 5 ++++- Sources/ExtendedLocalFileProvider.swift | 2 ++ Sources/FTPFileProvider.swift | 12 +++++++++--- Sources/HTTPFileProvider.swift | 11 +++++++++++ Sources/LocalFileProvider.swift | 6 ++---- Sources/OneDriveFileProvider.swift | 5 +++++ Sources/WebDAVFileProvider.swift | 4 ++++ 8 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Sources/CloudFileProvider.swift b/Sources/CloudFileProvider.swift index 1309a59..5a7c775 100644 --- a/Sources/CloudFileProvider.swift +++ b/Sources/CloudFileProvider.swift @@ -192,6 +192,7 @@ open class CloudFileProvider: LocalFileProvider, FileProviderSharing { - error: `Error` returned by server if occured. - Returns: An `Progress` to get progress or cancel progress. Use `completedUnitCount` to iterate count of found items. */ + @discardableResult open override func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { let progress = Progress(totalUnitCount: -1) diff --git a/Sources/DropboxFileProvider.swift b/Sources/DropboxFileProvider.swift index 94b828c..0a8f7b9 100644 --- a/Sources/DropboxFileProvider.swift +++ b/Sources/DropboxFileProvider.swift @@ -153,6 +153,7 @@ open class DropboxFileProvider: HTTPFileProvider, FileProviderSharing { - error: `Error` returned by server if occured. - Returns: An `Progress` to get progress or cancel progress. Use `completedUnitCount` to iterate count of found items. */ + @discardableResult open override func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { let queryStr: String? if query.predicateFormat == "TRUEPREDICATE" { @@ -292,7 +293,7 @@ open class DropboxFileProvider: HTTPFileProvider, FileProviderSharing { } */ // TODO: Implement /get_account & /get_current_account - + open func publicLink(to path: String, completionHandler: @escaping ((_ link: URL?, _ attribute: FileObject?, _ expiration: Date?, _ error: Error?) -> Void)) { let url = URL(string: "files/get_temporary_link", relativeTo: apiURL)! var request = URLRequest(url: url) @@ -403,6 +404,7 @@ extension DropboxFileProvider: ExtendedFileProvider { } } + @discardableResult open func propertiesOfFile(path: String, completionHandler: @escaping ((_ propertiesDictionary: [String : Any], _ keys: [String], _ error: Error?) -> Void)) -> Progress? { let url = URL(string: "files/get_metadata", relativeTo: apiURL)! var request = URLRequest(url: url) @@ -445,6 +447,7 @@ extension DropboxFileProvider: ExtendedFileProvider { } /// Default value for dimension is 64x64, according to Dropbox documentation + @discardableResult open func thumbnailOfFile(path: String, dimension: CGSize?, completionHandler: @escaping ((_ image: ImageClass?, _ error: Error?) -> Void)) -> Progress? { let url: URL let thumbAPI: Bool diff --git a/Sources/ExtendedLocalFileProvider.swift b/Sources/ExtendedLocalFileProvider.swift index 860761f..ec36f64 100644 --- a/Sources/ExtendedLocalFileProvider.swift +++ b/Sources/ExtendedLocalFileProvider.swift @@ -55,6 +55,7 @@ extension LocalFileProvider: ExtendedFileProvider { } } + @discardableResult open func thumbnailOfFile(path: String, dimension: CGSize? = nil, completionHandler: @escaping ((_ image: ImageClass?, _ error: Error?) -> Void)) -> Progress? { let dimension = dimension ?? CGSize(width: 64, height: 64) (dispatch_queue).async { @@ -88,6 +89,7 @@ extension LocalFileProvider: ExtendedFileProvider { return nil } + @discardableResult open func propertiesOfFile(path: String, completionHandler: @escaping ((_ propertiesDictionary: [String: Any], _ keys: [String], _ error: Error?) -> Void)) -> Progress? { (dispatch_queue).async { let fileExt = (path as NSString).pathExtension.lowercased() diff --git a/Sources/FTPFileProvider.swift b/Sources/FTPFileProvider.swift index 9ea5059..46dad1a 100644 --- a/Sources/FTPFileProvider.swift +++ b/Sources/FTPFileProvider.swift @@ -15,9 +15,6 @@ import Foundation open class FTPFileProvider: FileProviderBasicRemote, FileProviderOperations, FileProviderReadWrite { open class var type: String { return "FTP" } open let baseURL: URL? - /// **OBSOLETED** Current active path used in `contentsOfDirectory(path:completionHandler:)` method. - @available(*, obsoleted: 0.22, message: "This property is redundant with almost no use internally.") - open var currentPath: String = "" open var dispatch_queue: DispatchQueue open var operation_queue: OperationQueue { @@ -284,6 +281,7 @@ open class FTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fil } } + @discardableResult open func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { let progress = Progress(totalUnitCount: -1) if recursive { @@ -353,23 +351,28 @@ open class FTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fil open weak var fileOperationDelegate: FileOperationDelegate? + @discardableResult open func create(folder folderName: String, at atPath: String, completionHandler: SimpleCompletionHandler) -> Progress? { let path = (atPath as NSString).appendingPathComponent(folderName) + "/" return doOperation(.create(path: path), completionHandler: completionHandler) } + @discardableResult open func moveItem(path: String, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { return doOperation(.move(source: path, destination: toPath), completionHandler: completionHandler) } + @discardableResult open func copyItem(path: String, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { return doOperation(.copy(source: path, destination: toPath), completionHandler: completionHandler) } + @discardableResult open func removeItem(path: String, completionHandler: SimpleCompletionHandler) -> Progress? { return doOperation(.remove(path: path), completionHandler: completionHandler) } + @discardableResult open func copyItem(localFile: URL, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { // check file is not a folder guard (try? localFile.resourceValues(forKeys: [.fileResourceTypeKey]))?.fileResourceType ?? .unknown == .regular else { @@ -424,6 +427,7 @@ open class FTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fil return progress } + @discardableResult open func copyItem(path: String, toLocalURL destURL: URL, completionHandler: SimpleCompletionHandler) -> Progress? { let operation = FileOperationType.copy(source: path, destination: destURL.absoluteString) guard fileOperationDelegate?.fileProvider(self, shouldDoOperation: operation) ?? true == true else { @@ -475,6 +479,7 @@ open class FTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fil return progress } + @discardableResult open func contents(path: String, offset: Int64, length: Int, completionHandler: @escaping ((_ contents: Data?, _ error: Error?) -> Void)) -> Progress? { let operation = FileOperationType.fetch(path: path) if length == 0 || offset < 0 { @@ -530,6 +535,7 @@ open class FTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fil return progress } + @discardableResult open func writeContents(path: String, contents data: Data?, atomically: Bool, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { let operation = FileOperationType.modify(path: path) guard fileOperationDelegate?.fileProvider(self, shouldDoOperation: operation) ?? true == true else { diff --git a/Sources/HTTPFileProvider.swift b/Sources/HTTPFileProvider.swift index 185b37e..af14712 100644 --- a/Sources/HTTPFileProvider.swift +++ b/Sources/HTTPFileProvider.swift @@ -148,6 +148,7 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi fatalError("HTTPFileProvider is an abstract class. Please implement \(#function) in subclass.") } + @discardableResult open func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { fatalError("HTTPFileProvider is an abstract class. Please implement \(#function) in subclass.") } @@ -191,23 +192,28 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi open weak var fileOperationDelegate: FileOperationDelegate? + @discardableResult open func create(folder folderName: String, at atPath: String, completionHandler: SimpleCompletionHandler) -> Progress? { let path = (atPath as NSString).appendingPathComponent(folderName) + "/" return doOperation(.create(path: path), completionHandler: completionHandler) } + @discardableResult open func moveItem(path: String, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { return doOperation(.move(source: path, destination: toPath), overwrite: overwrite, completionHandler: completionHandler) } + @discardableResult open func copyItem(path: String, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { return doOperation(.copy(source: path, destination: toPath), overwrite: overwrite, completionHandler: completionHandler) } + @discardableResult open func removeItem(path: String, completionHandler: SimpleCompletionHandler) -> Progress? { return doOperation(.remove(path: path), completionHandler: completionHandler) } + @discardableResult open func copyItem(localFile: URL, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { // check file is not a folder guard (try? localFile.resourceValues(forKeys: [.fileResourceTypeKey]))?.fileResourceType ?? .unknown == .regular else { @@ -225,6 +231,7 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi return upload_file(toPath, request: request, localFile: localFile, operation: operation, completionHandler: completionHandler) } + @discardableResult open func copyItem(path: String, toLocalURL destURL: URL, completionHandler: SimpleCompletionHandler) -> Progress? { let operation = FileOperationType.copy(source: path, destination: destURL.absoluteString) let request = self.request(for: operation) @@ -275,6 +282,7 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi - error: `Error` returned by system if occured. - Returns: An `Progress` to get progress or cancel progress. */ + @discardableResult open func contents(path: String, offset: Int64 = 0, responseHandler: ((_ response: URLResponse) -> Void)? = nil, progressHandler: @escaping (_ position: Int64, _ data: Data) -> Void, completionHandler: SimpleCompletionHandler) -> Progress? { let operation = FileOperationType.fetch(path: path) var request = self.request(for: operation) @@ -288,6 +296,7 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi }, completionHandler: (completionHandler ?? { _ in return })) } + @discardableResult open func contents(path: String, offset: Int64, length: Int, completionHandler: @escaping ((_ contents: Data?, _ error: Error?) -> Void)) -> Progress? { if length == 0 || offset < 0 { dispatch_queue.async { @@ -318,6 +327,7 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi }) } + @discardableResult open func writeContents(path: String, contents data: Data?, atomically: Bool, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { let operation = FileOperationType.modify(path: path) guard fileOperationDelegate?.fileProvider(self, shouldDoOperation: operation) ?? true == true else { @@ -347,6 +357,7 @@ open class HTTPFileProvider: FileProviderBasicRemote, FileProviderOperations, Fi In case you have to call super method asyncronously, create a `Progress` object and pass ot to `progress` parameter. */ + @discardableResult internal func doOperation(_ operation: FileOperationType, overwrite: Bool = false, progress: Progress? = nil, completionHandler: SimpleCompletionHandler) -> Progress? { guard fileOperationDelegate?.fileProvider(self, shouldDoOperation: operation) ?? true == true else { diff --git a/Sources/LocalFileProvider.swift b/Sources/LocalFileProvider.swift index c66a85b..51938fb 100644 --- a/Sources/LocalFileProvider.swift +++ b/Sources/LocalFileProvider.swift @@ -17,9 +17,6 @@ import Foundation open class LocalFileProvider: FileProvider, FileProviderMonitor, FileProvideUndoable { open class var type: String { return "Local" } open fileprivate(set) var baseURL: URL? - /// **OBSOLETED** Current active path used in `contentsOfDirectory(path:completionHandler:)` method. - @available(*, obsoleted: 0.21, message: "This property is redundant with almost no use internally.") - open var currentPath: String = "" open var dispatch_queue: DispatchQueue open var operation_queue: OperationQueue open weak var delegate: FileProviderDelegate? @@ -134,7 +131,7 @@ open class LocalFileProvider: FileProvider, FileProviderMonitor, FileProvideUndo } open func encode(with aCoder: NSCoder) { - aCoder.encode(self.baseURL, forKey: "currentPath") + aCoder.encode(self.baseURL, forKey: "baseURL") aCoder.encode(self.isCoorinating, forKey: "isCoorinating") } @@ -183,6 +180,7 @@ open class LocalFileProvider: FileProvider, FileProviderMonitor, FileProvideUndo } } + @discardableResult open func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { let progress = Progress(totalUnitCount: -1) progress.setUserInfoObject(self.url(of: path), forKey: .fileURLKey) diff --git a/Sources/OneDriveFileProvider.swift b/Sources/OneDriveFileProvider.swift index 3f87ac3..860a0b0 100644 --- a/Sources/OneDriveFileProvider.swift +++ b/Sources/OneDriveFileProvider.swift @@ -288,6 +288,7 @@ open class OneDriveFileProvider: HTTPFileProvider, FileProviderSharing { - error: `Error` returned by server if occured. - Returns: An `Progress` to get progress or cancel progress. Use `completedUnitCount` to iterate count of found items. */ + @discardableResult open override func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { let queryStr = query.findValue(forKey: "name") as? String ?? query.findAllValues(forKey: nil).flatMap { $0.value as? String }.first @@ -374,6 +375,7 @@ open class OneDriveFileProvider: HTTPFileProvider, FileProviderSharing { - completionHandler: If an error parameter was provided, a presentable `Error` will be returned. - Returns: An `Progress` to get progress or cancel progress. */ + @discardableResult open override func copyItem(localFile: URL, to toPath: String, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { // check file is not a folder guard (try? localFile.resourceValues(forKeys: [.fileResourceTypeKey]))?.fileResourceType ?? .unknown == .regular else { @@ -401,6 +403,7 @@ open class OneDriveFileProvider: HTTPFileProvider, FileProviderSharing { - completionHandler: If an error parameter was provided, a presentable `Error` will be returned. - Returns: An `Progress` to get progress or cancel progress. Doesn't work on `LocalFileProvider`. */ + @discardableResult open override func writeContents(path: String, contents data: Data?, atomically: Bool, overwrite: Bool, completionHandler: SimpleCompletionHandler) -> Progress? { let operation = FileOperationType.modify(path: path) guard fileOperationDelegate?.fileProvider(self, shouldDoOperation: operation) ?? true == true else { @@ -558,6 +561,7 @@ extension OneDriveFileProvider: ExtendedFileProvider { return true } + @discardableResult open func propertiesOfFile(path: String, completionHandler: @escaping ((_ propertiesDictionary: [String : Any], _ keys: [String], _ error: Error?) -> Void)) -> Progress? { var request = URLRequest(url: url(of: path)) request.httpMethod = "GET" @@ -596,6 +600,7 @@ extension OneDriveFileProvider: ExtendedFileProvider { } } + @discardableResult open func thumbnailOfFile(path: String, dimension: CGSize?, completionHandler: @escaping ((_ image: ImageClass?, _ error: Error?) -> Void)) -> Progress? { let thumbQuery: String switch dimension.map( {max($0.width, $0.height) } ) ?? 0 { diff --git a/Sources/WebDAVFileProvider.swift b/Sources/WebDAVFileProvider.swift index af91f89..784827f 100644 --- a/Sources/WebDAVFileProvider.swift +++ b/Sources/WebDAVFileProvider.swift @@ -190,6 +190,7 @@ open class WebDAVFileProvider: HTTPFileProvider, FileProviderSharing { - error: `Error` returned by server if occured. - Returns: An `Progress` to get progress or cancel progress. Use `completedUnitCount` to iterate count of found items. */ + @discardableResult open override func searchFiles(path: String, recursive: Bool, query: NSPredicate, foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping ([FileObject], Error?) -> Void) -> Progress? { return searchFiles(path: path, recursive: recursive, query: query, including: [], foundItemHandler: foundItemHandler, completionHandler: completionHandler) } @@ -219,6 +220,7 @@ open class WebDAVFileProvider: HTTPFileProvider, FileProviderSharing { - error: `Error` returned by server if occured. - Returns: An `Progress` to get progress or cancel progress. Use `completedUnitCount` to iterate count of found items. */ + @discardableResult open func searchFiles(path: String, recursive: Bool, query: NSPredicate, including: [URLResourceKey], foundItemHandler: ((FileObject) -> Void)?, completionHandler: @escaping (_ files: [FileObject], _ error: Error?) -> Void) -> Progress? { let url = self.url(of: path) var request = URLRequest(url: url) @@ -400,6 +402,7 @@ extension WebDAVFileProvider: ExtendedFileProvider { return supportedExt.contains((path as NSString).pathExtension) } + @discardableResult open func thumbnailOfFile(path: String, dimension: CGSize?, completionHandler: @escaping ((ImageClass?, Error?) -> Void)) -> Progress? { guard self.baseURL?.host?.contains("dav.yandex.") ?? false else { dispatch_queue.async { @@ -432,6 +435,7 @@ extension WebDAVFileProvider: ExtendedFileProvider { return false } + @discardableResult open func propertiesOfFile(path: String, completionHandler: @escaping (([String : Any], [String], Error?) -> Void)) -> Progress? { dispatch_queue.async { completionHandler([:], [], self.urlError(path, code: .resourceUnavailable))