Przeglądaj źródła

tweaks for the dispatch to make all data load before trying to draw the graph
tweak to iPad constraints for the top BG area

Jon Fawcett 6 lat temu
rodzic
commit
aa54d70f8d

+ 3 - 3
LoopFollow/Application/Base.lproj/Main.storyboard

@@ -28,16 +28,16 @@
                                                 <nil key="textColor"/>
                                                 <nil key="highlightedColor"/>
                                             </label>
-                                            <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KZc-fa-qmt">
+                                            <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="KZc-fa-qmt">
                                                 <rect key="frame" x="0.0" y="139.66666666666666" width="144" height="71.666666666666657"/>
                                                 <subviews>
-                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" ambiguous="YES" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4sd-6h-LSj" userLabel="Direction">
+                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4sd-6h-LSj" userLabel="Direction">
                                                         <rect key="frame" x="0.0" y="0.0" width="72" height="71.666666666666671"/>
                                                         <fontDescription key="fontDescription" type="system" weight="black" pointSize="60"/>
                                                         <nil key="textColor"/>
                                                         <nil key="highlightedColor"/>
                                                     </label>
-                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" ambiguous="YES" text="Delta" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sb7-g9-JNv" userLabel="Delta">
+                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="Delta" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sb7-g9-JNv" userLabel="Delta">
                                                         <rect key="frame" x="72" y="0.0" width="72" height="71.666666666666671"/>
                                                         <fontDescription key="fontDescription" type="system" pointSize="32"/>
                                                         <nil key="textColor"/>

+ 5 - 4
LoopFollow/Controllers/Graphs.swift

@@ -118,7 +118,7 @@ extension MainViewController {
         // Boluses
         var chartEntryBolus = [ChartDataEntry]()
         for i in 0..<bolusData.count{
-            let value = ChartDataEntry(x: Double(bolusData[i].date), y: Double(bolusData[i].sgv), data: String(bolusData[i].value))
+            let value = ChartDataEntry(x: Double(bolusData[i].date), y: Double(bolusData[i].sgv + 10), data: String(bolusData[i].value))
             chartEntryBolus.append(value)
         }
         let lineBolus = LineChartDataSet(entries:chartEntryBolus, label: "")
@@ -138,7 +138,7 @@ extension MainViewController {
         // Carbs
         var chartEntryCarbs = [ChartDataEntry]()
         for i in 0..<carbData.count{
-            let value = ChartDataEntry(x: Double(carbData[i].date), y: Double(carbData[i].sgv), data: String(carbData[i].value))
+            let value = ChartDataEntry(x: Double(carbData[i].date), y: Double(carbData[i].sgv + 30), data: String(carbData[i].value))
             chartEntryCarbs.append(value)
         }
         let lineCarbs = LineChartDataSet(entries:chartEntryCarbs, label: "")
@@ -164,8 +164,9 @@ extension MainViewController {
         
         
         // Add marker popups for bolus and carbs
-        let marker = PillMarker(color: .secondarySystemBackground, font: UIFont.boldSystemFont(ofSize: 14), textColor: .label)
-        BGChart.marker = marker
+        // Changed to display values
+        //let marker = PillMarker(color: .secondarySystemBackground, font: UIFont.boldSystemFont(ofSize: 14), textColor: .label)
+        //BGChart.marker = marker
         
         // Clear limit lines so they don't add multiples when changing the settings
         BGChart.rightAxis.removeAllLimitLines()

+ 41 - 33
LoopFollow/Controllers/NightScout.swift

@@ -68,6 +68,7 @@ extension MainViewController {
             webLoadNSCarbs()
            
             chartDispatch.notify(queue: .main){
+                
                 self.createGraph()
                 self.updateMinAgo()
                 self.clearOldSnoozes()
@@ -93,7 +94,11 @@ extension MainViewController {
         } else {
             urlBGDataPath = urlBGDataPath + "token=" + token + "&count=" + points
         }
-        guard let urlBGData = URL(string: urlBGDataPath) else { return }
+        guard let urlBGData = URL(string: urlBGDataPath) else {
+            
+            return
+            
+        }
         var request = URLRequest(url: urlBGData)
         request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
 
@@ -101,9 +106,11 @@ extension MainViewController {
         let getBGTask = URLSession.shared.dataTask(with: request) { data, response, error in
             if self.consoleLogging == true {print("start bg url")}
             guard error == nil else {
+
                 return
             }
             guard let data = data else {
+
                 return
             }
 
@@ -123,6 +130,7 @@ extension MainViewController {
        
     // NS BG Data Response processor
     func ProcessNSBGData(data: [sgvData], onlyPullLastRecord: Bool){
+        defer { chartDispatch.leave() }
         var pullDate = data[data.count - 1].date / 1000
         pullDate.round(FloatingPointRoundingRule.toNearestOrEven)
         
@@ -145,7 +153,6 @@ extension MainViewController {
             let reading = sgvData(sgv: data[data.count - 1 - i].sgv, date: dateString, direction: data[data.count - 1 - i].direction)
             bgData.append(reading)
         }
-        chartDispatch.leave()
        }
     
     // NS BG Data Front end updater
@@ -201,6 +208,7 @@ extension MainViewController {
     
      // NS Device Status Web Call
       func webLoadNSDeviceStatus() {
+        self.chartDispatch.enter()
         let urlUser = UserDefaultsRepository.url.value
           var urlStringDeviceStatus = urlUser + "/api/v1/devicestatus.json?count=1"
           if token != "" {
@@ -208,7 +216,8 @@ extension MainViewController {
           }
           let escapedAddress = urlStringDeviceStatus.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)
           guard let urlDeviceStatus = URL(string: escapedAddress!) else {
-              return
+              
+            return
           }
           if consoleLogging == true {print("entered device status task.")}
           var requestDeviceStatus = URLRequest(url: urlDeviceStatus)
@@ -216,10 +225,10 @@ extension MainViewController {
           let deviceStatusTask = URLSession.shared.dataTask(with: requestDeviceStatus) { data, response, error in
           if self.consoleLogging == true {print("in device status loop.")}
           guard error == nil else {
-              return
+            return
           }
           guard let data = data else {
-              return
+            return
           }
               
               let json = try? (JSONSerialization.jsonObject(with: data) as! [[String:AnyObject]])
@@ -228,7 +237,7 @@ extension MainViewController {
                   self.updateDeviceStatusDisplay(jsonDeviceStatus: json)
               }
           } else {
-              return
+            return
           }
           if self.consoleLogging == true {print("finish pump update")}}
           deviceStatusTask.resume()
@@ -236,9 +245,10 @@ extension MainViewController {
       
       // NS Device Status Response Processor
       func updateDeviceStatusDisplay(jsonDeviceStatus: [[String:AnyObject]]) {
+        defer { chartDispatch.leave() }
           if consoleLogging == true {print("in updatePump")}
           if jsonDeviceStatus.count == 0 {
-              return
+            return
           }
           
           //only grabbing one record since ns sorts by {created_at : -1}
@@ -498,21 +508,21 @@ extension MainViewController {
        
       // NS Profile Web Call
       func webLoadNSProfile() {
-          chartDispatch.enter()
+          self.chartDispatch.enter()
         let urlString = UserDefaultsRepository.url.value + "/api/v1/profile/current.json"
           let escapedAddress = urlString.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed)
           guard let url = URL(string: escapedAddress!) else {
-              return
+            return
           }
           
           var request = URLRequest(url: url)
           request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
           let task = URLSession.shared.dataTask(with: request) { data, response, error in
               guard error == nil else {
-                  return
+                return
               }
               guard let data = data else {
-                  return
+                return
               }
               
               
@@ -523,7 +533,7 @@ extension MainViewController {
                       self.updateProfile(jsonDeviceStatus: json)
                   }
               } else {
-                  return
+                return
               }
           }
           task.resume()
@@ -531,7 +541,7 @@ extension MainViewController {
       
       // NS Profile Response Processor
       func updateProfile(jsonDeviceStatus: Dictionary<String, Any>) {
-        
+        defer { chartDispatch.leave() }
           if jsonDeviceStatus.count == 0 {
               return
           }
@@ -544,13 +554,12 @@ extension MainViewController {
               let entry = basalProfileStruct(value: thisValue, time: thisTime, timeAsSeconds: thisTimeAsSeconds)
               basalProfile.append(entry)
           }
-        chartDispatch.leave()
           
       }
       
         // NS Temp Basal Web Call
       func WebLoadNSTempBasals() {
-        chartDispatch.enter()
+        self.chartDispatch.enter()
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
 
         var urlString = UserDefaultsRepository.url.value + "/api/v1/treatments.json?find[eventType][$eq]=Temp%20Basal&find[created_at][$gte]=" + yesterdayString
@@ -588,7 +597,7 @@ extension MainViewController {
       
     // NS Temp Basal Response Processor
       func updateBasals(entries: [[String:AnyObject]]) {
-        
+        defer { chartDispatch.leave() }
           // due to temp basal durations, we're going to destroy the array and load everything each cycle for the time being.
           basalData.removeAll()
           
@@ -708,12 +717,11 @@ extension MainViewController {
             
         
  
-        chartDispatch.leave()
       }
     
     // NS Bolus Web Call
       func webLoadNSBoluses(){
-        chartDispatch.enter()
+        self.chartDispatch.enter()
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let urlUser = UserDefaultsRepository.url.value
           var searchString = "find[eventType]=Correction%20Bolus&find[created_at][$gte]=" + yesterdayString
@@ -726,17 +734,17 @@ extension MainViewController {
               urlDataPath = urlDataPath + "token=" + token + "&" + searchString
           }
           guard let urlData = URL(string: urlDataPath) else {
-              return
+            return
           }
           var request = URLRequest(url: urlData)
            request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
            let task = URLSession.shared.dataTask(with: request) { data, response, error in
           
                guard error == nil else {
-                   return
+                return
                }
                guard let data = data else {
-                   return
+                return
                }
                    
                let json = try? (JSONSerialization.jsonObject(with: data) as! [[String:AnyObject]])
@@ -745,7 +753,7 @@ extension MainViewController {
                        self.processNSBolus(entries: json)
                    }
                } else {
-                   return
+                return
                }
            }
            task.resume()
@@ -753,7 +761,7 @@ extension MainViewController {
     
     // NS Meal Bolus Response Processor
          func processNSBolus(entries: [[String:AnyObject]]) {
-           
+            defer { chartDispatch.leave() }
              // because it's a small array, we're going to destroy and reload every time.
              bolusData.removeAll()
              var lastFoundIndex = 0
@@ -772,17 +780,17 @@ extension MainViewController {
                 lastFoundIndex = sgv.foundIndex
                 
                  // Make the dot
-                let dot = bolusCarbGraphStruct(value: bolus, date: Double(dateTimeStamp), sgv: Int(sgv.sgv + 10))
+                let dot = bolusCarbGraphStruct(value: bolus, date: Double(dateTimeStamp), sgv: Int(sgv.sgv))
                  bolusData.append(dot)
             }
 
-           chartDispatch.leave()
+           
          }
     
     
     // NS Carb Web Call
       func webLoadNSCarbs(){
-        chartDispatch.enter()
+        self.chartDispatch.enter()
         let yesterdayString = dateTimeUtils.nowMinus24HoursTimeInterval()
         let urlUser = UserDefaultsRepository.url.value
           var searchString = "find[eventType]=Meal%20Bolus&find[created_at][$gte]=" + yesterdayString
@@ -795,17 +803,17 @@ extension MainViewController {
               urlDataPath = urlDataPath + "token=" + token + "&" + searchString
           }
           guard let urlData = URL(string: urlDataPath) else {
-              return
+            return
           }
           var request = URLRequest(url: urlData)
            request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
            let task = URLSession.shared.dataTask(with: request) { data, response, error in
           
                guard error == nil else {
-                   return
+                return
                }
                guard let data = data else {
-                   return
+                return
                }
                    
                let json = try? (JSONSerialization.jsonObject(with: data) as! [[String:AnyObject]])
@@ -814,7 +822,7 @@ extension MainViewController {
                        self.processNSCarbs(entries: json)
                    }
                } else {
-                   return
+                return
                }
            }
            task.resume()
@@ -822,7 +830,7 @@ extension MainViewController {
     
     // NS Carb Bolus Response Processor
          func processNSCarbs(entries: [[String:AnyObject]]) {
-           
+           defer { chartDispatch.leave() }
              // because it's a small array, we're going to destroy and reload every time.
              carbData.removeAll()
              var lastFoundIndex = 0
@@ -841,10 +849,10 @@ extension MainViewController {
                 lastFoundIndex = sgv.foundIndex
                 
                  // Make the dot
-                let dot = bolusCarbGraphStruct(value: carbs, date: Double(dateTimeStamp), sgv: Int(sgv.sgv - 15))
+                let dot = bolusCarbGraphStruct(value: carbs, date: Double(dateTimeStamp), sgv: Int(sgv.sgv))
                  carbData.append(dot)
             }
 
-           chartDispatch.leave()
+
          }
 }

+ 2 - 2
LoopFollow/ViewControllers/MainViewController.swift

@@ -322,8 +322,7 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
                 deltaString = "+" + String(deltaBG)
             }
             let direction = self.bgDirectionGraphic(self.bgData[self.bgData.count - 1].direction ?? "")
-            
-            
+
             var eventStartDate = Date(timeIntervalSince1970: self.bgData[self.bgData.count - 1].date)
             var eventEndDate = eventStartDate.addingTimeInterval(60 * 10)
             var  eventTitle = UserDefaultsRepository.watchLine1.value + "\n" + UserDefaultsRepository.watchLine2.value
@@ -396,6 +395,7 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
                 UserDefaultsRepository.savedEventID.value = event.eventIdentifier //save event id to access this particular event later
             } catch {
                 // Display error to user
+                print(error)
             }
         }
     }