Skip to content

Commit

Permalink
Merge branch 'leonspok-create-default-config'
Browse files Browse the repository at this point in the history
  • Loading branch information
johnste committed Mar 6, 2021
2 parents 44bbbac + 84899a8 commit 99031aa
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 48 deletions.
8 changes: 8 additions & 0 deletions Finicky/Finicky.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
54E4B1EB22971F7B002FA6F4 /* UpdateCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54E4B1EA22971F7B002FA6F4 /* UpdateCheck.swift */; };
54FD9F562455A9A600217E30 /* Battery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54FD9F552455A9A600217E30 /* Battery.swift */; };
7804C1542433F40800E595D9 /* Fixtures in Resources */ = {isa = PBXBuildFile; fileRef = 7804C1532433F40700E595D9 /* Fixtures */; };
E3B53D6F253F957700F4CB19 /* defaultConfig.js in Resources */ = {isa = PBXBuildFile; fileRef = E3B53D6E253F957700F4CB19 /* defaultConfig.js */; };
E3B53D7A253F97FC00F4CB19 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B53D72253F975700F4CB19 /* Settings.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -74,6 +76,8 @@
54E4B1EA22971F7B002FA6F4 /* UpdateCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateCheck.swift; sourceTree = "<group>"; };
54FD9F552455A9A600217E30 /* Battery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Battery.swift; sourceTree = "<group>"; };
7804C1532433F40700E595D9 /* Fixtures */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Fixtures; sourceTree = "<group>"; };
E3B53D6E253F957700F4CB19 /* defaultConfig.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = defaultConfig.js; sourceTree = "<group>"; };
E3B53D72253F975700F4CB19 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -135,6 +139,7 @@
54E4B1EA22971F7B002FA6F4 /* UpdateCheck.swift */,
54C2F15A22BEC9BC00B3E2C3 /* Browsers.swift */,
54FD9F552455A9A600217E30 /* Battery.swift */,
E3B53D72253F975700F4CB19 /* Settings.swift */,
);
path = Finicky;
sourceTree = "<group>";
Expand Down Expand Up @@ -184,6 +189,7 @@
isa = PBXGroup;
children = (
54121CB822D8D8270020A69C /* finickyConfigAPI.js */,
E3B53D6E253F957700F4CB19 /* defaultConfig.js */,
);
name = js;
sourceTree = "<group>";
Expand Down Expand Up @@ -281,6 +287,7 @@
544B57891B28B87900812908 /* statusitem.png in Resources */,
54435240229DB9E800307E21 /* statusitemerror.png in Resources */,
5443523E229DA01B00307E21 /* statusitemerror@2x.png in Resources */,
E3B53D6F253F957700F4CB19 /* defaultConfig.js in Resources */,
544B578A1B28B87900812908 /* statusitem@2x.png in Resources */,
548F11CC1B2A39F800FDDC3C /* finicky.icns in Resources */,
54899CD81B20D5BC00647101 /* Images.xcassets in Resources */,
Expand Down Expand Up @@ -333,6 +340,7 @@
54899CD61B20D5BC00647101 /* AppDelegate.swift in Sources */,
54B0E7031B4678CE003F8AEE /* ShortUrlResolver.swift in Sources */,
54E4B1EB22971F7B002FA6F4 /* UpdateCheck.swift in Sources */,
E3B53D7A253F97FC00F4CB19 /* Settings.swift in Sources */,
548F11CE1B2A43F700FDDC3C /* API.swift in Sources */,
522F811425C45D0800643AF9 /* Application.swift in Sources */,
);
Expand Down
99 changes: 92 additions & 7 deletions Finicky/Finicky/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
@IBOutlet var testUrlTextField: NSTextField!
@IBOutlet var textView: NSTextView!
@IBOutlet var openConfigMenuItem: NSMenuItem!
@IBOutlet var createDefaultConfigMenuItem: NSMenuItem!
@IBOutlet var replaceConfigMenuItem: NSMenuItem!
@IBOutlet var revealInFinderMenuItem: NSMenuItem!
@objc var statusItem: NSStatusItem!

var configLoader: FinickyConfig!
var settings: Settings!
var shortUrlResolver = FNShortUrlResolver()

func applicationWillFinishLaunching(_: Notification) {
Expand Down Expand Up @@ -51,15 +55,46 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
}

func updateStatus(status: FinickyConfig.Status) {
openConfigMenuItem.isEnabled = status != .unavailable
if status == .valid {
switch status {
case .valid:
statusItem.button?.image = img
} else {
openConfigMenuItem.isEnabled = true
createDefaultConfigMenuItem.isEnabled = true
replaceConfigMenuItem.isEnabled = true
revealInFinderMenuItem.isEnabled = true
case .invalid:
statusItem.button?.image = invalidImg
openConfigMenuItem.isEnabled = true
createDefaultConfigMenuItem.isEnabled = true
replaceConfigMenuItem.isEnabled = true
revealInFinderMenuItem.isEnabled = true
case .unavailable:
statusItem.button?.image = invalidImg
openConfigMenuItem.isEnabled = false
createDefaultConfigMenuItem.isEnabled = true
replaceConfigMenuItem.isEnabled = true
revealInFinderMenuItem.isEnabled = false
}
}

configLoader = FinickyConfig(configureAppCb: configureAppOptions, logCb: logToConsole, updateStatusCb: updateStatus)
settings = Settings(userDefaults: .standard)

if settings.configLocation == nil,
FileManager.default.fileExists(atPath: FinickyConfig.defaultConfigLocation.path) {
logToConsole("Found config file at \(FinickyConfig.defaultConfigLocation.path). Saving location to settings.")
settings.configLocation = FinickyConfig.defaultConfigLocation
}

func getConfigPath() -> String? {
return settings.configLocation?.absoluteURL.path
}

configLoader = FinickyConfig(
configureAppCb: configureAppOptions,
logCb: logToConsole,
updateStatusCb: updateStatus,
configPath: getConfigPath
)

let appleEventManager = NSAppleEventManager.shared()
appleEventManager.setEventHandler(self, andSelector: #selector(AppDelegate.handleGetURLEvent(_:withReplyEvent:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL))
Expand All @@ -80,18 +115,68 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
LSSetDefaultHandlerForURLScheme("finickys" as CFString, bundleId as CFString)
}

@IBAction func reloadConfig(_: NSMenuItem) {
@IBAction func reloadConfig(_: NSMenuItem? = nil) {
configLoader.listenToChanges(showInitialSuccess: true)
}

@IBAction func openConfig(_: NSMenuItem) {
NSWorkspace.shared.openFile((FNConfigPath as NSString).resolvingSymlinksInPath)
@IBAction func openConfig(_: NSMenuItem? = nil) {
guard let location = settings.configLocation else { return }
NSWorkspace.shared.open(location)
}

@IBAction func revealConfigInFinder(_: NSMenuItem? = nil) {
guard let location = settings.configLocation else { return }
NSWorkspace.shared.selectFile(location.path, inFileViewerRootedAtPath: location.deletingLastPathComponent().path)
}

@IBAction func checkUpdates(_: NSMenuItem? = nil) {
checkForAvailableUpdate(alwaysNotify: true)
}

@IBAction func createDefaultConfig(_: NSMenuItem? = nil) {
guard let defaultConfigURL = Bundle.main.url(forResource: "defaultConfig", withExtension: "js") else {
return
}

let suggestedConfigLocation = (settings.configLocation ?? FinickyConfig.defaultConfigLocation)

let savePanel = NSSavePanel()
savePanel.allowedFileTypes = ["js"]
savePanel.allowsOtherFileTypes = false
savePanel.isExtensionHidden = false
savePanel.canSelectHiddenExtension = false
savePanel.canCreateDirectories = true
savePanel.nameFieldStringValue = suggestedConfigLocation.lastPathComponent
savePanel.directoryURL = suggestedConfigLocation.deletingLastPathComponent()

let modalResponse = savePanel.runModal()

if modalResponse == .OK, let url = savePanel.url {
try? FileManager.default.copyItem(at: defaultConfigURL, to: url)
settings.configLocation = url
reloadConfig()
openConfig()
}
}

@IBAction func replaceConfig(_: NSMenuItem? = nil) {
let suggestedConfigLocation = (settings.configLocation ?? FinickyConfig.defaultConfigLocation)
let openPanel = NSOpenPanel()
openPanel.allowedFileTypes = ["js"]
openPanel.canChooseFiles = true
openPanel.canChooseDirectories = false
openPanel.allowsOtherFileTypes = false
openPanel.allowsMultipleSelection = false
openPanel.directoryURL = suggestedConfigLocation.deletingLastPathComponent()

let modalResponse = openPanel.runModal()

if modalResponse == .OK, let url = openPanel.url {
settings.configLocation = url
reloadConfig()
}
}

func checkForAvailableUpdate(alwaysNotify: Bool = false) {
checkForUpdate(alwaysNotify) { (version: Version?, _) -> Void in
if version == nil {
Expand Down
62 changes: 45 additions & 17 deletions Finicky/Finicky/Base.lproj/MainMenu.xib
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="16096" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17156" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="16096"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17156"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
Expand All @@ -15,7 +15,10 @@
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Finicky" customModuleProvider="target">
<connections>
<outlet property="openConfigMenuItem" destination="IzB-Zp-2vO" id="Qrx-iQ-ysr"/>
<outlet property="createDefaultConfigMenuItem" destination="Bmw-SB-b8A" id="EH5-GD-scP"/>
<outlet property="openConfigMenuItem" destination="LlC-LY-oCA" id="F4S-xi-0c8"/>
<outlet property="replaceConfigMenuItem" destination="760-bM-4qn" id="afN-mk-zKg"/>
<outlet property="revealInFinderMenuItem" destination="CrI-ZJ-cWg" id="mcC-So-iX7"/>
<outlet property="statusItemMenu" destination="Kzo-ni-M3E" id="VAC-Jd-SUN"/>
<outlet property="testConfigWindow" destination="VZJ-Lg-gDn" id="yu6-P3-Fon"/>
<outlet property="testUrlTextField" destination="MSV-N8-vFV" id="R7y-rh-o03"/>
Expand Down Expand Up @@ -675,17 +678,42 @@
</menu>
<menu autoenablesItems="NO" id="Kzo-ni-M3E" userLabel="Status Item Menu">
<items>
<menuItem title="Reload Config" id="X9g-Uv-L2W">
<menuItem title="Config" id="lgT-SE-g8f" userLabel="Config...">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="reloadConfig:" target="Voe-Tx-rLC" id="0FH-YI-ACs"/>
</connections>
</menuItem>
<menuItem title="Open Config" enabled="NO" id="IzB-Zp-2vO">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="openConfig:" target="Voe-Tx-rLC" id="4UW-gs-G8h"/>
</connections>
<menu key="submenu" title="Config" autoenablesItems="NO" id="qkL-Hk-EbM">
<items>
<menuItem title="Reload" id="X9g-Uv-L2W" userLabel="Reload">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="reloadConfig:" target="Voe-Tx-rLC" id="0FH-YI-ACs"/>
</connections>
</menuItem>
<menuItem title="Create new..." id="Bmw-SB-b8A" userLabel="Create">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="createDefaultConfig:" target="Voe-Tx-rLC" id="vIG-q1-Bg3"/>
</connections>
</menuItem>
<menuItem title="Reveal in Finder..." id="CrI-ZJ-cWg" userLabel="Reveal in Finder">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="revealConfigInFinder:" target="Voe-Tx-rLC" id="F4U-Ez-2RO"/>
</connections>
</menuItem>
<menuItem title="Edit..." id="LlC-LY-oCA" userLabel="Edit">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="openConfig:" target="Voe-Tx-rLC" id="oq9-Sf-p6c"/>
</connections>
</menuItem>
<menuItem title="Use another file..." id="760-bM-4qn" userLabel="Replace">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="replaceConfig:" target="Voe-Tx-rLC" id="k0j-dz-pKE"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Console..." id="B8m-5i-1Ii">
<attributedString key="attributedTitle"/>
Expand Down Expand Up @@ -716,13 +744,13 @@
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="137.5" y="-105"/>
<point key="canvasLocation" x="24" y="101"/>
</menu>
<window title="Finicky Console" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="VZJ-Lg-gDn">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="163" y="199" width="591" height="500"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1080"/>
<view key="contentView" id="7j0-3Z-aDh">
<rect key="frame" x="0.0" y="0.0" width="591" height="500"/>
<autoresizingMask key="autoresizingMask"/>
Expand Down Expand Up @@ -753,7 +781,7 @@
<autoresizingMask key="autoresizingMask"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="k0G-uq-6Cu">
<rect key="frame" x="2" y="2" width="568" height="407"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsCharacterPickerTouchBarItem="NO" linkDetection="YES" textCompletion="NO" id="qaM-sW-3L0">
<rect key="frame" x="0.0" y="0.0" width="568" height="407"/>
Expand All @@ -780,7 +808,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Clear console" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="XVX-Nz-543">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="message"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="ClearConsole:" target="Voe-Tx-rLC" id="2bk-u0-Z8a"/>
Expand Down

0 comments on commit 99031aa

Please sign in to comment.