40 lines
1.4 KiB
Swift
40 lines
1.4 KiB
Swift
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import Foundation
|
|
import WebKit
|
|
|
|
class DownloadHandler: NSObject, WKDownloadDelegate {
|
|
func download(_ download: WKDownload, decideDestinationUsing response: URLResponse, suggestedFilename: String, completionHandler: @escaping (URL?) -> Void) {
|
|
DispatchQueue.main.async {
|
|
// Let user select location of file
|
|
let savePanel = NSSavePanel()
|
|
savePanel.canCreateDirectories = true
|
|
savePanel.nameFieldStringValue = suggestedFilename
|
|
// BUGBUG: Specifying the allowedFileTypes causes Catalina to hang / error out
|
|
//savePanel.allowedFileTypes = [".boardsarchive"]
|
|
savePanel.begin { (result) in
|
|
if result.rawValue == NSApplication.ModalResponse.OK.rawValue,
|
|
let fileUrl = savePanel.url {
|
|
if (FileManager.default.fileExists(atPath: fileUrl.path)) {
|
|
// HACKHACK: WKWebView doesn't appear to overwrite files, so delete exsiting files first
|
|
do {
|
|
try FileManager.default.removeItem(at: fileUrl)
|
|
} catch {
|
|
let alert = NSAlert()
|
|
alert.messageText = "Unable to replace \(fileUrl.path)"
|
|
alert.addButton(withTitle: "OK")
|
|
alert.alertStyle = .warning
|
|
alert.runModal()
|
|
}
|
|
}
|
|
completionHandler(fileUrl)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func downloadDidFinish(_ download: WKDownload) {
|
|
NSLog("downloadDidFinish")
|
|
}
|
|
}
|