Newer Older
63 lines | 1.758kb
Bogdan Timofte authored a week ago
1
//
2
//  SidebarAutoHelpResolver.swift
3
//  USB Meter
4
//
5

            
6
import Foundation
7
import CoreBluetooth
8

            
9
enum SidebarAutoHelpResolver {
10
    static func activeReason(
11
        managerState: CBManagerState,
12
        cloudAvailability: MeterNameStore.CloudAvailability,
13
        hasLiveMeters: Bool,
14
        scanStartedAt: Date?,
15
        now: Date,
16
        noDevicesHelpDelay: TimeInterval
17
    ) -> SidebarHelpReason? {
18
        if managerState == .unauthorized {
19
            return .bluetoothPermission
20
        }
21
        if shouldPromptForCloudSync(cloudAvailability) {
22
            return .cloudSyncUnavailable
23
        }
24
        if hasWaitedLongEnoughForDevices(
25
            managerState: managerState,
26
            hasLiveMeters: hasLiveMeters,
27
            scanStartedAt: scanStartedAt,
28
            now: now,
29
            noDevicesHelpDelay: noDevicesHelpDelay
30
        ) {
31
            return .noDevicesDetected
32
        }
33
        return nil
34
    }
35

            
36
    private static func shouldPromptForCloudSync(_ cloudAvailability: MeterNameStore.CloudAvailability) -> Bool {
37
        switch cloudAvailability {
38
        case .noAccount, .error:
39
            return true
40
        case .unknown, .available:
41
            return false
42
        }
43
    }
44

            
45
    private static func hasWaitedLongEnoughForDevices(
46
        managerState: CBManagerState,
47
        hasLiveMeters: Bool,
48
        scanStartedAt: Date?,
49
        now: Date,
50
        noDevicesHelpDelay: TimeInterval
51
    ) -> Bool {
52
        guard managerState == .poweredOn else {
53
            return false
54
        }
55
        guard hasLiveMeters == false else {
56
            return false
57
        }
58
        guard let scanStartedAt else {
59
            return false
60
        }
61
        return now.timeIntervalSince(scanStartedAt) >= noDevicesHelpDelay
62
    }
63
}