Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions CGMBLEKit/TransmitterManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,16 @@ public struct TransmitterManagerState: RawRepresentable, Equatable {
}


public protocol TransmitterManagerObserver: class {
func transmitterManagerDidUpdateLatestReading(_ manager: TransmitterManager)
}


public class TransmitterManager: TransmitterDelegate {
private var state: TransmitterManagerState

private let observers = Locked(NSHashTable<AnyObject>.weakObjects())

public required init(state: TransmitterManagerState) {
self.state = state
self.transmitter = Transmitter(id: state.transmitterID, passiveModeEnabled: state.passiveModeEnabled)
Expand Down Expand Up @@ -143,6 +150,7 @@ public class TransmitterManager: TransmitterDelegate {
"dataIsFresh: \(dataIsFresh)",
"providesBLEHeartbeat: \(providesBLEHeartbeat)",
shareManager.debugDescription,
"observers.count: \(observers.value.count)",
""
].joined(separator: "\n")
}
Expand All @@ -151,6 +159,8 @@ public class TransmitterManager: TransmitterDelegate {
if let manager = self as? CGMManager {
delegate?.cgmManager(manager, didUpdateWith: result)
}

notifyObserversOfLatestReading()
}

// MARK: - TransmitterDelegate
Expand Down Expand Up @@ -221,6 +231,32 @@ public class TransmitterManager: TransmitterDelegate {
}


// MARK: - Observer management
extension TransmitterManager {
public func addObserver(_ observer: TransmitterManagerObserver) {
_ = observers.mutate { (observerTable) in
observerTable.add(observer as AnyObject)
}
}

public func removeObserver(_ observer: TransmitterManagerObserver) {
_ = observers.mutate { (observerTable) in
observerTable.remove(observer as AnyObject)
}
}

private func notifyObserversOfLatestReading() {
let observers = self.observers.value.objectEnumerator()

for observer in observers {
if let observer = observer as? TransmitterManagerObserver {
observer.transmitterManagerDidUpdateLatestReading(self)
}
}
}
}


public class G5CGMManager: TransmitterManager, CGMManager {
public static let managerIdentifier: String = "DexG5Transmitter"

Expand Down
11 changes: 11 additions & 0 deletions CGMBLEKitUI/TransmitterSettingsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ class TransmitterSettingsViewController: UITableViewController {
self.glucoseUnit = glucoseUnit

super.init(style: .grouped)

cgmManager.addObserver(self)
}

required init?(coder aDecoder: NSCoder) {
Expand Down Expand Up @@ -350,6 +352,15 @@ class TransmitterSettingsViewController: UITableViewController {
}


extension TransmitterSettingsViewController: TransmitterManagerObserver {
func transmitterManagerDidUpdateLatestReading(_ manager: TransmitterManager) {
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}


private extension UIAlertController {
convenience init(cgmDeletionHandler handler: @escaping () -> Void) {
self.init(
Expand Down