mirror of
https://github.com/Toxblh/MTMR.git
synced 2026-01-10 00:58:37 +00:00
More consistent settings
This commit is contained in:
parent
e44ff00f3b
commit
41a9544c3a
@ -25,6 +25,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
AXIsProcessTrustedWithOptions([kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true] as NSDictionary)
|
||||
|
||||
TouchBarController.shared.setupControlStripPresence()
|
||||
HapticFeedbackUpdate()
|
||||
|
||||
if let button = statusItem.button {
|
||||
button.image = #imageLiteral(resourceName: "StatusImage")
|
||||
@ -40,6 +41,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
func applicationWillTerminate(_: Notification) {}
|
||||
|
||||
func HapticFeedbackUpdate() {
|
||||
HapticFeedback.shared = TouchBarController.shared.hapticFeedbackState ? HapticFeedback() : nil
|
||||
}
|
||||
|
||||
@objc func updateIsBlockedApp() {
|
||||
var blacklistAppIdentifiers: [String] = []
|
||||
if let blackListed = UserDefaults.standard.stringArray(forKey: "com.toxblh.mtmr.blackListedApps") {
|
||||
@ -90,6 +95,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
@objc func toggleHapticFeedback(_: Any?) {
|
||||
TouchBarController.shared.hapticFeedbackState = !TouchBarController.shared.hapticFeedbackState
|
||||
HapticFeedbackUpdate()
|
||||
createMenu()
|
||||
}
|
||||
|
||||
@objc func openPreset(_: Any?) {
|
||||
let dialog = NSOpenPanel()
|
||||
|
||||
@ -124,6 +135,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
let hideControlStrip = NSMenuItem(title: "Hide Control Strip", action: #selector(toggleControlStrip(_:)), keyEquivalent: "T")
|
||||
hideControlStrip.state = TouchBarController.shared.showControlStripState ? .off : .on
|
||||
|
||||
let hapticFeedback = NSMenuItem(title: "Haptic Feedback", action: #selector(toggleHapticFeedback(_:)), keyEquivalent: "H")
|
||||
hapticFeedback.state = TouchBarController.shared.hapticFeedbackState ? .on : .off
|
||||
|
||||
let settingSeparator = NSMenuItem(title: "Settings", action: nil, keyEquivalent: "")
|
||||
settingSeparator.isEnabled = false
|
||||
|
||||
@ -133,6 +147,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
menu.addItem(NSMenuItem.separator())
|
||||
menu.addItem(settingSeparator)
|
||||
menu.addItem(hapticFeedback)
|
||||
menu.addItem(hideControlStrip)
|
||||
menu.addItem(toggleBlackList)
|
||||
menu.addItem(startAtLogin)
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.23.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>278</string>
|
||||
<string>294</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
||||
@ -2,27 +2,11 @@ import AppKit
|
||||
import Foundation
|
||||
|
||||
extension Data {
|
||||
func mtmrPreset() -> Preset? {
|
||||
let data = self.utf8string!.stripComments().data(using: .utf8)!
|
||||
guard let preset = try? JSONDecoder().decode(Preset.self, from: data) else {
|
||||
if let oldFormat = try? JSONDecoder().decode([BarItemDefinition].self, from: data) {
|
||||
return Preset(settings: nil, barItems: oldFormat)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return preset
|
||||
func barItemDefinitions() -> [BarItemDefinition]? {
|
||||
return try? JSONDecoder().decode([BarItemDefinition].self, from: utf8string!.stripComments().data(using: .utf8)!)
|
||||
}
|
||||
}
|
||||
|
||||
struct Preset: Decodable {
|
||||
let settings: GlobalSettings?
|
||||
let barItems: [BarItemDefinition]
|
||||
}
|
||||
|
||||
struct GlobalSettings: Decodable {
|
||||
let hapticFeedback: Bool?
|
||||
}
|
||||
|
||||
struct BarItemDefinition: Decodable {
|
||||
let type: ItemType
|
||||
let action: ActionType
|
||||
|
||||
@ -89,6 +89,15 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
UserDefaults.standard.set(newValue, forKey: "com.toxblh.mtmr.settings.showControlStrip")
|
||||
}
|
||||
}
|
||||
|
||||
var hapticFeedbackState: Bool {
|
||||
get {
|
||||
return UserDefaults.standard.bool(forKey: "com.toxblh.mtmr.settings.hapticFeedback")
|
||||
}
|
||||
set {
|
||||
UserDefaults.standard.set(newValue, forKey: "com.toxblh.mtmr.settings.hapticFeedback")
|
||||
}
|
||||
}
|
||||
|
||||
var blacklistAppIdentifiers: [String] = []
|
||||
var frontmostApplicationIdentifier: String? {
|
||||
@ -172,18 +181,8 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
|
||||
func reloadPreset(path: String) {
|
||||
lastPresetPath = path
|
||||
let preset = path.fileData?.mtmrPreset() ?? fallbackPreset()
|
||||
applySettings(preset.settings ?? GlobalSettings(hapticFeedback: true))
|
||||
createAndUpdatePreset(newJsonItems: preset.barItems)
|
||||
}
|
||||
|
||||
func fallbackPreset() -> Preset {
|
||||
let items = [BarItemDefinition(type: .staticButton(title: "bad preset"), action: .none, longAction: .none, additionalParameters: [:])]
|
||||
return Preset(settings: nil, barItems: items)
|
||||
}
|
||||
|
||||
func applySettings(_ settings: GlobalSettings) {
|
||||
HapticFeedback.shared = settings.hapticFeedback ?? true ? HapticFeedback() : nil
|
||||
let items = path.fileData?.barItemDefinitions() ?? [BarItemDefinition(type: .staticButton(title: "bad preset"), action: .none, longAction: .none, additionalParameters: [:])]
|
||||
createAndUpdatePreset(newJsonItems: items)
|
||||
}
|
||||
|
||||
func loadItemDefinitions(jsonItems: [BarItemDefinition]) {
|
||||
|
||||
@ -64,32 +64,4 @@ class ParseConfig: XCTestCase {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func testParsesOldFormat() {
|
||||
let fixture = """
|
||||
[ { "type": "escape" } ]
|
||||
""".data(using: .utf8)!
|
||||
let result = fixture.mtmrPreset()
|
||||
XCTAssertEqual(result?.barItems.count, 1)
|
||||
guard case .staticButton("esc")? = result?.barItems.first?.type else {
|
||||
XCTFail()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func testParsesHapticFeedbackSettings() {
|
||||
let fixture = """
|
||||
{
|
||||
"settings": { "hapticFeedback": false },
|
||||
"barItems": [ { "type": "escape" } ]
|
||||
}
|
||||
""".data(using: .utf8)!
|
||||
let result = fixture.mtmrPreset()
|
||||
XCTAssertEqual(result?.barItems.count, 1)
|
||||
guard case .staticButton("esc")? = result?.barItems.first?.type else {
|
||||
XCTFail()
|
||||
return
|
||||
}
|
||||
XCTAssertEqual(result?.settings?.hapticFeedback, .some(false))
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user