Yattee v2 rewrite

This commit is contained in:
Arkadiusz Fal
2026-02-08 18:31:16 +01:00
parent 20d0cfc0c7
commit 05f921d605
1043 changed files with 163875 additions and 68430 deletions

View File

@@ -0,0 +1,58 @@
//
// ConnectivityMonitor.swift
// Yattee
//
// Network connectivity monitoring for offline mode support.
//
import Foundation
import Network
/// Monitors network connectivity status.
@Observable
final class ConnectivityMonitor: @unchecked Sendable {
/// Whether the device is currently online.
private(set) var isOnline: Bool = true
/// Whether we're on a cellular connection.
private(set) var isCellular: Bool = false
/// Whether the connection is considered expensive (cellular or hotspot).
private(set) var isExpensive: Bool = false
/// Whether the connection is constrained (low data mode).
private(set) var isConstrained: Bool = false
private let monitor = NWPathMonitor()
private let queue = DispatchQueue(label: "stream.yattee.connectivity")
// MARK: - Lifecycle
init() {
startMonitoring()
}
deinit {
stopMonitoring()
}
// MARK: - Monitoring
/// Start monitoring network connectivity.
func startMonitoring() {
monitor.pathUpdateHandler = { [weak self] path in
Task { @MainActor [weak self] in
self?.isOnline = path.status == .satisfied
self?.isCellular = path.usesInterfaceType(.cellular)
self?.isExpensive = path.isExpensive
self?.isConstrained = path.isConstrained
}
}
monitor.start(queue: queue)
}
/// Stop monitoring network connectivity.
func stopMonitoring() {
monitor.cancel()
}
}