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
28 changes: 28 additions & 0 deletions Common/Extensions/Double.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//
// Double.swift
// Loop
//
// Copyright © 2018 LoopKit Authors. All rights reserved.
//

import Foundation


extension Double {
func floored(to increment: Double) -> Double {
if increment == 0 {
return self
}

return floor(self / increment) * increment
}

func ceiled(to increment: Double) -> Double {
if increment == 0 {
return self
}

return ceil(self / increment) * increment
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,26 @@ extension GlucoseRangeSchedule {
return override.isActive()
}

var activeOverrideContext: GlucoseRangeSchedule.Override.Context? {
var activeOverride: GlucoseRangeSchedule.Override? {
guard let override = override, override.isActive() else {
return nil
}

return override.context
return override
}

var activeOverrideContext: GlucoseRangeSchedule.Override.Context? {
return activeOverride?.context
}

var activeOverrideQuantityRange: Range<HKQuantity>? {
guard let activeOverride = activeOverride else {
return nil
}

let lowerBound = HKQuantity(unit: unit, doubleValue: activeOverride.value.minValue)
let upperBound = HKQuantity(unit: unit, doubleValue: activeOverride.value.maxValue)
return lowerBound..<upperBound
}

var configuredOverrideContexts: [GlucoseRangeSchedule.Override.Context] {
Expand Down
6 changes: 3 additions & 3 deletions Common/Extensions/HKUnit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import HealthKit
extension HKUnit {
// A formatting helper for determining the preferred decimal style for a given unit
var preferredFractionDigits: Int {
if self.unitString == "mg/dL" {
if self == .milligramsPerDeciliter {
return 0
} else {
return 1
Expand Down Expand Up @@ -45,7 +45,7 @@ extension HKUnit {

/// An example value for the "ideal" target
var glucoseExampleTargetValue: Double {
if unitString == "mg/dL" {
if self == .milligramsPerDeciliter {
return 100
} else {
return 5.5
Expand All @@ -54,7 +54,7 @@ extension HKUnit {

/// The smallest value expected to be visible on a chart
var chartableIncrement: Double {
if unitString == "mg/dL" {
if self == .milligramsPerDeciliter {
return 1
} else {
return 1 / 25
Expand Down
10 changes: 10 additions & 0 deletions Common/Extensions/PersistenceController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,14 @@ extension PersistenceController {

return self.init(directoryURL: directoryURL.appendingPathComponent("com.loopkit.LoopKit", isDirectory: true), isReadOnly: isReadOnly)
}

class func controllerInLocalDirectory() -> PersistenceController {
guard let directoryURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) else {
fatalError("Could not access the document directory of the current process")
}

let isReadOnly = Bundle.main.bundleURL.pathExtension == "appex"

return self.init(directoryURL: directoryURL.appendingPathComponent("com.loopkit.LoopKit"), isReadOnly: isReadOnly)
}
}
38 changes: 38 additions & 0 deletions Common/Extensions/SampleValue.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//
// SampleValue.swift
// Loop
//
// Copyright © 2018 LoopKit Authors. All rights reserved.
//

import HealthKit
import LoopKit


extension Collection where Element == SampleValue {
/// O(n)
var quantityRange: Range<HKQuantity>? {
var lowest: HKQuantity?
var highest: HKQuantity?

for sample in self {
if let l = lowest {
lowest = Swift.min(l, sample.quantity)
} else {
lowest = sample.quantity
}

if let h = highest {
highest = Swift.max(h, sample.quantity)
} else {
highest = sample.quantity
}
}

guard let l = lowest, let h = highest else {
return nil
}

return l..<h
}
}
16 changes: 7 additions & 9 deletions Common/Models/BolusSuggestionUserInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
import Foundation


final class BolusSuggestionUserInfo: RawRepresentable {
let recommendedBolus: Double
let maxBolus: Double?
struct BolusSuggestionUserInfo: RawRepresentable {
let recommendedBolus: Double?
var maxBolus: Double?

init(recommendedBolus: Double, maxBolus: Double? = nil) {
init(recommendedBolus: Double?, maxBolus: Double? = nil) {
self.recommendedBolus = recommendedBolus
self.maxBolus = maxBolus
}
Expand All @@ -24,7 +24,7 @@ final class BolusSuggestionUserInfo: RawRepresentable {
static let version = 1
static let name = "BolusSuggestionUserInfo"

required init?(rawValue: RawValue) {
init?(rawValue: RawValue) {
guard rawValue["v"] as? Int == type(of: self).version && rawValue["name"] as? String == BolusSuggestionUserInfo.name,
let recommendedBolus = rawValue["br"] as? Double else
{
Expand All @@ -39,12 +39,10 @@ final class BolusSuggestionUserInfo: RawRepresentable {
var raw: RawValue = [
"v": type(of: self).version,
"name": BolusSuggestionUserInfo.name,
"br": recommendedBolus
]

if let maxBolus = maxBolus {
raw["mb"] = maxBolus
}
raw["br"] = recommendedBolus
raw["mb"] = maxBolus

return raw
}
Expand Down
40 changes: 40 additions & 0 deletions Common/Models/GlucoseBackfillRequestUserInfo.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//
// GlucoseBackfillRequestUserInfo.swift
// Loop
//
// Created by Bharat Mediratta on 6/21/18.
// Copyright © 2018 LoopKit Authors. All rights reserved.
//

import Foundation

struct GlucoseBackfillRequestUserInfo {
let version = 1
let startDate: Date
}

extension GlucoseBackfillRequestUserInfo: RawRepresentable {
typealias RawValue = [String: Any]

static let name = "GlucoseBackfillRequestUserInfo"

init?(rawValue: RawValue) {
guard
rawValue["v"] as? Int == version,
rawValue["name"] as? String == GlucoseBackfillRequestUserInfo.name,
let startDate = rawValue["sd"] as? Date
else {
return nil
}

self.startDate = startDate
}

var rawValue: RawValue {
return [
"v": version,
"name": GlucoseBackfillRequestUserInfo.name,
"sd": startDate
]
}
}
75 changes: 0 additions & 75 deletions Common/Models/GlucoseRangeScheduleOverrideUserInfo.swift

This file was deleted.

9 changes: 1 addition & 8 deletions Common/Models/GlucoseThreshold.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import Foundation
import HealthKit

struct GlucoseThreshold: RawRepresentable {
struct GlucoseThreshold: Equatable, RawRepresentable {
typealias RawValue = [String: Any]

let value: Double
Expand Down Expand Up @@ -39,10 +39,3 @@ struct GlucoseThreshold: RawRepresentable {
]
}
}


extension GlucoseThreshold: Equatable {
static func ==(lhs: GlucoseThreshold, rhs: GlucoseThreshold) -> Bool {
return lhs.value == rhs.value
}
}
2 changes: 1 addition & 1 deletion Common/Models/LoopSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import LoopKit


struct LoopSettings {
struct LoopSettings: Equatable {
var dosingEnabled = false

let dynamicCarbAbsorptionEnabled = true
Expand Down
39 changes: 39 additions & 0 deletions Common/Models/LoopSettingsUserInfo.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//
// LoopSettingsUserInfo.swift
// Loop
//
// Copyright © 2018 LoopKit Authors. All rights reserved.
//


struct LoopSettingsUserInfo {
let settings: LoopSettings
}


extension LoopSettingsUserInfo: RawRepresentable {
typealias RawValue = [String: Any]

static let name = "LoopSettingsUserInfo"
static let version = 1

init?(rawValue: RawValue) {
guard rawValue["v"] as? Int == LoopSettingsUserInfo.version,
rawValue["name"] as? String == LoopSettingsUserInfo.name,
let settingsRaw = rawValue["s"] as? LoopSettings.RawValue,
let settings = LoopSettings(rawValue: settingsRaw)
else {
return nil
}

self.settings = settings
}

var rawValue: RawValue {
return [
"v": LoopSettingsUserInfo.version,
"name": LoopSettingsUserInfo.name,
"s": settings.rawValue
]
}
}
Loading