diff --git a/FileProvider.podspec b/FileProvider.podspec index 58c1e90..36f7695 100644 --- a/FileProvider.podspec +++ b/FileProvider.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "FileProvider" - s.version = "0.3.2" + s.version = "0.3.3" s.summary = "NSFileManager replacement for Local and Remote (WebDAV/Dropbox/SMB2) files on iOS and MacOS." # This description is used to generate tags and improve search results. diff --git a/Sources/DropboxFileProvider.swift b/Sources/DropboxFileProvider.swift index f31830a..0bd0b10 100644 --- a/Sources/DropboxFileProvider.swift +++ b/Sources/DropboxFileProvider.swift @@ -132,7 +132,7 @@ extension DropboxFileProvider: FileProviderOperations { } public func createFile(fileAttribs: FileObject, atPath path: String, contents data: NSData?, completionHandler: SimpleCompletionHandler) { - NotImplemented() + self.writeContentsAtPath(path, contents: data ?? NSData(), completionHandler: completionHandler) } public func moveItemAtPath(path: String, toPath: String, overwrite: Bool = false, completionHandler: SimpleCompletionHandler) { @@ -209,21 +209,28 @@ extension DropboxFileProvider: FileProviderOperations { task.resume() } - public func copyPathToLocalFile(path: String, toLocalURL: NSURL, completionHandler: SimpleCompletionHandler) { - NotImplemented() - let request = NSMutableURLRequest(URL: absoluteURL(path)) - let task = session.downloadTaskWithRequest(request) { (sourceFileURL, response, error) in - if let sourceFileURL = sourceFileURL { - do { - try NSFileManager.defaultManager().copyItemAtURL(sourceFileURL, toURL: toLocalURL) - } catch let e { - completionHandler?(error: e) - return - } + public func copyPathToLocalFile(path: String, toLocalURL destURL: NSURL, completionHandler: SimpleCompletionHandler) { + let url = NSURL(string: "https://api.dropboxapi.com/2/files/download")! + let request = NSMutableURLRequest(URL: url) + request.HTTPMethod = "GET" + request.setValue("Bearer \(credential?.password ?? "")", forHTTPHeaderField: "Authorization") + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + let requestDictionary = ["path": path] + request.setValue(dictionaryToJSON(requestDictionary), forHTTPHeaderField: "Dropbox-API-Arg") + let task = session.downloadTaskWithRequest(request, completionHandler: { (cacheURL, response, error) in + guard let cacheURL = cacheURL, let httpResponse = response as? NSHTTPURLResponse where httpResponse.statusCode < 300 else { + let code = FileProviderDropboxErrorCode(rawValue: (response as? NSHTTPURLResponse)?.statusCode ?? -1) + let dbError: FileProviderDropboxError? = code != nil ? FileProviderDropboxError(code: code!, path: path) : nil + completionHandler?(error: dbError ?? error) + return } - completionHandler?(error: error) - } - task.taskDescription = self.dictionaryToJSON(["type": "Copy", "source": path, "dest": toLocalURL.uw_absoluteString]) + do { + try NSFileManager.defaultManager().moveItemAtURL(cacheURL, toURL: destURL) + completionHandler?(error: nil) + } catch let e { + completionHandler?(error: e) + } + }) task.resume() } } @@ -234,7 +241,6 @@ extension DropboxFileProvider: FileProviderReadWrite { } public func contentsAtPath(path: String, offset: Int64, length: Int, completionHandler: ((contents: NSData?, error: ErrorType?) -> Void)) { - let url = NSURL(string: "https://api.dropboxapi.com/2/files/download")! let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "GET" diff --git a/Sources/WebDAVFileProvider.swift b/Sources/WebDAVFileProvider.swift index d8778eb..c8a7a58 100644 --- a/Sources/WebDAVFileProvider.swift +++ b/Sources/WebDAVFileProvider.swift @@ -102,7 +102,7 @@ public class WebDAVFileProvider: NSObject, FileProviderBasic { let url = absoluteURL(path) let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "PROPFIND" - request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") + //request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") request.setValue("1", forHTTPHeaderField: "Depth") request.setValue("text/xml; charset=\"utf-8\"", forHTTPHeaderField: "Content-Type") request.HTTPBody = "\n\n".dataUsingEncoding(NSUTF8StringEncoding) @@ -128,7 +128,7 @@ public class WebDAVFileProvider: NSObject, FileProviderBasic { public func attributesOfItemAtPath(path: String, completionHandler: ((attributes: FileObject?, error: ErrorType?) -> Void)) { let request = NSMutableURLRequest(URL: absoluteURL(path)) request.HTTPMethod = "PROPFIND" - request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") + //request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") request.setValue("1", forHTTPHeaderField: "Depth") request.setValue("text/xml; charset=\"utf-8\"", forHTTPHeaderField: "Content-Type") request.HTTPBody = "\n\n".dataUsingEncoding(NSUTF8StringEncoding) @@ -154,7 +154,7 @@ extension WebDAVFileProvider: FileProviderOperations { let url = absoluteURL((atPath as NSString).stringByAppendingPathComponent(folderName) + "/") let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "MKCOL" - request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") + //request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") let task = session.dataTaskWithRequest(request) { (data, response, error) in if let response = response as? NSHTTPURLResponse, let code = FileProviderWebDavErrorCode(rawValue: response.statusCode) where code != .OK { completionHandler?(error: FileProviderWebDavError(code: code, url: url)) @@ -193,7 +193,7 @@ extension WebDAVFileProvider: FileProviderOperations { } else { request.HTTPMethod = "COPY" } - request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") + //request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") request.setValue(absoluteURL(path).uw_absoluteString, forHTTPHeaderField: "Destination") if !overwrite { request.setValue("F", forHTTPHeaderField: "Overwrite") @@ -223,7 +223,7 @@ extension WebDAVFileProvider: FileProviderOperations { let url = absoluteURL(path) let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "DELETE" - request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") + //request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") let task = session.dataTaskWithRequest(request) { (data, response, error) in if let response = response as? NSHTTPURLResponse, let code = FileProviderWebDavErrorCode(rawValue: response.statusCode) { defer { @@ -317,7 +317,7 @@ extension WebDAVFileProvider: FileProviderReadWrite { let url = absoluteURL(path) let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "PROPFIND" - request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") + //request.setValue(baseURL?.uw_absoluteString, forHTTPHeaderField: "Host") //request.setValue("1", forHTTPHeaderField: "Depth") request.setValue("text/xml; charset=\"utf-8\"", forHTTPHeaderField: "Content-Type") request.HTTPBody = "\n\n".dataUsingEncoding(NSUTF8StringEncoding)