import Foundation #if canImport(UIKit) import UIKit #endif extension FlaroIdentity { private static let storageKey = "flaro.flaroServer.deviceID" /// Baut die Kennung für das laufende Gerät und merkt sie sich. /// /// **Eine eigene, nicht die von Jellyfin.** Beide Server führen eigene /// Geräteverzeichnisse; dieselbe Kennung doppelt zu vergeben hiesse, dass /// ein Widerruf auf dem einen Server im anderen verwirrt — und wer von /// Jellyfin zu Flaro wechselt, hinterliesse auf dem alten Server ein /// Gerät, das es dort gar nicht mehr gibt. /// /// Gleichbleiben muss sie trotzdem: wechselt sie, gilt die App als neues /// Gerät, und in der Liste steht bei jedem Start ein Eintrag mehr. /// /// `@MainActor`, weil `UIDevice.current` dort beheimatet ist. @MainActor public static func current(defaults: UserDefaults = .standard) -> FlaroIdentity { let deviceID: String if let stored = defaults.string(forKey: storageKey) { deviceID = stored } else { deviceID = UUID().uuidString defaults.set(deviceID, forKey: storageKey) } #if canImport(UIKit) let name = UIDevice.current.name #else let name = ProcessInfo.processInfo.hostName #endif return FlaroIdentity(deviceName: name, deviceID: deviceID) } }