From 98080719f37e58f2e746f5ceefa5fbc65a2a2a80 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Thu, 14 Apr 2022 15:06:50 -0700 Subject: [PATCH] wrap viewModel async call in Task --- .../Home/Components/FeedCardNavigationLink.swift | 4 ++-- .../Sources/App/Views/Home/HomeFeedViewIOS.swift | 14 +++++++------- .../Sources/App/Views/Home/HomeFeedViewModel.swift | 9 +++++---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift b/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift index 93fd2670b..dbf0084ca 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift @@ -22,7 +22,7 @@ struct FeedCardNavigationLink: View { .opacity(0) .buttonStyle(PlainButtonStyle()) .onAppear { - Task { await viewModel.itemAppeared(item: item, dataService: dataService) } + viewModel.itemAppeared(item: item, dataService: dataService) } FeedCard(item: item) } @@ -60,7 +60,7 @@ struct GridCardNavigationLink: View { } }) .onAppear { - Task { await viewModel.itemAppeared(item: item, dataService: dataService) } + viewModel.itemAppeared(item: item, dataService: dataService) } } .aspectRatio(1.8, contentMode: .fill) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index f5462772b..46720c206 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -19,7 +19,7 @@ import Views viewModel: viewModel ) .refreshable { - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } .searchable( text: $viewModel.searchTerm, @@ -35,13 +35,13 @@ import Views .onChange(of: viewModel.searchTerm) { _ in // Maybe we should debounce this, but // it feels like it works ok without - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } .onChange(of: viewModel.selectedLabels) { _ in - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } .onSubmit(of: .search) { - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } .sheet(item: $viewModel.itemUnderLabelEdit) { item in ApplyLabelsView(mode: .item(item)) { labels in @@ -54,7 +54,7 @@ import Views .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in // Don't refresh the list if the user is currently reading an article if viewModel.selectedLinkItem == nil { - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } } .onReceive(NotificationCenter.default.publisher(for: Notification.Name("PushFeedItem"))) { notification in @@ -75,7 +75,7 @@ import Views } .onAppear { if viewModel.items.isEmpty { - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } } .onChange(of: viewModel.selectedLinkItem) { _ in @@ -322,7 +322,7 @@ import Views .onPreferenceChange(ScrollViewOffsetPreferenceKey.self) { offset in DispatchQueue.main.async { if !viewModel.isLoading, offset > 240 { - Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) } + viewModel.loadItems(dataService: dataService, isRefresh: true) } } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index e3bfffbc8..ed61a4341 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -36,14 +36,14 @@ import Views init() {} - func itemAppeared(item: FeedItem, dataService: DataService) async { + func itemAppeared(item: FeedItem, dataService: DataService) { if isLoading { return } let itemIndex = items.firstIndex(where: { $0.id == item.id }) let thresholdIndex = items.index(items.endIndex, offsetBy: -5) // Check if user has scrolled to the last five items in the list if let itemIndex = itemIndex, itemIndex > thresholdIndex, items.count < thresholdIndex + 10 { - await loadItems(dataService: dataService, isRefresh: false) + Task { await loadItems(dataService: dataService, isRefresh: false) } } } @@ -51,7 +51,7 @@ import Views items.insert(item, at: 0) } - func loadItems(dataService: DataService, isRefresh: Bool) async { + func loadItems(dataService: DataService, isRefresh: Bool) { // Clear offline highlights since we'll be populating new FeedItems with the correct highlights set dataService.clearHighlights() @@ -61,8 +61,9 @@ import Views isLoading = true // Cache the viewer + if dataService.currentViewer == nil { - _ = try? await dataService.fetchViewer() + Task { _ = try? await dataService.fetchViewer() } } dataService.libraryItemsPublisher(