[BUG] Show import/export panel as modal panel.
This approach would ensure the panel show in most front and in center of screen.
This commit is contained in:
@ -79,49 +79,48 @@ class ServerProfileManager: NSObject {
|
|||||||
openPanel.canCreateDirectories = false
|
openPanel.canCreateDirectories = false
|
||||||
openPanel.canChooseFiles = true
|
openPanel.canChooseFiles = true
|
||||||
openPanel.becomeKey()
|
openPanel.becomeKey()
|
||||||
openPanel.begin { (result) -> Void in
|
let result = openPanel.runModal()
|
||||||
if (result == NSFileHandlingPanelOKButton && (openPanel.url) != nil) {
|
if (result == NSFileHandlingPanelOKButton && (openPanel.url) != nil) {
|
||||||
let fileManager = FileManager.default
|
let fileManager = FileManager.default
|
||||||
let filePath:String = (openPanel.url?.path)!
|
let filePath:String = (openPanel.url?.path)!
|
||||||
if (fileManager.fileExists(atPath: filePath) && filePath.hasSuffix("json")) {
|
if (fileManager.fileExists(atPath: filePath) && filePath.hasSuffix("json")) {
|
||||||
let data = fileManager.contents(atPath: filePath)
|
let data = fileManager.contents(atPath: filePath)
|
||||||
let readString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!
|
let readString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!
|
||||||
let readStringData = readString.data(using: String.Encoding.utf8.rawValue)
|
let readStringData = readString.data(using: String.Encoding.utf8.rawValue)
|
||||||
|
|
||||||
let jsonArr1 = try! JSONSerialization.jsonObject(with: readStringData!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
|
let jsonArr1 = try! JSONSerialization.jsonObject(with: readStringData!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
|
||||||
|
|
||||||
for item in jsonArr1.object(forKey: "configs") as! [[String: AnyObject]]{
|
for item in jsonArr1.object(forKey: "configs") as! [[String: AnyObject]]{
|
||||||
let profile = ServerProfile()
|
let profile = ServerProfile()
|
||||||
profile.serverHost = item["server"] as! String
|
profile.serverHost = item["server"] as! String
|
||||||
profile.serverPort = UInt16((item["server_port"]?.integerValue)!)
|
profile.serverPort = UInt16((item["server_port"]?.integerValue)!)
|
||||||
profile.method = item["method"] as! String
|
profile.method = item["method"] as! String
|
||||||
profile.password = item["password"] as! String
|
profile.password = item["password"] as! String
|
||||||
profile.remark = item["remarks"] as! String
|
profile.remark = item["remarks"] as! String
|
||||||
|
|
||||||
// Kcptun
|
// Kcptun
|
||||||
profile.enabledKcptun = item["enabled_kcptun"]?.boolValue ?? false
|
profile.enabledKcptun = item["enabled_kcptun"]?.boolValue ?? false
|
||||||
if let kcptun = item["kcptun"] {
|
if let kcptun = item["kcptun"] {
|
||||||
profile.kcptunProfile = KcptunProfile.fromDictionary(kcptun as! [String : Any?])
|
profile.kcptunProfile = KcptunProfile.fromDictionary(kcptun as! [String : Any?])
|
||||||
}
|
|
||||||
|
|
||||||
self.profiles.append(profile)
|
|
||||||
self.save()
|
|
||||||
}
|
}
|
||||||
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NOTIFY_SERVER_PROFILES_CHANGED), object: nil)
|
|
||||||
let configsCount = (jsonArr1.object(forKey: "configs") as! [[String: AnyObject]]).count
|
self.profiles.append(profile)
|
||||||
let notification = NSUserNotification()
|
self.save()
|
||||||
notification.title = "Import Server Profile succeed!".localized
|
|
||||||
notification.informativeText = "Successful import \(configsCount) items".localized
|
|
||||||
NSUserNotificationCenter.default
|
|
||||||
.deliver(notification)
|
|
||||||
}else{
|
|
||||||
let notification = NSUserNotification()
|
|
||||||
notification.title = "Import Server Profile failed!".localized
|
|
||||||
notification.informativeText = "Invalid config file!".localized
|
|
||||||
NSUserNotificationCenter.default
|
|
||||||
.deliver(notification)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NOTIFY_SERVER_PROFILES_CHANGED), object: nil)
|
||||||
|
let configsCount = (jsonArr1.object(forKey: "configs") as! [[String: AnyObject]]).count
|
||||||
|
let notification = NSUserNotification()
|
||||||
|
notification.title = "Import Server Profile succeed!".localized
|
||||||
|
notification.informativeText = "Successful import \(configsCount) items".localized
|
||||||
|
NSUserNotificationCenter.default
|
||||||
|
.deliver(notification)
|
||||||
|
}else{
|
||||||
|
let notification = NSUserNotification()
|
||||||
|
notification.title = "Import Server Profile failed!".localized
|
||||||
|
notification.informativeText = "Invalid config file!".localized
|
||||||
|
NSUserNotificationCenter.default
|
||||||
|
.deliver(notification)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -164,17 +163,16 @@ class ServerProfileManager: NSObject {
|
|||||||
savePanel.allowedFileTypes = ["json"]
|
savePanel.allowedFileTypes = ["json"]
|
||||||
savePanel.nameFieldStringValue = "export.json"
|
savePanel.nameFieldStringValue = "export.json"
|
||||||
savePanel.becomeKey()
|
savePanel.becomeKey()
|
||||||
savePanel.begin { (result) -> Void in
|
let result = savePanel.runModal()
|
||||||
if (result == NSFileHandlingPanelOKButton && (savePanel.url) != nil) {
|
if (result == NSFileHandlingPanelOKButton && (savePanel.url) != nil) {
|
||||||
//write jsonArr1 back to file
|
//write jsonArr1 back to file
|
||||||
try! jsonString.write(toFile: (savePanel.url?.path)!, atomically: true, encoding: String.Encoding.utf8)
|
try! jsonString.write(toFile: (savePanel.url?.path)!, atomically: true, encoding: String.Encoding.utf8)
|
||||||
NSWorkspace.shared().selectFile((savePanel.url?.path)!, inFileViewerRootedAtPath: (savePanel.directoryURL?.path)!)
|
NSWorkspace.shared().selectFile((savePanel.url?.path)!, inFileViewerRootedAtPath: (savePanel.directoryURL?.path)!)
|
||||||
let notification = NSUserNotification()
|
let notification = NSUserNotification()
|
||||||
notification.title = "Export Server Profile succeed!".localized
|
notification.title = "Export Server Profile succeed!".localized
|
||||||
notification.informativeText = "Successful Export \(self.profiles.count) items".localized
|
notification.informativeText = "Successful Export \(self.profiles.count) items".localized
|
||||||
NSUserNotificationCenter.default
|
NSUserNotificationCenter.default
|
||||||
.deliver(notification)
|
.deliver(notification)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user