mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 23:24:32 +00:00
Working Indicators
This commit is contained in:
parent
79eb1311bf
commit
1a45d4e7f4
16 changed files with 629 additions and 17 deletions
73
DynamicIsland/managers/SystemDisplayManager.swift
Normal file
73
DynamicIsland/managers/SystemDisplayManager.swift
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
//
|
||||
// SystemDisplayManager.swift
|
||||
// DynamicIsland
|
||||
//
|
||||
// Adapted from TheBoringWorker-HUD DisplayManager.swift
|
||||
// Created by GitHub Copilot on 06/09/25.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Cocoa
|
||||
|
||||
class SystemDisplayManager {
|
||||
private init() {}
|
||||
|
||||
private static var method = SensorMethod.standard
|
||||
|
||||
static func getDisplayBrightness() throws -> Float {
|
||||
switch SystemDisplayManager.method {
|
||||
case .standard:
|
||||
do {
|
||||
return try getStandardDisplayBrightness()
|
||||
} catch {
|
||||
method = .m1
|
||||
}
|
||||
case .m1:
|
||||
do {
|
||||
return try getM1DisplayBrightness()
|
||||
} catch {
|
||||
method = .allFailed
|
||||
}
|
||||
case .allFailed:
|
||||
throw SensorError.Display.notFound
|
||||
}
|
||||
return try getDisplayBrightness()
|
||||
}
|
||||
|
||||
private static func getStandardDisplayBrightness() throws -> Float {
|
||||
var brightness: float_t = 1
|
||||
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"))
|
||||
defer {
|
||||
IOObjectRelease(service)
|
||||
}
|
||||
|
||||
let result = IODisplayGetFloatParameter(service, 0, kIODisplayBrightnessKey as CFString, &brightness)
|
||||
if result != kIOReturnSuccess {
|
||||
throw SensorError.Display.notStandard
|
||||
}
|
||||
return brightness
|
||||
}
|
||||
|
||||
private static func getM1DisplayBrightness() throws -> Float {
|
||||
let task = Process()
|
||||
task.launchPath = "/usr/libexec/corebrightnessdiag"
|
||||
task.arguments = ["status-info"]
|
||||
let pipe = Pipe()
|
||||
task.standardOutput = pipe
|
||||
try task.run()
|
||||
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
||||
task.waitUntilExit()
|
||||
|
||||
if let plist = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? NSDictionary,
|
||||
let displays = plist["CBDisplays"] as? [String: [String: Any]] {
|
||||
for display in displays.values {
|
||||
if let displayInfo = display["Display"] as? [String: Any],
|
||||
displayInfo["DisplayServicesIsBuiltInDisplay"] as? Bool == true,
|
||||
let brightness = displayInfo["DisplayServicesBrightness"] as? Float {
|
||||
return brightness
|
||||
}
|
||||
}
|
||||
}
|
||||
throw SensorError.Display.notSilicon
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue