Warning, /network/kdeconnect-ios/KDE Connect/KDE Connect/Swift Backend/DeviceType+Extensions.swift is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Lucas Wang <lucas.wang@tuta.io>
0003  * SPDX-FileCopyrightText: 2022 Claudio Cambra <claudio.cambra@gmail.com>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006  */
0007 
0008 //
0009 //  DeviceType+Extensions.swift
0010 //  KDE Connect
0011 //
0012 //  Created by Claudio Cambra on 25/5/22.
0013 //
0014 
0015 import Foundation
0016 
0017 public extension DeviceType {
0018     var sfSymbolName: String {
0019         switch (self) {
0020         case .unknown: return "questionmark.square.dashed"
0021         case .desktop: return "desktopcomputer"
0022         case .laptop: return "laptopcomputer"
0023         case .phone: return "apps.iphone"
0024         case .tablet: return "apps.ipad.landscape"
0025         case .tv: return "tv"
0026         @unknown default: return "questionmark.square.dashed"
0027         }
0028     }
0029     
0030     static var isMac: Bool {
0031         let processInfo = ProcessInfo.processInfo
0032         return processInfo.isMacCatalystApp || processInfo.isiOSAppOnMac
0033     }
0034 
0035     static var current: DeviceType {
0036         var macDeviceType: DeviceType {
0037             let logger = Logger(category: "DeviceType")
0038             return "hw.model".withCString { hwModelCStr in
0039                 var size = 0
0040                 if sysctlbyname(hwModelCStr, nil, &size, nil, 0) != 0 {
0041                     logger.fault("Failed to get size of hw.model \(errno, format: .darwinErrno)")
0042                     return .unknown
0043                 }
0044                 precondition(size > 0)
0045                 var resultCStr = [CChar](repeating: 0, count: size)
0046                 if sysctlbyname(hwModelCStr, &resultCStr, &size, nil, 0) != 0 {
0047                     logger.fault("Failed to get hw.model \(errno, format: .darwinErrno)")
0048                     return .unknown
0049                 }
0050                 // https://everymac.com/systems/by_capability/mac-specs-by-machine-model-machine-id.html
0051                 switch String(cString: resultCStr) {
0052                 case let model where model.starts(with: "MacBook"):
0053                     return .laptop
0054                 case let model where model.contains("Mac"):
0055                     return .desktop
0056                 case let model:
0057                     logger.fault("Unexpected hw.model (\(model, privacy: .public)")
0058                     return .unknown
0059                 }
0060             }
0061         }
0062         switch UIDevice.current.userInterfaceIdiom {
0063         case .unspecified:
0064             return .unknown
0065         case .phone:
0066             return .phone
0067         case .pad:
0068             if isMac {
0069                 return macDeviceType
0070             }
0071             return .tablet
0072         case .tv:
0073             return .tv
0074         case .carPlay:
0075             return .unknown
0076         case .mac:
0077             return macDeviceType
0078         @unknown default:
0079             return .unknown
0080         }
0081     }
0082 }