Quellcode durchsuchen

Merge branch 'dev' of github.com:nightscout/Trio into feat/override-confirmation

Deniz Cengiz vor 2 Wochen
Ursprung
Commit
a4ebabffa6

+ 1 - 1
Config.xcconfig

@@ -19,7 +19,7 @@ TRIO_APP_GROUP_ID = group.org.nightscout.$(DEVELOPMENT_TEAM).trio.trio-app-group
 
 // The developers set the version numbers, please leave them alone
 APP_VERSION = 0.7.0
-APP_DEV_VERSION = 0.7.0
+APP_DEV_VERSION = 0.7.0.4
 APP_BUILD_NUMBER = 1
 COPYRIGHT_NOTICE =
 

+ 1 - 1
DanaKit

@@ -1 +1 @@
-Subproject commit 0158fc85391725bb1855ea34469d48cb65667850
+Subproject commit 5148f197086a4b7e8151eefd01e1556a71d64ada

+ 1 - 1
MedtrumKit

@@ -1 +1 @@
-Subproject commit b7f3d44c06bb7c580be897e0414e64de2d6dd995
+Subproject commit 64f716c134fbc28ca481e38b6072e6a69bca6fd0

+ 1 - 0
Model/Helper/PumpEvent+helper.swift

@@ -58,6 +58,7 @@ public extension PumpEventStored {
         case rewind = "Rewind"
         case prime = "Prime"
         case journalCarbs = "JournalEntryMealMarker"
+        case siteChange = "SiteChange"
 
         case nsNote = "Note"
         case nsTempBasal = "Temp Basal"

+ 1 - 1
OmniBLE

@@ -1 +1 @@
-Subproject commit b0b78e66a6962677970a00e5d37ae4157e548b8a
+Subproject commit 14c03be4fdd5871a96243327655f974dc0cd9e69

+ 16 - 1
Trio/Sources/APS/Storage/PumpHistoryStorage.swift

@@ -205,6 +205,21 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
                     newPumpEvent.isUploadedToTidepool = false
                     newPumpEvent.note = event.title
 
+                case .replaceComponent(componentType: .infusionSet),
+                     .replaceComponent(componentType: .pump):
+                    guard existingEvents.isEmpty else {
+                        // Duplicate found, do not store the event
+                        debug(.coreData, "Duplicate event found with timestamp: \(event.date)")
+                        continue
+                    }
+                    let newPumpEvent = PumpEventStored(context: self.context)
+                    newPumpEvent.id = UUID().uuidString
+                    newPumpEvent.timestamp = event.date
+                    newPumpEvent.type = PumpEvent.siteChange.rawValue
+                    newPumpEvent.isUploadedToNS = false
+                    newPumpEvent.isUploadedToHealth = false
+                    newPumpEvent.isUploadedToTidepool = false
+
                 default:
                     continue
                 }
@@ -418,7 +433,7 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
                         targetTop: nil,
                         targetBottom: nil
                     )
-                case PumpEvent.prime.rawValue:
+                case PumpEvent.siteChange.rawValue:
                     return NightscoutTreatment(
                         duration: nil,
                         rawDuration: nil,

+ 6 - 3
Trio/Sources/Modules/Adjustments/View/Overrides/AdjustmentsRootView+Overrides.swift

@@ -19,8 +19,11 @@ extension Adjustments.RootView {
                 overridesView(for: preset, showCheckMark: showOverrideCheckmark) {
                     requestOverridePresetActivation(preset)
                 }
+                .contextMenu {
+                    actionButtonsForOverrides(for: preset)
+                }
                 .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                    swipeActionsForOverrides(for: preset)
+                    actionButtonsForOverrides(for: preset)
                 }
             }
             .onMove(perform: state.reorderOverride)
@@ -83,9 +86,9 @@ extension Adjustments.RootView {
         requestPresetActivation(activation)
     }
 
-    private func swipeActionsForOverrides(for preset: OverrideStored) -> some View {
+    func actionButtonsForOverrides(for preset: OverrideStored) -> some View {
         Group {
-            Button(role: .none) {
+            Button(role: .destructive) {
                 selectedOverride = preset
                 isConfirmDeletePresented = true
             } label: {

+ 7 - 4
Trio/Sources/Modules/Adjustments/View/TempTargets/AdjustmentsRootView+TempTargets.swift

@@ -21,7 +21,7 @@ extension Adjustments.RootView {
             ForEach(state.scheduledTempTargets) { tempTarget in
                 tempTargetView(for: tempTarget)
                     .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                        swipeActionsForTempTargets(for: tempTarget)
+                        actionButtonsForTempTargets(for: tempTarget)
                     }
             }
             .listRowBackground(Color.chart)
@@ -36,8 +36,11 @@ extension Adjustments.RootView {
                 tempTargetView(for: preset, showCheckmark: showTempTargetCheckmark) {
                     requestTempTargetPresetActivation(preset)
                 }
+                .contextMenu {
+                    actionButtonsForTempTargets(for: preset)
+                }
                 .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                    swipeActionsForTempTargets(for: preset)
+                    actionButtonsForTempTargets(for: preset)
                 }
             }
             .onMove(perform: state.reorderTempTargets)
@@ -71,9 +74,9 @@ extension Adjustments.RootView {
         requestPresetActivation(activation)
     }
 
-    private func swipeActionsForTempTargets(for tempTarget: TempTargetStored) -> some View {
+    private func actionButtonsForTempTargets(for tempTarget: TempTargetStored) -> some View {
         Group {
-            Button {
+            Button(role: .destructive) {
                 Task {
                     selectedTempTarget = tempTarget
                     isConfirmDeletePresented = true

+ 94 - 1
Trio/Sources/Modules/History/View/HistoryRootView.swift

@@ -506,7 +506,27 @@ extension History {
                             Spacer()
 
                             Text(Formatter.dateFormatter.string(from: glucose.date ?? Date()))
-                        }.swipeActions {
+                        }
+                        .contextMenu {
+                            Button(
+                                "Delete",
+                                systemImage: "trash.fill",
+                                role: .destructive,
+                                action: {
+                                    alertGlucoseToDelete = glucose
+
+                                    let glucoseToDisplay = state.units == .mgdL ? glucose.glucose
+                                        .description : Int(glucose.glucose).formattedAsMmolL
+                                    alertTitle = String(localized: "Delete Glucose?", comment: "Alert title for deleting glucose")
+                                    alertMessage = Formatter.dateFormatter
+                                        .string(from: glucose.date ?? Date()) + ", " + glucoseToDisplay + " " + state.units
+                                        .rawValue
+
+                                    isRemoveHistoryItemAlertPresented = true
+                                }
+                            ).tint(.red)
+                        }
+                        .swipeActions {
                             Button(
                                 "Delete",
                                 systemImage: "trash.fill",
@@ -667,6 +687,34 @@ extension History {
                 Spacer()
                 Text(Formatter.dateFormatter.string(from: item.timestamp ?? Date())).moveDisabled(true)
             }
+            .contextMenu {
+                if item.bolus != nil {
+                    Button(
+                        "Delete",
+                        systemImage: "trash.fill",
+                        role: .destructive,
+                        action: {
+                            alertTreatmentToDelete = item
+                            alertTitle = String(localized: "Delete Insulin?", comment: "Alert title for deleting insulin")
+                            alertMessage = Formatter.dateFormatter
+                                .string(from: item.timestamp ?? Date()) + ", " +
+                                (Formatter.decimalFormatterWithThreeFractionDigits.string(from: item.bolus?.amount ?? 0) ?? "0") +
+                                String(localized: " U", comment: "Insulin unit")
+
+                            if let bolus = item.bolus {
+                                // Add text snippet, so that alert message is more descriptive for SMBs
+                                alertMessage += bolus.isSMB ? String(
+                                    localized: " SMB",
+                                    comment: "Super Micro Bolus indicator in delete alert"
+                                )
+                                    : ""
+                            }
+
+                            isRemoveHistoryItemAlertPresented = true
+                        }
+                    ).tint(.red)
+                }
+            }
             .swipeActions {
                 if item.bolus != nil {
                     Button(
@@ -746,6 +794,51 @@ extension History {
                     }.padding(.top, 5).foregroundColor(.secondary)
                 }
             }
+            .contextMenu {
+                Button(
+                    "Delete",
+                    systemImage: "trash.fill",
+                    role: .destructive,
+                    action: {
+                        alertCarbEntryToDelete = meal
+
+                        // meal is carb-only
+                        if meal.fpuID == nil {
+                            alertTitle = String(localized: "Delete Carbs?", comment: "Alert title for deleting carbs")
+                            alertMessage = Formatter.dateFormatter
+                                .string(from: meal.date ?? Date()) + ", " +
+                                (Formatter.decimalFormatterWithTwoFractionDigits.string(for: meal.carbs) ?? "0") +
+                                String(localized: " g", comment: "gram of carbs")
+                        }
+                        // meal is complex-meal or fpu-only
+                        else {
+                            alertTitle = meal.isFPU ? String(
+                                localized: "Delete Carbs Equivalents?",
+                                comment: "Alert title for deleting carb equivalents"
+                            )
+                                : String(localized: "Delete Carbs?", comment: "Alert title for deleting carbs")
+                            alertMessage = String(
+                                localized: "All FPUs and the carbs of the meal will be deleted.",
+                                comment: "Alert message for meal deletion"
+                            )
+                        }
+
+                        isRemoveHistoryItemAlertPresented = true
+                    }
+                ).tint(.red)
+
+                Button(
+                    "Edit",
+                    systemImage: "pencil",
+                    role: .none,
+                    action: {
+                        state.carbEntryToEdit = meal
+                        state.showCarbEntryEditor = true
+                    }
+                )
+                .tint(!state.settingsManager.settings.useFPUconversion && meal.isFPU ? Color(.systemGray4) : Color.blue)
+                .disabled(!state.settingsManager.settings.useFPUconversion && meal.isFPU)
+            }
             .swipeActions {
                 Button(
                     "Delete",

+ 12 - 0
Trio/Sources/Modules/Onboarding/View/TherapySettingEditorView.swift

@@ -96,6 +96,18 @@ struct TherapySettingEditorView: View {
                                 .transition(.slide)
                             }
                         }
+                        .contextMenu {
+                            if let index = items.firstIndex(where: { $0.id == item.id }), items.count > 1 {
+                                Button(role: .destructive) {
+                                    items.remove(at: index)
+                                    selectedItemID = nil
+                                    validateTherapySettingItems()
+                                } label: {
+                                    Label("Delete", systemImage: "trash")
+                                }
+                                .tint(.red)
+                            }
+                        }
                         .swipeActions(edge: .trailing, allowsFullSwipe: true) {
                             if let index = items.firstIndex(where: { $0.id == item.id }), items.count > 1 {
                                 Button(role: .destructive) {

+ 0 - 31
Trio/Sources/Services/Network/Nightscout/NightscoutManager.swift

@@ -582,10 +582,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         } catch {
             debug(.nightscout, String(describing: error))
         }
-
-        Task.detached {
-            await self.uploadPodAge()
-        }
     }
 
     private func updateOrefDeterminationAsUploaded(_ determination: [Determination]) async {
@@ -610,33 +606,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
     }
 
-    func uploadPodAge() async {
-        let uploadedPodAge = storage.retrieve(OpenAPS.Nightscout.uploadedPodAge, as: [NightscoutTreatment].self) ?? []
-        if let podAge = storage.retrieve(OpenAPS.Monitor.podAge, as: Date.self),
-           uploadedPodAge.last?.createdAt == nil || podAge != uploadedPodAge.last!.createdAt!
-        {
-            let siteTreatment = NightscoutTreatment(
-                duration: nil,
-                rawDuration: nil,
-                rawRate: nil,
-                absolute: nil,
-                rate: nil,
-                eventType: .nsSiteChange,
-                createdAt: podAge,
-                enteredBy: NightscoutTreatment.local,
-                bolus: nil,
-                insulin: nil,
-                notes: nil,
-                carbs: nil,
-                fat: nil,
-                protein: nil,
-                targetTop: nil,
-                targetBottom: nil
-            )
-            await uploadNonCoreDataTreatments([siteTreatment])
-        }
-    }
-
     func uploadProfiles() async throws {
         if isUploadEnabled {
             do {

+ 1 - 1
scripts/define_common_trio.sh

@@ -31,6 +31,6 @@ TRIO_PROJECTS=( \
     loopandlearn:RileyLinkKit:dev \
     loopandlearn:TidepoolService:dev \
     loopandlearn:DanaKit:dev \
-    loopandlearn:EversenseKit:dev \
     loopandlearn:MedtrumKit:dev \
+    loopandlearn:EversenseKit:dev \
 )