From 06481d21d3be24b9b7545110fb216e7013443fe4 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Fri, 5 Aug 2022 06:59:19 -0700 Subject: [PATCH] fetch labels from network if none are found in core data --- .../App/Views/Labels/LabelsViewModel.swift | 20 +++++++++++++++++-- .../InternalModels/InternalLinkedItem.swift | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift index 3dc74d69d..3ee32d76c 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift @@ -43,8 +43,24 @@ import Views try? fetchRequest.execute() } - labels = fetchedLabels ?? [] - unselectedLabels = fetchedLabels ?? [] + if fetchedLabels?.count == 0 { + await fetchLabelsFromNetwork(dataService: dataService) + } else { + labels = fetchedLabels ?? [] + unselectedLabels = fetchedLabels ?? [] + } + } + + func fetchLabelsFromNetwork(dataService: DataService) async { + let labelIDs = try? await dataService.labels() + guard let labelIDs = labelIDs else { return } + + let fetchedLabels = await dataService.viewContext.perform { + labelIDs.compactMap { dataService.viewContext.object(with: $0) as? LinkedItemLabel } + } + + labels = fetchedLabels + unselectedLabels = fetchedLabels } func createLabel(dataService: DataService, name: String, color: Color, description: String?) { diff --git a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift index 97ccfa07a..f39daf4b6 100644 --- a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift +++ b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift @@ -65,7 +65,7 @@ struct InternalLinkedItem { if let existingLabels = linkedItem.labels { linkedItem.removeFromLabels(existingLabels) } - + for label in labels { linkedItem.addToLabels(label.asManagedObject(inContext: context)) }