From 89f21ad2284d1d712a27a0ac0df024b236cf84e1 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 6 Dec 2023 11:25:04 +0800 Subject: [PATCH] Use task instead of onAppear for async, add some PDF download debugging --- .../Components/FeedCardNavigationLink.swift | 14 ++++---------- .../App/Views/Home/HomeFeedViewModel.swift | 3 ++- .../App/Views/Labels/ApplyLabelsView.swift | 18 ++++++++---------- .../Sources/App/Views/LibrarySidebar.swift | 16 +++++++--------- .../WebReader/WebReaderLoadingContainer.swift | 12 +++++------- .../DataService/Public/PDFLoading.swift | 9 ++++++++- 6 files changed, 34 insertions(+), 38 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift b/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift index 4154a14cc..a52d67cfd 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift @@ -56,8 +56,8 @@ struct FeedCardNavigationLink: View { } ) } - .onAppear { - Task { await viewModel.itemAppeared(item: item, dataService: dataService) } + .task { + await viewModel.itemAppeared(item: item, dataService: dataService) } } } @@ -92,14 +92,8 @@ struct GridCardNavigationLink: View { GridCard(item: item, isContextMenuOpen: $isContextMenuOpen, actionHandler: actionHandler) } ) -// NavigationLink(destination: LinkItemDetailView( -// linkedItemObjectID: item.objectID, -// isPDF: item.isPDF -// )) { -// -// } - .onAppear { - Task { await viewModel.itemAppeared(item: item, dataService: dataService) } + .task { + await viewModel.itemAppeared(item: item, dataService: dataService) } .aspectRatio(1.0, contentMode: .fill) .background( diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index a71048cf5..03f63bd66 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -262,7 +262,7 @@ import Views try await dataService.moveItem(itemID: item.unwrappedID, folder: folder) snackbar("Item moved") } catch { - snackbar("Error performing operation") + snackbar("Error moving item to \(folder)") } } } @@ -277,6 +277,7 @@ import Views try await dataService.bulkAction(action: action, items: items) snackbar("Operation completed") } catch { + print("ERROR: ", error) snackbar("Error performing operation") } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift index 8496a693e..735e8c8cc 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift @@ -106,16 +106,14 @@ struct ApplyLabelsView: View { .sheet(isPresented: $viewModel.showCreateLabelModal) { CreateLabelView(viewModel: viewModel, newLabelName: viewModel.labelSearchFilter) } - .onAppear { - Task { - switch mode { - case let .item(feedItem): - await viewModel.loadLabels(dataService: dataService, item: feedItem) - case let .highlight(highlight): - await viewModel.loadLabels(dataService: dataService, highlight: highlight) - case let .list(labels): - await viewModel.loadLabels(dataService: dataService, initiallySelectedLabels: labels) - } + .task { + switch mode { + case let .item(feedItem): + await viewModel.loadLabels(dataService: dataService, item: feedItem) + case let .highlight(highlight): + await viewModel.loadLabels(dataService: dataService, highlight: highlight) + case let .list(labels): + await viewModel.loadLabels(dataService: dataService, initiallySelectedLabels: labels) } } } diff --git a/apple/OmnivoreKit/Sources/App/Views/LibrarySidebar.swift b/apple/OmnivoreKit/Sources/App/Views/LibrarySidebar.swift index 09a7b8bfa..b8b590248 100644 --- a/apple/OmnivoreKit/Sources/App/Views/LibrarySidebar.swift +++ b/apple/OmnivoreKit/Sources/App/Views/LibrarySidebar.swift @@ -154,16 +154,14 @@ import SwiftUI } } } - }.onAppear { - Task { - await inboxViewModel.loadFilters(dataService: dataService) - await followingViewModel.loadFilters(dataService: dataService) + }.task { + await inboxViewModel.loadFilters(dataService: dataService) + await followingViewModel.loadFilters(dataService: dataService) - if inboxActive { - selectedFilter = inboxViewModel.appliedFilter - } else { - selectedFilter = followingViewModel.appliedFilter - } + if inboxActive { + selectedFilter = inboxViewModel.appliedFilter + } else { + selectedFilter = followingViewModel.appliedFilter } }.onChange(of: inboxViewModel.appliedFilter) { filter in // When the user uses the dropdown menu to change filter we need to update in the sidebar diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift index 2775571af..2509cb9a6 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderLoadingContainer.swift @@ -66,13 +66,11 @@ public struct WebReaderLoadingContainer: View { Text(errorMessage) } else { ProgressView() - .onAppear { - Task { - if let username = dataService.currentViewer?.username { - await viewModel.loadItem(dataService: dataService, username: username, requestID: requestID) - } else { - viewModel.errorMessage = "You are not logged in." - } + .task { + if let username = dataService.currentViewer?.username { + await viewModel.loadItem(dataService: dataService, username: username, requestID: requestID) + } else { + viewModel.errorMessage = "You are not logged in." } } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Public/PDFLoading.swift b/apple/OmnivoreKit/Sources/Services/DataService/Public/PDFLoading.swift index e892c3299..3273ea68a 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Public/PDFLoading.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Public/PDFLoading.swift @@ -9,7 +9,14 @@ public extension DataService { throw BasicError.message(messageText: "No PDF URL found") } - let result: (Data, URLResponse)? = try? await URLSession.shared.data(from: url) + var result: (Data, URLResponse)? + do { + let request = URLRequest(url: url, timeoutInterval: 120) + result = try await URLSession.shared.data(for: request) + } catch { + print("ERROR DOWNLOADING PDF DATA: ", error) + print("URL", url) + } guard let httpResponse = result?.1 as? HTTPURLResponse, 200 ..< 300 ~= httpResponse.statusCode else { throw BasicError.message(messageText: "pdfFetch failed. no response or bad status code.")