From 44b4784cd3a46bf643650d406f4f95f53972952c Mon Sep 17 00:00:00 2001 From: Oleg Marchik Date: Thu, 10 Aug 2017 11:36:15 +0300 Subject: [PATCH] Important dropbox bug fixing: added unicode symbols support in path --- Sources/FileProviderExtensions.swift | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) mode change 100644 => 100755 Sources/FileProviderExtensions.swift diff --git a/Sources/FileProviderExtensions.swift b/Sources/FileProviderExtensions.swift old mode 100644 new mode 100755 index 869e022..f3beec9 --- a/Sources/FileProviderExtensions.swift +++ b/Sources/FileProviderExtensions.swift @@ -113,10 +113,28 @@ internal extension URLRequest { self.setValue(contentType.rawValue, forHTTPHeaderField: "Content-Type") } - mutating func set(dropboxArgKey requestDictionary: [String: AnyObject]) { - if let requestJson = String(jsonDictionary: requestDictionary) { - self.setValue(requestJson, forHTTPHeaderField: "Dropbox-API-Arg") + private func asciiEscape(string:String) -> String { + var res = "" + for char in string.unicodeScalars { + let substring = String(char) + if substring.canBeConverted(to: .ascii) { + res.append(substring) + } else { + res = res.appendingFormat("\\u%04x", char.value) + } } + return res + } + + mutating func set(dropboxArgKey requestDictionary: [String: AnyObject]) { + guard let jsonData = try? JSONSerialization.data(withJSONObject: requestDictionary, options: []) else { + return + } + guard var jsonString = String(data: jsonData, encoding: .utf8) else { return } + jsonString = self.asciiEscape(string: jsonString) + jsonString = jsonString.replacingOccurrences(of: "\\/", with: "/") + + self.setValue(jsonString, forHTTPHeaderField: "Dropbox-API-Arg") } }