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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
//
// AppDelegate.swift
// DWA140Menu
//
// Created by FivePixels on 9/3/18.
// Copyright © 2018 FivePixels. All rights reserved.
//
import Cocoa
import Foundation
import Defaults
import LaunchAtLogin
import SystemConfiguration
extension Defaults.Keys {
static let launchAtLogin = Defaults.Key<Bool>("launchAtLogin", default: false)
}
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
var launchAtLoginMenuItem = NSMenuItem()
var interfaceName : String = ""
let dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, "iked" as CFString, nil, nil)
let ipv4key = SCDynamicStoreCopyValue(dynRef, "State:/Network/Global/IPv4" as CFString)
var isDeviceInterfaceConnected : Bool?
var deviceIPAddress : String = ""
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate {
@objc func openSourcePage() {
NSWorkspace.shared.open((URL(string:"https://github.com/fivepixels/dwa140shortcut") ?? nil)!)
}
@objc func openDWAPreferencePane() {
let fileManager = FileManager.default
let allUsersPath = "/Library/PreferencePanes/DWA-140WirelessUtility.prefpane"
let currentUserPath = "~/Library/PreferencePanes/DWA-140WirelessUtility.prefPane"
if fileManager.fileExists(atPath: allUsersPath) {
NSWorkspace.shared.open(URL(fileURLWithPath: allUsersPath)) }
else if fileManager.fileExists(atPath: currentUserPath) {
NSWorkspace.shared.open(URL(fileURLWithPath: currentUserPath))
} else {
showNotification(title: "DWA-140 Shortcut Error", withText: "The preference pane does not exist.")
}
}
@objc func openNetworkPreferencePane() {
NSWorkspace.shared.open(URL(fileURLWithPath: "/System/Library/PreferencePanes/Network.prefPane"))
}
@objc func refreshApplication() {
let url = URL(fileURLWithPath: Bundle.main.resourcePath!)
let path = url.deletingLastPathComponent().deletingLastPathComponent().absoluteString
let task = Process()
task.launchPath = "/usr/bin/open"
task.arguments = [path]
task.launch()
exit(0)
}
@objc func toggleLaunchAtLogin() {
let launchAtLogin = defaults[.launchAtLogin]
launchAtLoginMenuItem.state = !launchAtLogin ? .on : .off
LaunchAtLogin.isEnabled = !launchAtLogin
defaults[.launchAtLogin] = !launchAtLogin
if !launchAtLogin {
showNotification(title: "DWA-140 Shortcut", withText: "This application now opens as soon as you login. 😀")
}
}
@objc func showNotification(title: String, withText: String) -> Void {
let notification = NSUserNotification()
notification.title = title
notification.informativeText = withText
notification.soundName = NSUserNotificationDefaultSoundName
NSUserNotificationCenter.default.delegate = self
NSUserNotificationCenter.default.deliver(notification)
}
func getInterface() -> String {
// thanks NetUtils-Swift :p
if var dict1 = ipv4key as? [String: AnyObject] {
if (dict1["PrimaryInterface"] == nil) {
interfaceName = "none"
}
interfaceName = (dict1["PrimaryInterface"] as! String)
}
return interfaceName
}
func constructMenu() {
let applicationMenu = NSMenu()
applicationMenu.addItem(NSMenuItem(title: "DWA-140 Shortcut (Source)", action: #selector(openSourcePage), keyEquivalent: ""))
launchAtLoginMenuItem = NSMenuItem(title: "Launch Application on Login", action: #selector(toggleLaunchAtLogin), keyEquivalent: "")
launchAtLoginMenuItem.state = defaults[.launchAtLogin] ? .on : .off
applicationMenu.addItem(launchAtLoginMenuItem)
applicationMenu.addItem(NSMenuItem.separator())
applicationMenu.addItem(NSMenuItem(title: isInterfaceConnected(), action: nil, keyEquivalent: ""))
applicationMenu.addItem(NSMenuItem.separator())
applicationMenu.addItem(NSMenuItem(title: "Refresh Status", action: #selector(refreshApplication), keyEquivalent: "r"))
applicationMenu.addItem(NSMenuItem(title: "Open DWA-140", action: #selector(openDWAPreferencePane), keyEquivalent: "t"))
applicationMenu.addItem(NSMenuItem(title: "Network Preferences", action: #selector(openNetworkPreferencePane), keyEquivalent: ""))
applicationMenu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: ""))
statusItem.menu = applicationMenu
}
func isInterfaceConnected() -> String {
if getInterface() == "en0" {
isDeviceInterfaceConnected = true
DispatchQueue.main.async {
self.setStatusIcon(icon: "WiFiConnected")
}
return "USB WiFi is connected. [Interface: en0]"
} else if getInterface() == "en1" {
isDeviceInterfaceConnected = true
DispatchQueue.main.async {
self.setStatusIcon(icon: "WiFiConnected")
}
return "USB WiFi is connected. [Interface: en1]"
} else {
isDeviceInterfaceConnected = false
DispatchQueue.main.async {
self.setStatusIcon(icon: "WiFiDisconnected")
}
return "USB Wifi is disconnected."
}
}
func userNotificationCenter(_ center: NSUserNotificationCenter,
shouldPresent notification: NSUserNotification) -> Bool {
return true
}
func setStatusIcon(icon: String) {
if let button = statusItem.button {
if button.image?.name() != icon {
button.image = NSImage(named: NSImage.Name(icon))
}
}
}
func applicationDidFinishLaunching(_ notification: Notification) {
constructMenu()
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
|