summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-26 21:12:05 -0800
committerFuwn <[email protected]>2025-02-26 21:12:05 -0800
commit0bfca77163ee472883c848292ce0b0afed26043a (patch)
tree0d8c1167231d84e5fdf1798ca9f7b8461469a9fc
parentfeat: Development commit (diff)
downloadsora-testing-0bfca77163ee472883c848292ce0b0afed26043a.tar.xz
sora-testing-0bfca77163ee472883c848292ce0b0afed26043a.zip
feat: Development commit
-rw-r--r--Sora/Data/Booru/BooruManager.swift7
-rw-r--r--Sora/SoraApp.swift8
-rw-r--r--Sora/Views/MainView.swift8
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift29
4 files changed, 30 insertions, 22 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index b3cd6c7..a72df6c 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -12,6 +12,7 @@ class BooruManager: ObservableObject {
@Published var selectedPost: BooruPost?
@Published var flavor: BooruProviderFlavor
@Published var domain: String
+ @Published var postIndexMap: [String: Int] = [:]
private var currentTask: Task<Void, Never>?
let provider: BooruProvider
var tags: [String] {
@@ -103,6 +104,12 @@ class BooruManager: ObservableObject {
self.endOfData = true
} else {
self.posts += Array(Set(newPosts))
+
+ self.postIndexMap.merge(
+ zip(newPosts.indices, newPosts.map(\.id)).reduce(into: [:]) { result, element in
+ result[element.1] = element.0
+ }
+ ) { _, new in new }
}
}
} catch {
diff --git a/Sora/SoraApp.swift b/Sora/SoraApp.swift
index 12c8a24..12f614c 100644
--- a/Sora/SoraApp.swift
+++ b/Sora/SoraApp.swift
@@ -19,11 +19,3 @@ struct SoraApp: App {
#endif
}
}
-
-#Preview {
- MainView()
- .environmentObject(Settings())
- #if os(macOS)
- .frame(width: 736, height: 736)
- #endif
-}
diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift
index 3397f15..2e1ab2e 100644
--- a/Sora/Views/MainView.swift
+++ b/Sora/Views/MainView.swift
@@ -83,3 +83,11 @@ struct MainView: View {
}
}
}
+
+#Preview {
+ MainView()
+ .environmentObject(Settings())
+ #if os(macOS)
+ .frame(width: 736, height: 736)
+ #endif
+}
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index eb71ee6..58895c2 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -22,20 +22,7 @@ struct PostGridView: View {
}
WaterfallGrid(filteredPosts, id: \.id) { post in
- Button {
- manager.selectedPost = post
- } label: {
- PostGridThumbnailView(
- post: post,
- posts: filteredPosts
- )
- }
- .buttonStyle(PlainButtonStyle())
- .contextMenu {
- Button(action: { manager.selectedPost = post }) {
- Label("Select Post", systemImage: "arrow.right.circle")
- }
- }
+ waterfallGridContent(post: post)
}
.gridStyle(columns: settings.columns)
.padding(8)
@@ -102,4 +89,18 @@ struct PostGridView: View {
}
}
}
+
+ private func waterfallGridContent(post: BooruPost) -> some View {
+ Button {
+ manager.selectedPost = post
+ } label: {
+ PostGridThumbnailView(post: post, posts: filteredPosts)
+ }
+ .buttonStyle(PlainButtonStyle())
+ .contextMenu {
+ Button(action: { manager.selectedPost = post }) {
+ Label("Select Post", systemImage: "arrow.right.circle")
+ }
+ }
+ }
}