BGTask.swift 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // LoopFollow
  2. // BGTask.swift
  3. import Foundation
  4. extension MainViewController {
  5. func scheduleBGTask(initialDelay: TimeInterval = 2) {
  6. let firstRun = Date().addingTimeInterval(initialDelay)
  7. TaskScheduler.shared.scheduleTask(id: .fetchBG, nextRun: firstRun) { [weak self] in
  8. guard let self = self else { return }
  9. self.bgTaskAction()
  10. }
  11. }
  12. func bgTaskAction() {
  13. // If anything goes wrong, try again in 60 seconds.
  14. TaskScheduler.shared.rescheduleTask(
  15. id: .fetchBG,
  16. to: Date().addingTimeInterval(60)
  17. )
  18. // A deconfigured source can no longer be in an error state.
  19. if Storage.shared.shareUserName.value == "" || Storage.shared.sharePassword.value == "" {
  20. BannerManager.shared.clear(.dexcom)
  21. }
  22. if !IsNightscoutEnabled() {
  23. BannerManager.shared.clear(.nightscout)
  24. }
  25. // If no Dexcom credentials and no Nightscout, schedule a retry in 60 seconds.
  26. if Storage.shared.shareUserName.value == "",
  27. Storage.shared.sharePassword.value == "",
  28. !IsNightscoutEnabled()
  29. {
  30. return
  31. }
  32. // If Dexcom credentials exist, fetch from DexShare
  33. if Storage.shared.shareUserName.value != "",
  34. Storage.shared.sharePassword.value != ""
  35. {
  36. webLoadDexShare()
  37. } else {
  38. webLoadNSBGData()
  39. }
  40. }
  41. }