Beam/ElementX/Sources/Other/UserAgentBuilder.swift
manuroe 3950cac085
Dual licensing: AGPL + Element Commercial (#3657)
* New LICENSE-COMMERCIAL file

* Apply dual licenses: AGPL + Element Commercial to file headers

* Update README with dual licensing
2025-01-06 11:27:37 +01:00

64 lines
2.1 KiB
Swift

//
// Copyright 2022-2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//
import Foundation
import UIKit
#if !os(OSX)
import DeviceKit
#endif
enum UserAgentBuilder {
static func makeASCIIUserAgent() -> String {
makeUserAgent()?.asciified() ?? "unknown"
}
static func makeUserAgent() -> String? {
let clientName = InfoPlistReader.app.bundleDisplayName
let clientVersion = InfoPlistReader.app.bundleShortVersionString
#if os(iOS)
let scale = UIScreen.main.scale
return if ProcessInfo.processInfo.isiOSAppOnMac {
String(format: "%@/%@ (Mac; macOS %@; Scale/%0.2f)",
clientName,
clientVersion,
ProcessInfo.processInfo.operatingSystemVersionString,
scale)
} else {
String(format: "%@/%@ (%@; iOS %@; Scale/%0.2f)",
clientName,
clientVersion,
Device.current.safeDescription,
UIDevice.current.systemVersion,
scale)
}
#elseif os(tvOS)
return String(format: "%@/%@ (%@; tvOS %@; Scale/%0.2f)",
clientName,
clientVersion,
Device.current.safeDescription,
UIDevice.current.systemVersion,
UIScreen.main.scale)
#elseif os(watchOS)
return String(format: "%@/%@ (%@; watchOS %@; Scale/%0.2f)",
clientName,
clientVersion,
Device.current.safeDescription,
WKInterfaceDevice.current.systemVersion,
WKInterfaceDevice.currentDevice.screenScale)
#elseif os(OSX)
return String(format: "%@/%@ (Mac; macOS %@)",
clientName,
clientVersion,
NSProcessInfo.processInfo.operatingSystemVersionString)
#else
return nil
#endif
}
}