Kaynağa Gözat

simple console logging
bolus/carb # digits fix
min basal/bg graph setting
drag lower graph to move upper graph
additional function call changes for speed
update snoozer bg - needs more work to update everything

Jon Fawcett 6 yıl önce
ebeveyn
işleme
29980fa53a

+ 2 - 2
LoopFollow/Controllers/Alarms.swift

@@ -13,7 +13,7 @@ extension MainViewController {
     
     
     
     
     func checkAlarms(bgs: [sgvData]) {
     func checkAlarms(bgs: [sgvData]) {
-           
+           print("ALARMS --- Checking")
            // Don't check or fire alarms within 1 minute of prior alarm
            // Don't check or fire alarms within 1 minute of prior alarm
            if checkAlarmTimer.isValid {  return }
            if checkAlarmTimer.isValid {  return }
            
            
@@ -262,7 +262,7 @@ extension MainViewController {
     func triggerAlarm(sound: String, snooozedBGReadingTime: TimeInterval?)
     func triggerAlarm(sound: String, snooozedBGReadingTime: TimeInterval?)
     {
     {
         guard let snoozer = self.tabBarController!.viewControllers?[2] as? SnoozeViewController else { return }
         guard let snoozer = self.tabBarController!.viewControllers?[2] as? SnoozeViewController else { return }
-        snoozer.updateDisplayWhenTriggered(bgVal: BGText.text ?? "", directionVal: DirectionText.text ?? "", deltaVal: DeltaText.text ?? "", minAgoVal: MinAgoText.text ?? "", alertLabelVal: AlarmSound.whichAlarm)
+        snoozer.updateDisplayWhenTriggered(bgVal: String(bgData[bgData.count - 1].sgv), directionVal: DirectionText.text ?? "", deltaVal: DeltaText.text ?? "", minAgoVal: MinAgoText.text ?? "", alertLabelVal: AlarmSound.whichAlarm)
         snoozeTabItem.isEnabled = true;
         snoozeTabItem.isEnabled = true;
         tabBarController?.selectedIndex = 2
         tabBarController?.selectedIndex = 2
         if snooozedBGReadingTime != nil {
         if snooozedBGReadingTime != nil {

+ 40 - 7
LoopFollow/Controllers/Graphs.swift

@@ -14,18 +14,31 @@ import UIKit
 extension MainViewController {
 extension MainViewController {
     
     
 
 
+    func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
+        if chartView == BGChartFull {
+            BGChart.moveViewToX(entry.x)
+        }
+    }
     
     
+    func chartTranslated(_ chartView: ChartViewBase, dX: CGFloat, dY: CGFloat) {
+        if chartView == BGChart {
+            let currentMatrix = chartView.viewPortHandler.touchMatrix
+            //BGChartFull.viewPortHandler.refresh(newMatrix: currentMatrix, chart: BGChartFull, invalidate: true)
+            //BGChartFull.highlightValue(x: Double(currentMatrix.tx), y: Double(currentMatrix.ty), dataSetIndex: 0)
+        }
+    }
 
 
     
     
     func createGraph(){
     func createGraph(){
         self.BGChart.clear()
         self.BGChart.clear()
-        
+        print("enter graph")
         // Create the BG Graph Data
         // Create the BG Graph Data
         let entries = bgData
         let entries = bgData
         var bgChartEntry = [ChartDataEntry]()
         var bgChartEntry = [ChartDataEntry]()
         var colors = [NSUIColor]()
         var colors = [NSUIColor]()
-        var maxBG: Int = 250
+        var maxBG: Int = UserDefaultsRepository.minBGScale.value
         if bgData.count > 0 {
         if bgData.count > 0 {
+            print("graph - bg")
             for i in 0..<entries.count{
             for i in 0..<entries.count{
                 var dateString = String(entries[i].date).prefix(10)
                 var dateString = String(entries[i].date).prefix(10)
                 let dateSecondsOnly = Double(String(dateString))!
                 let dateSecondsOnly = Double(String(dateString))!
@@ -47,6 +60,7 @@ extension MainViewController {
         
         
         // Add Prediction Data
         // Add Prediction Data
         if predictionData.count > 0 && bgData.count > 0 && UserDefaultsRepository.graphPrediction.value {
         if predictionData.count > 0 && bgData.count > 0 && UserDefaultsRepository.graphPrediction.value {
+            print("graph prediction")
             var startingTime = bgChartEntry[bgChartEntry.count - 1].x + 300
             var startingTime = bgChartEntry[bgChartEntry.count - 1].x + 300
             var i = 0
             var i = 0
             // Add 1 hour of predictions
             // Add 1 hour of predictions
@@ -90,6 +104,7 @@ extension MainViewController {
         lineBG.valueFont.withSize(50)
         lineBG.valueFont.withSize(50)
         
         
         if colors.count > 0 {
         if colors.count > 0 {
+            print("graph colors")
             for i in 1..<colors.count{
             for i in 1..<colors.count{
                 lineBG.addColor(colors[i])
                 lineBG.addColor(colors[i])
                 lineBG.circleColors.append(colors[i])
                 lineBG.circleColors.append(colors[i])
@@ -99,8 +114,9 @@ extension MainViewController {
 
 
         // create Basal graph data
         // create Basal graph data
         var chartEntry = [ChartDataEntry]()
         var chartEntry = [ChartDataEntry]()
-        var maxBasal = 1.0
+        var maxBasal = UserDefaultsRepository.minBasalScale.value
         if basalData.count > 0  && UserDefaultsRepository.graphBasal.value {
         if basalData.count > 0  && UserDefaultsRepository.graphBasal.value {
+            print("graph basal")
             for i in 0..<basalData.count{
             for i in 0..<basalData.count{
                 let value = ChartDataEntry(x: Double(basalData[i].date), y: Double(basalData[i].basalRate))
                 let value = ChartDataEntry(x: Double(basalData[i].date), y: Double(basalData[i].basalRate))
                 chartEntry.append(value)
                 chartEntry.append(value)
@@ -124,8 +140,13 @@ extension MainViewController {
         // Boluses
         // Boluses
         var chartEntryBolus = [ChartDataEntry]()
         var chartEntryBolus = [ChartDataEntry]()
         if bolusData.count > 0  && UserDefaultsRepository.graphBolus.value {
         if bolusData.count > 0  && UserDefaultsRepository.graphBolus.value {
+            print("graph bolus")
             for i in 0..<bolusData.count{
             for i in 0..<bolusData.count{
-                let value = ChartDataEntry(x: Double(bolusData[i].date), y: Double(bolusData[i].sgv + 10), data: String(bolusData[i].value))
+                let formatter = NumberFormatter()
+                formatter.minimumFractionDigits = 0
+                formatter.maximumFractionDigits = 2
+                formatter.minimumIntegerDigits = 1
+                let value = ChartDataEntry(x: Double(bolusData[i].date), y: Double(bolusData[i].sgv + 10), data: formatter.string(from: NSNumber(value: bolusData[i].value)))
                 chartEntryBolus.append(value)
                 chartEntryBolus.append(value)
             }
             }
         }
         }
@@ -146,8 +167,13 @@ extension MainViewController {
         // Carbs
         // Carbs
         var chartEntryCarbs = [ChartDataEntry]()
         var chartEntryCarbs = [ChartDataEntry]()
         if carbData.count > 0  && UserDefaultsRepository.graphCarbs.value {
         if carbData.count > 0  && UserDefaultsRepository.graphCarbs.value {
+            print("graph carbs")
             for i in 0..<carbData.count{
             for i in 0..<carbData.count{
-                let value = ChartDataEntry(x: Double(carbData[i].date), y: Double(carbData[i].sgv + 30), data: String(carbData[i].value))
+                let formatter = NumberFormatter()
+                formatter.minimumFractionDigits = 0
+                formatter.maximumFractionDigits = 2
+                formatter.minimumIntegerDigits = 1
+                let value = ChartDataEntry(x: Double(carbData[i].date), y: Double(carbData[i].sgv + 30), data: formatter.string(from: NSNumber(value: carbData[i].value)))
                 chartEntryCarbs.append(value)
                 chartEntryCarbs.append(value)
             }
             }
         }
         }
@@ -237,11 +263,17 @@ extension MainViewController {
     
     
     
     
     func createSmallBGGraph(bgChartEntry: [ChartDataEntry], colors: [NSUIColor]){
     func createSmallBGGraph(bgChartEntry: [ChartDataEntry], colors: [NSUIColor]){
+        print("small graph")
         //24 Hour Small Graph
         //24 Hour Small Graph
         let line2 = LineChartDataSet(entries:bgChartEntry, label: "Number")
         let line2 = LineChartDataSet(entries:bgChartEntry, label: "Number")
         line2.drawCirclesEnabled = false
         line2.drawCirclesEnabled = false
-        line2.setDrawHighlightIndicators(false)
-        line2.lineWidth = 1
+        //line2.setDrawHighlightIndicators(false)
+        line2.highlightEnabled = true
+        line2.drawHorizontalHighlightIndicatorEnabled = false
+        line2.drawVerticalHighlightIndicatorEnabled = false
+        line2.highlightColor = NSUIColor.label
+        line2.drawValuesEnabled = false
+        line2.lineWidth = 2
         for i in 1..<colors.count{
         for i in 1..<colors.count{
             line2.addColor(colors[i])
             line2.addColor(colors[i])
             line2.circleColors.append(colors[i])
             line2.circleColors.append(colors[i])
@@ -249,6 +281,7 @@ extension MainViewController {
         
         
         let data2 = LineChartData()
         let data2 = LineChartData()
         data2.addDataSet(line2)
         data2.addDataSet(line2)
+        BGChartFull.highlightPerDragEnabled = true
         BGChartFull.leftAxis.enabled = false
         BGChartFull.leftAxis.enabled = false
         BGChartFull.rightAxis.enabled = false
         BGChartFull.rightAxis.enabled = false
         BGChartFull.xAxis.enabled = false
         BGChartFull.xAxis.enabled = false

+ 64 - 29
LoopFollow/Controllers/NightScout.swift

@@ -12,6 +12,38 @@ import UIKit
 
 
 extension MainViewController {
 extension MainViewController {
     
     
+    //NS BG Struct
+    struct sgvData: Codable {
+        var sgv: Int
+        var date: TimeInterval
+        var direction: String?
+    }
+    
+    //NS Cage Struct
+    struct cageData: Codable {
+        var created_at: String
+    }
+    
+    //NS Basal Profile Struct
+    struct basalProfileStruct: Codable {
+        var value: Double
+        var time: String
+        var timeAsSeconds: Double
+    }
+    
+    //NS Basal Data  Struct
+    struct basalGraphStruct: Codable {
+        var basalRate: Double
+        var date: TimeInterval
+    }
+    
+    //NS Bolus Data  Struct
+    struct bolusCarbGraphStruct: Codable {
+        var value: Double
+        var date: TimeInterval
+        var sgv: Int
+    }
+    
     
     
     // Main loader for all data
     // Main loader for all data
     func nightscoutLoader(forceLoad: Bool = false) {
     func nightscoutLoader(forceLoad: Bool = false) {
@@ -35,10 +67,10 @@ extension MainViewController {
         }
         }
         
         
         if forceLoad { needsLoaded = true}
         if forceLoad { needsLoaded = true}
-        // Only do the network calls if we don't have a current reading
+        // Only update if we don't have a current reading
         if needsLoaded {
         if needsLoaded {
             self.clearLastInfoData()
             self.clearLastInfoData()
-            // Dispatch and process json for all web calls before proceeeding
+            
             webLoadNSProfile()
             webLoadNSProfile()
             WebLoadNSTempBasals()
             WebLoadNSTempBasals()
             webLoadNSDeviceStatus()
             webLoadNSDeviceStatus()
@@ -52,27 +84,23 @@ extension MainViewController {
             self.startViewTimer(time: viewTimeInterval)
             self.startViewTimer(time: viewTimeInterval)
            
            
         } else {
         } else {
-            // Dispatch and process json for all web calls before proceeeding
-            webLoadNSProfile()
-            WebLoadNSTempBasals()
             webLoadNSDeviceStatus()
             webLoadNSDeviceStatus()
             webLoadNSBoluses()
             webLoadNSBoluses()
             webLoadNSCarbs()
             webLoadNSCarbs()
-           
-            if bgData.count > 0 {
-                self.viewUpdateNSBG()
-                self.createGraph()
-                self.updateMinAgo()
-                self.clearOldSnoozes()
-                self.checkAlarms(bgs: self.bgData)
-            }
+            
         }
         }
         
         
+        if bgData.count > 0 {
+            self.updateMinAgo()
+            self.checkAlarms(bgs: self.bgData)
+        }
+        
+
     }
     }
     
     
     // NS BG Data Web call
     // NS BG Data Web call
     func webLoadNSBGData(onlyPullLastRecord: Bool = false) {
     func webLoadNSBGData(onlyPullLastRecord: Bool = false) {
-        
+        print("Enter BG Web Call")
         // Set the count= in the url either to pull 24 hours or only the last record
         // Set the count= in the url either to pull 24 hours or only the last record
         var points = "1"
         var points = "1"
         if !onlyPullLastRecord {
         if !onlyPullLastRecord {
@@ -124,6 +152,7 @@ extension MainViewController {
        
        
     // NS BG Data Response processor
     // NS BG Data Response processor
     func ProcessNSBGData(data: [sgvData], onlyPullLastRecord: Bool){
     func ProcessNSBGData(data: [sgvData], onlyPullLastRecord: Bool){
+        print("Enter BG Processor")
         var pullDate = data[data.count - 1].date / 1000
         var pullDate = data[data.count - 1].date / 1000
         pullDate.round(FloatingPointRoundingRule.toNearestOrEven)
         pullDate.round(FloatingPointRoundingRule.toNearestOrEven)
         
         
@@ -136,9 +165,11 @@ extension MainViewController {
                 speakBG(sgv: data[data.count - 1].sgv)
                 speakBG(sgv: data[data.count - 1].sgv)
             }
             }
         } else {
         } else {
-            // Update the badge, bg, graph settings even if we don't have a new reading.
-            self.updateBadge()
-            self.viewUpdateNSBG()
+            if data.count > 0 {
+                self.updateBadge(val: data[data.count - 1].sgv)
+            }
+            
+           // self.viewUpdateNSBG()
             return
             return
         }
         }
         
         
@@ -151,6 +182,7 @@ extension MainViewController {
         }
         }
         
         
         if firstGraphLoad {
         if firstGraphLoad {
+            print("Do ViewUpdateNSBG and CreateGraph first load")
             viewUpdateNSBG()
             viewUpdateNSBG()
             createGraph()
             createGraph()
         }
         }
@@ -158,6 +190,7 @@ extension MainViewController {
     
     
     // NS BG Data Front end updater
     // NS BG Data Front end updater
     func viewUpdateNSBG () {
     func viewUpdateNSBG () {
+        print("Enter BG View Update")
         let entries = bgData
         let entries = bgData
         if entries.count > 0 {
         if entries.count > 0 {
             let latestEntryi = entries.count - 1
             let latestEntryi = entries.count - 1
@@ -170,17 +203,10 @@ extension MainViewController {
             if mmol {
             if mmol {
                 userUnit = " mmol/L"
                 userUnit = " mmol/L"
             }
             }
-            if UserDefaultsRepository.appBadge.value {
-                UIApplication.shared.applicationIconBadgeNumber = latestBG
-            } else {
-                UIApplication.shared.applicationIconBadgeNumber = 0
-            }
             
             
             BGText.text = bgOutputFormat(bg: Double(latestBG), mmol: mmol)
             BGText.text = bgOutputFormat(bg: Double(latestBG), mmol: mmol)
             setBGTextColor()
             setBGTextColor()
 
 
-            MinAgoText.text = String(Int(deltaTime)) + " min ago"
-            print(String(Int(deltaTime)) + " min ago")
             if let directionBG = entries[latestEntryi].direction {
             if let directionBG = entries[latestEntryi].direction {
                 DirectionText.text = bgDirectionGraphic(directionBG)
                 DirectionText.text = bgDirectionGraphic(directionBG)
             }
             }
@@ -204,11 +230,11 @@ extension MainViewController {
             return
             return
         }
         }
         
         
-        checkAlarms(bgs: entries)
     }
     }
     
     
      // NS Device Status Web Call
      // NS Device Status Web Call
       func webLoadNSDeviceStatus() {
       func webLoadNSDeviceStatus() {
+        print("Enter download device status")
         let urlUser = UserDefaultsRepository.url.value
         let urlUser = UserDefaultsRepository.url.value
           var urlStringDeviceStatus = urlUser + "/api/v1/devicestatus.json?count=1"
           var urlStringDeviceStatus = urlUser + "/api/v1/devicestatus.json?count=1"
           if token != "" {
           if token != "" {
@@ -250,6 +276,7 @@ extension MainViewController {
       
       
       // NS Device Status Response Processor
       // NS Device Status Response Processor
       func updateDeviceStatusDisplay(jsonDeviceStatus: [[String:AnyObject]]) {
       func updateDeviceStatusDisplay(jsonDeviceStatus: [[String:AnyObject]]) {
+        print("Enter process device status")
           if consoleLogging == true {print("in updatePump")}
           if consoleLogging == true {print("in updatePump")}
           if jsonDeviceStatus.count == 0 {
           if jsonDeviceStatus.count == 0 {
             return
             return
@@ -364,6 +391,7 @@ extension MainViewController {
       
       
       // NS Cage Web Call
       // NS Cage Web Call
       func webLoadNSCage() {
       func webLoadNSCage() {
+        print("enter download cage")
         let urlUser = UserDefaultsRepository.url.value
         let urlUser = UserDefaultsRepository.url.value
           var urlString = urlUser + "/api/v1/treatments.json?find[eventType]=Site%20Change&count=1"
           var urlString = urlUser + "/api/v1/treatments.json?find[eventType]=Site%20Change&count=1"
           if token != "" {
           if token != "" {
@@ -400,6 +428,7 @@ extension MainViewController {
        
        
       // NS Cage Response Processor
       // NS Cage Response Processor
       func updateCage(data: [cageData]) {
       func updateCage(data: [cageData]) {
+        print("enter process cage")
           if consoleLogging == true {print("in updateCage")}
           if consoleLogging == true {print("in updateCage")}
           if data.count == 0 {
           if data.count == 0 {
               return
               return
@@ -431,6 +460,7 @@ extension MainViewController {
        
        
       // NS Sage Web Call
       // NS Sage Web Call
       func webLoadNSSage() {
       func webLoadNSSage() {
+        print("enter download sage")
           var dayComponent    = DateComponents()
           var dayComponent    = DateComponents()
           dayComponent.day    = -10 // For removing 10 days
           dayComponent.day    = -10 // For removing 10 days
           let theCalendar     = Calendar.current
           let theCalendar     = Calendar.current
@@ -476,6 +506,7 @@ extension MainViewController {
        
        
       // NS Sage Response Processor
       // NS Sage Response Processor
       func updateSage(data: [cageData]) {
       func updateSage(data: [cageData]) {
+        print("enter update sage")
           if consoleLogging == true {print("in updateSage")}
           if consoleLogging == true {print("in updateSage")}
           if data.count == 0 {
           if data.count == 0 {
               return
               return
@@ -507,6 +538,7 @@ extension MainViewController {
        
        
       // NS Profile Web Call
       // NS Profile Web Call
       func webLoadNSProfile() {
       func webLoadNSProfile() {
+        print("enter download profile")
           
           
         let urlString = UserDefaultsRepository.url.value + "/api/v1/profile/current.json"
         let urlString = UserDefaultsRepository.url.value + "/api/v1/profile/current.json"
           let escapedAddress = urlString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)
           let escapedAddress = urlString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)
@@ -540,6 +572,7 @@ extension MainViewController {
       
       
       // NS Profile Response Processor
       // NS Profile Response Processor
       func updateProfile(jsonDeviceStatus: Dictionary<String, Any>) {
       func updateProfile(jsonDeviceStatus: Dictionary<String, Any>) {
+        print("enter process profile")
           if jsonDeviceStatus.count == 0 {
           if jsonDeviceStatus.count == 0 {
               return
               return
           }
           }
@@ -552,11 +585,11 @@ extension MainViewController {
               let entry = basalProfileStruct(value: thisValue, time: thisTime, timeAsSeconds: thisTimeAsSeconds)
               let entry = basalProfileStruct(value: thisValue, time: thisTime, timeAsSeconds: thisTimeAsSeconds)
               basalProfile.append(entry)
               basalProfile.append(entry)
           }
           }
-          
       }
       }
       
       
         // NS Temp Basal Web Call
         // NS Temp Basal Web Call
       func WebLoadNSTempBasals() {
       func WebLoadNSTempBasals() {
+        print("enter download basals")
         if !UserDefaultsRepository.downloadBasal.value { return }
         if !UserDefaultsRepository.downloadBasal.value { return }
         
         
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
@@ -596,6 +629,7 @@ extension MainViewController {
       
       
     // NS Temp Basal Response Processor
     // NS Temp Basal Response Processor
       func updateBasals(entries: [[String:AnyObject]]) {
       func updateBasals(entries: [[String:AnyObject]]) {
+        print("enter process basal")
           // due to temp basal durations, we're going to destroy the array and load everything each cycle for the time being.
           // due to temp basal durations, we're going to destroy the array and load everything each cycle for the time being.
           basalData.removeAll()
           basalData.removeAll()
           
           
@@ -730,11 +764,11 @@ extension MainViewController {
              }
              }
             
             
         
         
- 
       }
       }
     
     
     // NS Bolus Web Call
     // NS Bolus Web Call
       func webLoadNSBoluses(){
       func webLoadNSBoluses(){
+        print("enter download bolus")
         if !UserDefaultsRepository.downloadBolus.value { return }
         if !UserDefaultsRepository.downloadBolus.value { return }
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let urlUser = UserDefaultsRepository.url.value
         let urlUser = UserDefaultsRepository.url.value
@@ -775,6 +809,7 @@ extension MainViewController {
     
     
     // NS Meal Bolus Response Processor
     // NS Meal Bolus Response Processor
          func processNSBolus(entries: [[String:AnyObject]]) {
          func processNSBolus(entries: [[String:AnyObject]]) {
+            print("enter process bolus")
              // because it's a small array, we're going to destroy and reload every time.
              // because it's a small array, we're going to destroy and reload every time.
              bolusData.removeAll()
              bolusData.removeAll()
              var lastFoundIndex = 0
              var lastFoundIndex = 0
@@ -800,12 +835,12 @@ extension MainViewController {
                 
                 
             }
             }
 
 
-           
          }
          }
     
     
     
     
     // NS Carb Web Call
     // NS Carb Web Call
       func webLoadNSCarbs(){
       func webLoadNSCarbs(){
+        print("enter download carbs")
         if !UserDefaultsRepository.downloadCarbs.value { return }
         if !UserDefaultsRepository.downloadCarbs.value { return }
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let urlUser = UserDefaultsRepository.url.value
         let urlUser = UserDefaultsRepository.url.value
@@ -846,6 +881,7 @@ extension MainViewController {
     
     
     // NS Carb Bolus Response Processor
     // NS Carb Bolus Response Processor
          func processNSCarbs(entries: [[String:AnyObject]]) {
          func processNSCarbs(entries: [[String:AnyObject]]) {
+            print("enter process carbs")
              // because it's a small array, we're going to destroy and reload every time.
              // because it's a small array, we're going to destroy and reload every time.
              carbData.removeAll()
              carbData.removeAll()
              var lastFoundIndex = 0
              var lastFoundIndex = 0
@@ -870,6 +906,5 @@ extension MainViewController {
                 }
                 }
             }
             }
 
 
-
          }
          }
 }
 }

+ 10 - 38
LoopFollow/ViewControllers/MainViewController.swift

@@ -25,37 +25,7 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
     @IBOutlet weak var PredictionLabel: UILabel!
     @IBOutlet weak var PredictionLabel: UILabel!
     @IBOutlet weak var LoopStatusLabel: UILabel!
     @IBOutlet weak var LoopStatusLabel: UILabel!
     
     
-    //NS BG Struct
-    struct sgvData: Codable {
-        var sgv: Int
-        var date: TimeInterval
-        var direction: String?
-    }
-    
-    //NS Cage Struct
-    struct cageData: Codable {
-        var created_at: String
-    }
-    
-    //NS Basal Profile Struct
-    struct basalProfileStruct: Codable {
-        var value: Double
-        var time: String
-        var timeAsSeconds: Double
-    }
-    
-    //NS Basal Data  Struct
-    struct basalGraphStruct: Codable {
-        var basalRate: Double
-        var date: TimeInterval
-    }
     
     
-    //NS Bolus Data  Struct
-    struct bolusCarbGraphStruct: Codable {
-        var value: Double
-        var date: TimeInterval
-        var sgv: Int
-    }
     
     
     // Data Table Struct
     // Data Table Struct
     struct infoData {
     struct infoData {
@@ -127,6 +97,7 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
         super.viewDidLoad()
         super.viewDidLoad()
         
         
         BGChart.delegate = self
         BGChart.delegate = self
+        BGChartFull.delegate = self
         
         
         if UserDefaultsRepository.forceDarkMode.value {
         if UserDefaultsRepository.forceDarkMode.value {
             overrideUserInterfaceStyle = .dark
             overrideUserInterfaceStyle = .dark
@@ -209,11 +180,11 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
     
     
     // Check for new data when timer ends
     // Check for new data when timer ends
        @objc func viewTimerDidEnd(_ timer:Timer) {
        @objc func viewTimerDidEnd(_ timer:Timer) {
-           if bgData.count > 0 {
-               self.clearOldSnoozes()
+        print("view timer ended")
+        if bgData.count > 0 {
                 self.checkAlarms(bgs: bgData)
                 self.checkAlarms(bgs: bgData)
                 self.updateMinAgo()
                 self.updateMinAgo()
-                self.updateBadge()
+            self.updateBadge(val: bgData[bgData.count - 1].sgv)
                self.viewUpdateNSBG()
                self.viewUpdateNSBG()
                if UserDefaultsRepository.writeCalendarEvent.value {
                if UserDefaultsRepository.writeCalendarEvent.value {
                    self.writeCalendar()
                    self.writeCalendar()
@@ -258,7 +229,8 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
     
     
     // Check for new data when timer ends
     // Check for new data when timer ends
     @objc func timerDidEnd(_ timer:Timer) {
     @objc func timerDidEnd(_ timer:Timer) {
-        print("timer ended")
+        print("main timer ended")
+        self.clearOldSnoozes()
         nightscoutLoader()
         nightscoutLoader()
     }
     }
 
 
@@ -285,10 +257,9 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
 
 
     
     
     
     
-    func updateBadge() {
-        let entries = bgData
-        if entries.count > 0 && UserDefaultsRepository.appBadge.value {
-            let latestBG = entries[entries.count - 1].sgv
+    func updateBadge(val: Int) {
+        if UserDefaultsRepository.appBadge.value {
+            let latestBG = val
             UIApplication.shared.applicationIconBadgeNumber = latestBG
             UIApplication.shared.applicationIconBadgeNumber = latestBG
         } else {
         } else {
             UIApplication.shared.applicationIconBadgeNumber = 0
             UIApplication.shared.applicationIconBadgeNumber = 0
@@ -365,6 +336,7 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
             } else {
             } else {
                 eventTitle = eventTitle.replacingOccurrences(of: "%OVERRIDE%", with: "")
                 eventTitle = eventTitle.replacingOccurrences(of: "%OVERRIDE%", with: "")
             }
             }
+            eventTitle = eventTitle.replacingOccurrences(of: "%LOOP%", with: self.LoopStatusLabel.text ?? "")
             var minAgo = ""
             var minAgo = ""
             if deltaTime > 9 {
             if deltaTime > 9 {
                 // write old BG reading and continue pushing out end date to show last entry
                 // write old BG reading and continue pushing out end date to show last entry

Dosya farkı çok büyük olduğundan ihmal edildi
+ 25 - 1
LoopFollow/ViewControllers/SettingsViewController.swift


+ 1 - 0
LoopFollow/helpers/Chart.swift

@@ -10,6 +10,7 @@ import Foundation
 import Charts
 import Charts
 
 
 final class ChartXValueFormatter: IAxisValueFormatter {
 final class ChartXValueFormatter: IAxisValueFormatter {
+    
 
 
     func stringForValue(_ value: Double, axis: AxisBase?) -> String {
     func stringForValue(_ value: Double, axis: AxisBase?) -> String {
         
         

+ 2 - 0
LoopFollow/repository/UserDefaults.swift

@@ -19,6 +19,8 @@ class UserDefaultsRepository {
     static let showDots = UserDefaultsValue<Bool>(key: "showDots", default: true)
     static let showDots = UserDefaultsValue<Bool>(key: "showDots", default: true)
     static let showLines = UserDefaultsValue<Bool>(key: "showLines", default: true)
     static let showLines = UserDefaultsValue<Bool>(key: "showLines", default: true)
     static let hoursToLoad = UserDefaultsValue<Int>(key: "hoursToLoad", default: 24)
     static let hoursToLoad = UserDefaultsValue<Int>(key: "hoursToLoad", default: 24)
+    static let minBasalScale = UserDefaultsValue<Double>(key: "minBasalScale", default: 5.0)
+    static let minBGScale = UserDefaultsValue<Int>(key: "minBGScale", default: 250)
     static let lowLine = UserDefaultsValue<Int>(key: "lowLine", default: 70)
     static let lowLine = UserDefaultsValue<Int>(key: "lowLine", default: 70)
     static let highLine = UserDefaultsValue<Int>(key: "highLine", default: 180)
     static let highLine = UserDefaultsValue<Int>(key: "highLine", default: 180)