mirror of
https://github.com/AppHouseKitchen/AlDente-Battery_Care_and_Monitoring.git
synced 2026-07-14 16:52:49 +02:00
Apple Silicon Support
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// AlDente
|
||||
//
|
||||
// Created by David Wernhart on 09.02.20.
|
||||
// Copyright © 2020 David Wernhart. All rights reserved.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
import SwiftUI
|
||||
import LaunchAtLogin
|
||||
import Foundation
|
||||
import IOKit.ps
|
||||
import IOKit.pwr_mgt
|
||||
|
||||
extension ProcessInfo {
|
||||
/// Returns a `String` representing the machine hardware name or nil if there was an error invoking `uname(_:)` or decoding the response.
|
||||
///
|
||||
/// Return value is the equivalent to running `$ uname -m` in shell.
|
||||
var machineHardwareName: String? {
|
||||
var sysinfo = utsname()
|
||||
let result = uname(&sysinfo)
|
||||
guard result == EXIT_SUCCESS else { return nil }
|
||||
let data = Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN))
|
||||
guard let identifier = String(bytes: data, encoding: .ascii) else { return nil }
|
||||
return identifier.trimmingCharacters(in: .controlCharacters)
|
||||
}
|
||||
}
|
||||
|
||||
@NSApplicationMain
|
||||
final class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
//var window: NSWindow!
|
||||
var statusBarItem: NSStatusItem!
|
||||
var popover: NSPopover!
|
||||
|
||||
func applicationWillTerminate(_ aNotification: Notification) {
|
||||
Helper.instance.enableSleep()
|
||||
Helper.instance.enableCharging()
|
||||
}
|
||||
|
||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||
|
||||
let contentView = ContentView()
|
||||
|
||||
// Create the popover
|
||||
let popover = NSPopover()
|
||||
popover.contentSize = NSSize(width: 400, height: 600)
|
||||
popover.behavior = .transient
|
||||
popover.contentViewController = NSHostingController(rootView: contentView)
|
||||
self.popover = popover
|
||||
|
||||
let statusBar = NSStatusBar.system
|
||||
statusBarItem = statusBar.statusItem(withLength: NSStatusItem.squareLength)
|
||||
statusBarItem.button?.image = NSImage(named: "menubaricon")!
|
||||
statusBarItem.button?.action = #selector(togglePopover(_:))
|
||||
|
||||
Helper.instance.setPlatformKey()
|
||||
|
||||
Helper.instance.checkHelperVersion{(foundHelper) in
|
||||
if(foundHelper){
|
||||
print("helper found!")
|
||||
}
|
||||
else{
|
||||
Helper.instance.installHelper()
|
||||
}
|
||||
}
|
||||
|
||||
LaunchAtLogin.isEnabled = true
|
||||
SMCPresenter.shared.loadValue()
|
||||
|
||||
Helper.instance.checkCharging()
|
||||
|
||||
var actionMsg:String?
|
||||
|
||||
Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { timer in
|
||||
if(Helper.instance.isInitialized){
|
||||
Helper.instance.getChargingInfo { (Name, Capacity, IsCharging, MaxCapacity) in
|
||||
|
||||
|
||||
if(!PersistanceManager.instance.oldKey){
|
||||
if(Capacity < SMCPresenter.shared.value){
|
||||
actionMsg = "NEED TO CHARGE"
|
||||
if(Helper.instance.chargeInhibited){
|
||||
Helper.instance.enableCharging()
|
||||
}
|
||||
Helper.instance.disableSleep()
|
||||
|
||||
}
|
||||
else{
|
||||
actionMsg = "IS PERFECT"
|
||||
if(!Helper.instance.chargeInhibited){
|
||||
Helper.instance.disableCharging()
|
||||
}
|
||||
Helper.instance.enableSleep()
|
||||
|
||||
}
|
||||
print("TARGET: ",SMCPresenter.shared.value,
|
||||
" CURRENT: ",String(Capacity),
|
||||
" ISCHARGING: ",String(IsCharging),
|
||||
" CHARGE INHIBITED: ",String(Helper.instance.chargeInhibited),
|
||||
" ACTION: ",actionMsg!)
|
||||
}
|
||||
else{
|
||||
print("BCLM MODE ENABLED")
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
Helper.instance.setStatusString()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@objc func togglePopover(_ sender: AnyObject?) {
|
||||
popover.contentViewController?.view.window?.becomeKey()
|
||||
|
||||
Helper.instance.setStatusString()
|
||||
if let button = self.statusBarItem.button {
|
||||
if popover.isShown {
|
||||
popover.performClose(sender)
|
||||
} else {
|
||||
popover.show(relativeTo: button.bounds, of: button, preferredEdge: .minY)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user