summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-15 05:22:14 -0700
committerFuwn <[email protected]>2025-06-15 05:22:14 -0700
commita70349e971e1b6e31642cd3b2e9b15881395e2f9 (patch)
tree1a16ad8b517ab325e74bbd4ce811fea8ca32fac5
parentfeat: Development commit (diff)
downloadsora-testing-a70349e971e1b6e31642cd3b2e9b15881395e2f9.tar.xz
sora-testing-a70349e971e1b6e31642cd3b2e9b15881395e2f9.zip
feat: Development commit
-rw-r--r--Sora/Data/Booru/BooruManager.swift52
-rw-r--r--Sora/Views/Generic/GenericListView.swift9
-rw-r--r--Sora/Views/MainView.swift24
-rw-r--r--Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift4
-rw-r--r--Sora/Views/Post/Details/PostDetailsTagsView.swift5
-rw-r--r--Sora/Views/Post/Grid/PostGridThumbnailView.swift4
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift32
7 files changed, 70 insertions, 60 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 1abc7b6..12d96f0 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -66,7 +66,8 @@ class BooruManager: ObservableObject {
updateTagsCacheSize()
}
- func fetchPosts(page: Int = 1, limit: Int = 100, tags: [String] = [], replace: Bool = false) {
+ func fetchPosts(page: Int = 1, limit: Int = 100, tags: [String] = [], replace: Bool = false) async
+ {
guard !isLoading,
let url = urlForPosts(page: flavor == .gelbooru ? page - 1 : page, limit: limit, tags: tags)
else { return }
@@ -87,32 +88,25 @@ class BooruManager: ObservableObject {
isLoading = true
- cancelCurrentTask()
-
- currentTask = Task {
- defer { isLoading = false }
-
- do {
- let data = try await requestURL(url)
-
- guard !Task.isCancelled else { return }
+ do {
+ let data = try await requestURL(url)
+ let newPosts = parsePosts(from: data).sorted { $0.id > $1.id }
+ let cacheEntry = BooruPageCacheEntry(posts: newPosts, timestamp: Date())
- let newPosts = parsePosts(from: data).sorted { $0.id > $1.id }
- let cacheEntry = BooruPageCacheEntry(posts: newPosts, timestamp: Date())
-
- pageCache.setObject(cacheEntry, forKey: cacheKey)
- updatePosts(newPosts, replace: replace)
- } catch {
- debugPrint("BooruManager.fetchPosts: \(error)")
- }
+ pageCache.setObject(cacheEntry, forKey: cacheKey)
+ updatePosts(newPosts, replace: replace)
+ } catch {
+ debugPrint("BooruManager.fetchPosts: \(error)")
}
+
+ isLoading = false
}
func clearCachedPages() {
pageCache.removeAllObjects()
}
- func performSearch(settings: SettingsManager? = nil) {
+ func performSearch(settings: SettingsManager? = nil) async {
if searchHistory.last?.tags == tags { return }
if historyIndex < searchHistory.count - 1 {
@@ -132,24 +126,22 @@ class BooruManager: ObservableObject {
searchText = tags.joined(separator: " ")
- cancelCurrentTask()
- fetchPosts(page: 1, tags: tags, replace: true)
+ await fetchPosts(page: 1, tags: tags, replace: true)
}
- func loadNextPage() {
+ func loadNextPage() async {
guard !isLoading else { return }
- Task {
- currentPage += 1
+ currentPage += 1
- fetchPosts(page: currentPage, tags: tags)
+ await fetchPosts(page: currentPage, tags: tags)
- if historyIndex >= 0 && historyIndex < searchHistory.count {
- var currentQuery = searchHistory[historyIndex]
+ if historyIndex >= 0 && historyIndex < searchHistory.count {
+ var currentQuery = searchHistory[historyIndex]
- currentQuery.page = currentPage
- searchHistory[historyIndex] = currentQuery
- }
+ currentQuery.page = currentPage
+
+ searchHistory[historyIndex] = currentQuery
}
}
diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift
index 3825454..24d25e8 100644
--- a/Sora/Views/Generic/GenericListView.swift
+++ b/Sora/Views/Generic/GenericListView.swift
@@ -268,7 +268,9 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swi
selectedTab = 0
if previousProvider == settings.preferredBooru {
- manager.performSearch(settings: settings)
+ Task(priority: .userInitiated) {
+ await manager.performSearch(settings: settings)
+ }
}
if !allowBookmarking {
@@ -288,7 +290,10 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { // swi
manager.searchText += " \(item.tags.joined(separator: " "))"
manager.selectedPost = nil
- manager.performSearch(settings: settings)
+ Task(priority: .userInitiated) {
+ await manager.performSearch(settings: settings)
+ }
+
isPresented.toggle()
}) {
Label("Add to Search", systemImage: "plus")
diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift
index 4e46234..c3a8c66 100644
--- a/Sora/Views/MainView.swift
+++ b/Sora/Views/MainView.swift
@@ -78,13 +78,13 @@ struct MainView: View {
manager = BooruManager(provider)
manager.searchText = previousSearchText
- Task {
- refreshTags()
+ refreshTags()
+ Task(priority: .userInitiated) {
if manager.searchText.isEmpty {
- manager.fetchPosts()
+ await manager.fetchPosts()
} else {
- manager.performSearch(settings: settings)
+ await manager.performSearch(settings: settings)
}
}
}
@@ -92,22 +92,20 @@ struct MainView: View {
private func initializeManager() {
manager = BooruManager(settings.preferredBooru)
- Task {
- refreshTags()
+ refreshTags()
+ Task(priority: .userInitiated) {
if manager.posts.isEmpty {
- manager.fetchPosts()
+ await manager.fetchPosts()
}
}
}
private func refreshTags() {
- Task {
- if settings.searchSuggestionsMode != .disabled {
- manager.initializeTags()
- } else {
- manager.updateTagsCacheSize()
- }
+ if settings.searchSuggestionsMode != .disabled {
+ manager.initializeTags()
+ } else {
+ manager.updateTagsCacheSize()
}
}
}
diff --git a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift
index 4452b22..52377b2 100644
--- a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift
+++ b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift
@@ -52,7 +52,9 @@ struct PostDetailsCarouselView: View {
}
}
.onChange(of: currentIndex) {
- if currentIndex == posts.count - 1 { manager.loadNextPage() }
+ Task(priority: .utility) {
+ if currentIndex == posts.count - 1 { await manager.loadNextPage() }
+ }
manager.selectedPost = posts[currentIndex]
diff --git a/Sora/Views/Post/Details/PostDetailsTagsView.swift b/Sora/Views/Post/Details/PostDetailsTagsView.swift
index 7e603b4..8ff4a9f 100644
--- a/Sora/Views/Post/Details/PostDetailsTagsView.swift
+++ b/Sora/Views/Post/Details/PostDetailsTagsView.swift
@@ -53,7 +53,10 @@ struct PostDetailsTagsView: View {
private func search() {
manager.selectedPost = nil
- manager.performSearch(settings: settings)
+ Task(priority: .userInitiated) {
+ await manager.performSearch(settings: settings)
+ }
+
isPresented.toggle()
}
}
diff --git a/Sora/Views/Post/Grid/PostGridThumbnailView.swift b/Sora/Views/Post/Grid/PostGridThumbnailView.swift
index f614046..fd4ae62 100644
--- a/Sora/Views/Post/Grid/PostGridThumbnailView.swift
+++ b/Sora/Views/Post/Grid/PostGridThumbnailView.swift
@@ -44,9 +44,7 @@ struct PostGridThumbnailView: View {
imageContent(image: image)
.onScrollVisibilityChange { visible in
if post == posts.last, !manager.endOfData, visible {
- Task {
- manager.loadNextPage()
- }
+ Task(priority: .utility) { await manager.loadNextPage() }
}
}
} else {
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index 4aa4b39..117da87 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -69,14 +69,16 @@ struct PostGridView: View {
return
}
- manager.performSearch(settings: settings)
+ Task(priority: .userInitiated) {
+ await manager.performSearch(settings: settings)
+ }
}
.navigationDestination(for: BooruPost.self) { post in
PostDetailsView(post: post)
}
.onChange(of: isSearchablePresented) { _, isPresented in
if !isPresented, manager.searchText.isEmpty, !manager.isNavigatingHistory {
- manager.performSearch()
+ Task(priority: .userInitiated) { await manager.performSearch() }
}
}
.onChange(of: manager.posts) { _, newPosts in
@@ -105,11 +107,13 @@ struct PostGridView: View {
manager.posts = []
manager.currentPage = 1
- manager.fetchPosts(
- page: 1,
- tags: manager.searchHistory[newIndex].tags,
- replace: true
- )
+ Task(priority: .userInitiated) {
+ await manager.fetchPosts(
+ page: 1,
+ tags: manager.searchHistory[newIndex].tags,
+ replace: true
+ )
+ }
}
}
.toolbar {
@@ -144,7 +148,13 @@ struct PostGridView: View {
}
PlatformSpecificToolbarItem {
- Button(action: { Task { manager.loadNextPage() } }) {
+ Button(
+ action: {
+ Task(priority: .userInitiated) {
+ await manager.loadNextPage()
+ }
+ }
+ ) {
Label(
"Manually Load Next Page",
systemImage: "arrow.down.to.line"
@@ -176,9 +186,11 @@ struct PostGridView: View {
.navigationTitle("Posts")
.refreshable {
manager.clearCachedPages()
- manager.fetchPosts(page: 1, tags: manager.tags, replace: true)
+
+ Task(priority: .userInitiated) {
+ await manager.fetchPosts(page: 1, tags: manager.tags, replace: true)
+ }
}
- .scrollDisabled(manager.isLoading)
.sheet(isPresented: $isSearchHistoryPresented) {
PostGridSearchHistoryView(
selectedTab: $selectedTab,