// // ContentView.swift // Accent Pomodoro // // Created by Luke Jenquin on 11/20/21. // import SwiftUI struct ContentView: View { @State private var color: String = "" @State private var currentDate = Date() @State private var minutesRemaining = 0 @State private var secondsRemaining = 0 @State private var wasDarkMode = false @State private var wasColor = 0 @State private var currentMode = 0 @State private var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() @State var changer: MenuBarColorChanger @ObservedObject var userSelections: userSelectionsModel var body: some View { VStack{ Text("\(minutesRemaining):\(String(format: "%02d", secondsRemaining))").onReceive(timer) { _ in if (minutesRemaining > 0 || secondsRemaining > 1 ) { if ( secondsRemaining == 0 ) { minutesRemaining -= 1 secondsRemaining = 59 } else { secondsRemaining -= 1 } } else if ( minutesRemaining == 0 && secondsRemaining == 1 ){ secondsRemaining = 0 switchTimers() } } Button("Start", action: startTimer) Button("Stop Timer", action: stopTimer) Button("Reset", action: reset) }.padding() } func startTimer() { if ( minutesRemaining == 0 && secondsRemaining == 0){ minutesRemaining = userSelections.focusTime currentMode = 0 changer.changeMenuColor(colorChange: currentMode) wasDarkMode = ( UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" ) if ( userSelections.focusDarkMode == 1 && wasDarkMode ) { setDarkMode() } else if ( userSelections.focusDarkMode == 2 && !wasDarkMode ) { setDarkMode() } // -2 (nil): multicolor (default) // -1: graphite // 0: red // 1: orange // 2: yellow // 3: green // 4: blue // 5: purple // 6: pink let selected = userSelections.focusSelected wasColor = Int(UserDefaults.standard.string(forKey: "AppleAccentColor") ?? "-2") ?? -2 if ( selected == 1 && wasColor != -2 ){ color = (String) (selected + 5) setAccent() } else if ( ( selected > 1 && selected < 5 && selected != wasColor - 2 ) || ( selected > 4 && selected < 9 && selected != wasColor + 5 ) || ( selected == 9 && wasColor != -1 ) ) { color = (String) (selected + 7) setAccent() } } timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() } func stopTimer() { self.timer.upstream.connect().cancel() } func switchTimers() { if (currentMode == 0) { if ( userSelections.relaxDarkMode == 1 && UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" ){ setDarkMode() } else if ( userSelections.relaxDarkMode == 2 && UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Light" ) { setDarkMode() } let selected = userSelections.relaxSelected let currentColor = Int(UserDefaults.standard.string(forKey: "AppleAccentColor") ?? "-2") ?? -2 if( selected == userSelections.focusSelected ){ // Ignore accent switching } else if ( selected == 1 && currentColor != -2 ) { color = (String) (selected + 5) setAccent() } else if ( ( selected > 1 && selected < 5 && selected != currentColor - 2 ) || ( selected > 4 && selected < 9 && selected != currentColor + 5 ) || ( selected == 9 && currentColor != -1 ) ) { color = (String) (selected + 7) setAccent() } currentMode = 1; changer.changeMenuColor(colorChange: currentMode) minutesRemaining = userSelections.relaxTime } else { if ( userSelections.focusDarkMode == 1 && UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" ) { setDarkMode() } else if ( userSelections.focusDarkMode == 2 && UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == nil ) { setDarkMode() } let selected = userSelections.focusSelected let currentColor = Int(UserDefaults.standard.string(forKey: "AppleAccentColor") ?? "-2") ?? -2 if( userSelections.relaxSelected == selected ){ // Ignore accent switching } else if ( selected == 1 && currentColor != -2 ){ color = (String) (selected + 5) setAccent() } else if ( ( selected > 1 && selected < 5 && selected != currentColor - 2 ) || ( selected > 4 && selected < 9 && selected != currentColor + 5 ) || ( selected == 9 && currentColor != -1 ) ) { color = (String) (selected + 7) setAccent() } currentMode = 0; changer.changeMenuColor(colorChange: currentMode) minutesRemaining = userSelections.focusTime } startTimer() } func setLightMode() { color = "1" setAccent() } func setDarkMode2() { color = "2" setAccent() } func setMulticolor() { color = "4" setAccent() } func setBlue() { color = "5" setAccent() } func setPurple() { color = "6" setAccent() } func setPink() { color = "7" setAccent() } func setRed() { color = "8" setAccent() } func setOrange() { color = "9" setAccent() } func setYellow() { color = "10" setAccent() } func setGreen() { color = "11" setAccent() } func setGraphite() { color = "12" setAccent() } func setDarkMode() { let dark = Process() dark.launchPath = "/usr/bin/osascript" dark.arguments = ["\(NSHomeDirectory())/Developer/Accent Pomodoro/Accent Pomodoro/ChangeDarkMode.scpt"] dark.launch() } func setAccent() { let accent = Process() accent.launchPath = "/usr/bin/osascript" accent.arguments = ["\(NSHomeDirectory())/Developer/Accent Pomodoro/Accent Pomodoro/ChangeAccent.scpt", color] accent.launch() } func reset() { stopTimer() minutesRemaining = 0 secondsRemaining = 0 currentMode = 0 let currentColor = Int(UserDefaults.standard.string(forKey: "AppleAccentColor") ?? "-2") ?? -2 if ( currentColor != wasColor ){ if ( wasColor == -2 ){ color = (String) (6) setAccent() } else if ( wasColor > 3 ) { color = (String) (wasColor + 5) setAccent() } else if ( wasColor > -1 && wasColor < 4 ) { color = (String) (wasColor + 12) setAccent() } else if ( wasColor == -1 ) { color = (String) (17) setAccent() } } let isDarkMode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" if ( ( wasDarkMode && !isDarkMode ) || ( !wasDarkMode && isDarkMode )) { setDarkMode() } changer.resetWallpapers() } }