diff options
Diffstat (limited to 'Sora/Views')
| -rw-r--r-- | Sora/Views/BookmarksView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/ContentView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/MainView.swift | 34 | ||||
| -rw-r--r-- | Sora/Views/Post/PostDetailsView.swift | 8 | ||||
| -rw-r--r-- | Sora/Views/Post/PostFileType.swift | 6 | ||||
| -rw-r--r-- | Sora/Views/Post/PostGridBookmarkButtonView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/Post/PostGridView.swift | 35 | ||||
| -rw-r--r-- | Sora/Views/Post/PostView.swift | 8 | ||||
| -rw-r--r-- | Sora/Views/SearchSuggestionsView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/Settings/SettingsSourceView.swift | 13 | ||||
| -rw-r--r-- | Sora/Views/SettingsView.swift | 4 |
11 files changed, 74 insertions, 42 deletions
diff --git a/Sora/Views/BookmarksView.swift b/Sora/Views/BookmarksView.swift index f98f949..cafb431 100644 --- a/Sora/Views/BookmarksView.swift +++ b/Sora/Views/BookmarksView.swift @@ -2,7 +2,7 @@ import SwiftUI struct BookmarksView: View { @EnvironmentObject var settings: Settings - @EnvironmentObject var manager: MoebooruManager + @EnvironmentObject var manager: BooruManager @Binding var selectedTab: Int @State private var bookmarksSearchText: String = "" diff --git a/Sora/Views/ContentView.swift b/Sora/Views/ContentView.swift index 053e98d..5878619 100644 --- a/Sora/Views/ContentView.swift +++ b/Sora/Views/ContentView.swift @@ -1,7 +1,7 @@ import SwiftUI struct ContentView: View { - @EnvironmentObject var manager: MoebooruManager + @EnvironmentObject var manager: BooruManager var body: some View { #if os(macOS) diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift index 966d986..af56e06 100644 --- a/Sora/Views/MainView.swift +++ b/Sora/Views/MainView.swift @@ -3,13 +3,29 @@ import SwiftUI struct MainView: View { @EnvironmentObject var settings: Settings @State private var selectedTab: Int = 0 - @StateObject private var manager = MoebooruManager() + @State private var manager = BooruManager(booru: .yandere) var body: some View { #if os(macOS) ContentView() .environmentObject(settings) .environmentObject(manager) + .onChange(of: settings.preferredBooru) { _, newState in + self.manager = BooruManager(booru: newState) + + Task { + await self.manager.fetchPosts() + } + } + .onAppear { + self.manager = BooruManager(booru: self.settings.preferredBooru) + + Task { + if manager.posts.isEmpty { + await self.manager.fetchPosts() + } + } + } #else TabView(selection: $selectedTab) { ContentView() @@ -37,6 +53,22 @@ struct MainView: View { .tag(2) } .environmentObject(settings) + .onChange(of: settings.preferredBooru) { _, newState in + self.manager = BooruManager(booru: newState) + + Task { + await self.manager.fetchPosts() + } + } + .onAppear { + self.manager = BooruManager(booru: self.settings.preferredBooru) + + Task { + if manager.posts.isEmpty { + await self.manager.fetchPosts() + } + } + } #endif } } diff --git a/Sora/Views/Post/PostDetailsView.swift b/Sora/Views/Post/PostDetailsView.swift index fe3b558..b24b70b 100644 --- a/Sora/Views/Post/PostDetailsView.swift +++ b/Sora/Views/Post/PostDetailsView.swift @@ -2,7 +2,7 @@ import SwiftUI struct PostDetailsView: View { @EnvironmentObject var settings: Settings - let post: MoebooruPost + let post: BooruPost @State var loadingStage: PostLoadingState = .loadingPreview private var imageURL: URL? { switch settings.detailViewType { @@ -12,8 +12,6 @@ struct PostDetailsView: View { return post.sampleURL case .original: return post.fileURL - case .compressed: - return post.jpegURL } } @@ -45,9 +43,7 @@ struct PostDetailsView: View { HStack { Text( - Date( - timeIntervalSince1970: TimeInterval(post.createdAt) - ).formatted() + post.createdAt.formatted() ) .frame(maxWidth: .infinity, alignment: .leading) diff --git a/Sora/Views/Post/PostFileType.swift b/Sora/Views/Post/PostFileType.swift deleted file mode 100644 index a7b3ca6..0000000 --- a/Sora/Views/Post/PostFileType.swift +++ /dev/null @@ -1,6 +0,0 @@ -enum PostFileType: String, CaseIterable { - case original - case sample - case compressed - case preview -} diff --git a/Sora/Views/Post/PostGridBookmarkButtonView.swift b/Sora/Views/Post/PostGridBookmarkButtonView.swift index c4d8dc8..531eefe 100644 --- a/Sora/Views/Post/PostGridBookmarkButtonView.swift +++ b/Sora/Views/Post/PostGridBookmarkButtonView.swift @@ -1,7 +1,7 @@ import SwiftUI struct PostGridBookmarkButtonView: View { - @EnvironmentObject private var manager: MoebooruManager + @EnvironmentObject private var manager: BooruManager @EnvironmentObject private var settings: Settings var contained: Bool { diff --git a/Sora/Views/Post/PostGridView.swift b/Sora/Views/Post/PostGridView.swift index 625cb1e..3ccc772 100644 --- a/Sora/Views/Post/PostGridView.swift +++ b/Sora/Views/Post/PostGridView.swift @@ -3,11 +3,12 @@ import WaterfallGrid struct PostGridView: View { @EnvironmentObject var settings: Settings - @ObservedObject var manager: MoebooruManager + @ObservedObject var manager: BooruManager @Environment(\.isSearching) private var isSearching - var filteredPosts: [MoebooruPost] { - settings.showNSFWPosts ? manager.posts : manager.posts.filter { $0.rating == "s" } + var filteredPosts: [BooruPost] { + (settings.showNSFWPosts ? manager.posts : manager.posts.filter { $0.rating == "s" || $0.rating == "q" }) + .sorted(by: { $0.id > $1.id }) } var body: some View { @@ -54,12 +55,7 @@ struct PostGridView: View { } } .onSubmit(of: .search, manager.performSearch) - .task { - if manager.posts.isEmpty { - await manager.fetchPosts(page: manager.currentPage) - } - } - .navigationDestination(for: MoebooruPost.self) { post in + .navigationDestination(for: BooruPost.self) { post in PostDetailsView(post: post) } .onChange(of: manager.searchText) { _, _ in @@ -69,20 +65,19 @@ struct PostGridView: View { } } } - #if os(macOS) .toolbar { - ToolbarItem { - Button(action: { - Task { - await manager.fetchPosts(page: 1, tags: manager.tags, replace: true) + #if os(macOS) + ToolbarItem { + Button(action: { + Task { + await manager.fetchPosts(page: 1, tags: manager.tags, replace: true) + } + }) { + Label("Refresh", systemImage: "arrow.clockwise") } - }) { - Label("Refresh", systemImage: "arrow.clockwise") } - } - } - #endif - .toolbar { + #endif + if !manager.tags.isEmpty { #if os(macOS) ToolbarItem { diff --git a/Sora/Views/Post/PostView.swift b/Sora/Views/Post/PostView.swift index 9c25552..2765cd5 100644 --- a/Sora/Views/Post/PostView.swift +++ b/Sora/Views/Post/PostView.swift @@ -2,9 +2,9 @@ import SwiftUI struct PostView: View { @EnvironmentObject var settings: Settings - let post: MoebooruPost - @ObservedObject var manager: MoebooruManager - let posts: [MoebooruPost] + let post: BooruPost + @ObservedObject var manager: BooruManager + let posts: [BooruPost] private var thumbnailURL: URL? { switch settings.thumbnailType { case .preview: @@ -13,8 +13,6 @@ struct PostView: View { return post.sampleURL case .original: return post.fileURL - case .compressed: - return post.jpegURL } } diff --git a/Sora/Views/SearchSuggestionsView.swift b/Sora/Views/SearchSuggestionsView.swift index cae8d43..b9c3133 100644 --- a/Sora/Views/SearchSuggestionsView.swift +++ b/Sora/Views/SearchSuggestionsView.swift @@ -1,7 +1,7 @@ import SwiftUI struct SearchSuggestionsView: View { - var tags: [MoebooruTag] + var tags: [BooruTag] @Binding var searchText: String var lastSearchTag: String { String(searchText.split(separator: " ").last ?? "") diff --git a/Sora/Views/Settings/SettingsSourceView.swift b/Sora/Views/Settings/SettingsSourceView.swift new file mode 100644 index 0000000..8663290 --- /dev/null +++ b/Sora/Views/Settings/SettingsSourceView.swift @@ -0,0 +1,13 @@ +import SwiftUI + +struct SettingsSourceView: View { + @EnvironmentObject var settings: Settings + + var body: some View { + Picker("Booru", selection: $settings.preferredBooru) { + ForEach(Booru.allCases, id: \.self) { type in + Text(type.rawValue.capitalized).tag(type) + } + } + } +} diff --git a/Sora/Views/SettingsView.swift b/Sora/Views/SettingsView.swift index c658775..e1bf2a9 100644 --- a/Sora/Views/SettingsView.swift +++ b/Sora/Views/SettingsView.swift @@ -5,6 +5,10 @@ struct SettingsView: View { var body: some View { Form { + Section(header: Text("Source")) { + SettingsSourceView() + } + Section(header: Text("Thumbnails")) { SettingsThumbnailsView() } |