-
Notifications
You must be signed in to change notification settings - Fork 398
Expand file tree
/
Copy pathServerView.swift
More file actions
110 lines (88 loc) · 3.38 KB
/
ServerView.swift
File metadata and controls
110 lines (88 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//
// ServerView.swift
// Postgres
//
// Created by Chris on 24/06/16.
// Copyright © 2016 postgresapp. All rights reserved.
//
import Cocoa
class ServerViewController: NSViewController, MainWindowModelConsumer {
@objc dynamic var mainWindowModel: MainWindowModel!
@IBOutlet weak var stopButton: NSButton!
@IBOutlet weak var startButton: NSButton!
var responderObserver: KeyValueObserver?
override func viewWillAppear() {
responderObserver = self.view.window?.observe("firstResponder", callback: { _ in
if self.view.window?.firstResponder is DatabaseCollectionView {
self.startButton.keyEquivalent = ""
self.stopButton.keyEquivalent = ""
} else {
self.startButton.keyEquivalent = "\r"
self.stopButton.keyEquivalent = "\r"
}
})
}
@IBAction func startServer(_ sender: AnyObject?) {
guard let server = mainWindowModel.firstSelectedServer else { return }
server.start { result in
if case let .failure(error) = result {
self.presentError(error, modalFor: self.view.window!, delegate: nil, didPresent: nil, contextInfo: nil)
}
}
}
@IBAction func stopServer(_ sender: AnyObject?) {
guard let server = mainWindowModel.firstSelectedServer else { return }
server.stop { result in
if case let .failure(error) = result {
self.presentError(error, modalFor: self.view.window!, delegate: nil, didPresent: nil, contextInfo: nil)
}
}
}
@IBAction func openPsql(_ sender: AnyObject?) {
guard let server = mainWindowModel.firstSelectedServer else { return }
guard let database = server.firstSelectedDatabase else { return }
if let clientApplicationPath = UserDefaults.standard.string(forKey: "PreferredClientApplicationPath") {
Task {
do {
try await ClientLauncher.shared.launchClient(URL(fileURLWithPath: clientApplicationPath), server: server, databaseName: database.name)
}
catch let error {
presentError(error, modalFor: view.window!, delegate: nil, didPresent: nil, contextInfo: nil)
}
}
} else {
performSegue(withIdentifier: "ConnectionDialogSegue", sender: sender)
}
}
@IBAction func warningButtonClicked(_ sender: AnyObject?) {
guard let server = mainWindowModel.firstSelectedServer else { return }
server.showWarningDetails(modalFor: view.window!)
}
@IBAction func clientPermissionWarningButtonClicked(_ sender: AnyObject?) {
NSWorkspace.shared.open(URL(string: "https://postgresapp.com/l/app-permissions/")!)
}
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if let target = segue.destinationController as? SettingsViewController {
guard let server = mainWindowModel.firstSelectedServer else { return }
target.server = server
}
if let connectionDialog = segue.destinationController as? ConnectionDialog {
guard let server = mainWindowModel.firstSelectedServer else { return }
connectionDialog.server = server
}
}
}
class ServerViewBackgroundView: NSView {
override var isOpaque: Bool { return true }
override var mouseDownCanMoveWindow: Bool { return true }
override func draw(_ dirtyRect: NSRect) {
NSColor.controlBackgroundColor.setFill()
dirtyRect.fill()
let imgSize = CGFloat(96)
let x = CGFloat(self.bounds.maxX-imgSize-20), y = CGFloat(20)
let imageRect = NSRect(x: x, y: self.bounds.maxY-y-imgSize, width: imgSize, height: imgSize)
if imageRect.intersects(dirtyRect) {
NSImage(named: "BlueElephant")?.draw(in: imageRect)
}
}
}