Use task instead of onAppear for async, add some PDF download debugging

This commit is contained in:
Jackson Harper 2023-12-06 11:25:04 +08:00
parent f48a36de79
commit 89f21ad228
6 changed files with 34 additions and 38 deletions

View file

@ -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(

View file

@ -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")
}
}

View file

@ -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)
}
}
}

View file

@ -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

View file

@ -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."
}
}
}

View file

@ -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.")