mirror of
https://github.com/yattee/yattee.git
synced 2025-10-12 02:18:17 +00:00
Quality profiles
This commit is contained in:
102
Model/QualityProfilesModel.swift
Normal file
102
Model/QualityProfilesModel.swift
Normal file
@@ -0,0 +1,102 @@
|
||||
import Defaults
|
||||
import Foundation
|
||||
#if os(iOS)
|
||||
import Reachability
|
||||
import UIKit
|
||||
#endif
|
||||
|
||||
struct QualityProfilesModel {
|
||||
static let shared = QualityProfilesModel()
|
||||
|
||||
#if os(tvOS)
|
||||
var tvOSProfile: QualityProfile? {
|
||||
find(Defaults[.batteryNonCellularProfile])
|
||||
}
|
||||
#endif
|
||||
|
||||
func find(_ id: QualityProfile.ID) -> QualityProfile? {
|
||||
if id == "default" {
|
||||
return QualityProfile.defaultProfile
|
||||
} else if id == "highQuality" {
|
||||
return QualityProfile.highQualityProfile
|
||||
}
|
||||
|
||||
return Defaults[.qualityProfiles].first { $0.id == id }
|
||||
}
|
||||
|
||||
func add(_ qualityProfile: QualityProfile) {
|
||||
Defaults[.qualityProfiles].append(qualityProfile)
|
||||
}
|
||||
|
||||
func update(_ from: QualityProfile, _ to: QualityProfile) {
|
||||
if let index = Defaults[.qualityProfiles].firstIndex(where: { $0.id == from.id }) {
|
||||
Defaults[.qualityProfiles][index] = to
|
||||
}
|
||||
}
|
||||
|
||||
func remove(_ qualityProfile: QualityProfile) {
|
||||
if let index = Defaults[.qualityProfiles].firstIndex(where: { $0.id == qualityProfile.id }) {
|
||||
Defaults[.qualityProfiles].remove(at: index)
|
||||
}
|
||||
}
|
||||
|
||||
func applyToAll(_ qualityProfile: QualityProfile) {
|
||||
Defaults[.batteryCellularProfile] = qualityProfile.id
|
||||
Defaults[.batteryNonCellularProfile] = qualityProfile.id
|
||||
Defaults[.chargingCellularProfile] = qualityProfile.id
|
||||
Defaults[.chargingNonCellularProfile] = qualityProfile.id
|
||||
}
|
||||
|
||||
#if os(iOS)
|
||||
private func findCurrentConnection() -> Reachability.Connection? {
|
||||
do {
|
||||
let reachability: Reachability = try Reachability()
|
||||
return reachability.connection
|
||||
} catch {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
var automaticProfile: QualityProfile? {
|
||||
var id: QualityProfile.ID?
|
||||
|
||||
#if os(iOS)
|
||||
UIDevice.current.isBatteryMonitoringEnabled = true
|
||||
let unplugged = UIDevice.current.batteryState == .unplugged
|
||||
let connection = findCurrentConnection()
|
||||
|
||||
if unplugged {
|
||||
switch connection {
|
||||
case .wifi:
|
||||
id = Defaults[.batteryNonCellularProfile]
|
||||
default:
|
||||
id = Defaults[.batteryCellularProfile]
|
||||
}
|
||||
} else {
|
||||
switch connection {
|
||||
case .wifi:
|
||||
id = Defaults[.chargingNonCellularProfile]
|
||||
default:
|
||||
id = Defaults[.chargingCellularProfile]
|
||||
}
|
||||
}
|
||||
#elseif os(macOS)
|
||||
if Power.hasInternalBattery {
|
||||
if Power.isConnectedToPower {
|
||||
id = Defaults[.chargingNonCellularProfile]
|
||||
} else {
|
||||
id = Defaults[.batteryNonCellularProfile]
|
||||
}
|
||||
} else {
|
||||
id = Defaults[.chargingNonCellularProfile]
|
||||
}
|
||||
#else
|
||||
id = Defaults[.chargingNonCellularProfile]
|
||||
#endif
|
||||
|
||||
guard let id = id else { return nil }
|
||||
|
||||
return find(id)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user