diff options
Diffstat (limited to 'Sora/Views/Post/Details/PostDetailsCarouselView.swift')
| -rw-r--r-- | Sora/Views/Post/Details/PostDetailsCarouselView.swift | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/Sora/Views/Post/Details/PostDetailsCarouselView.swift b/Sora/Views/Post/Details/PostDetailsCarouselView.swift deleted file mode 100644 index 6b4ba02..0000000 --- a/Sora/Views/Post/Details/PostDetailsCarouselView.swift +++ /dev/null @@ -1,95 +0,0 @@ -import SwiftUI - -struct PostDetailsCarouselView: View { - @EnvironmentObject var manager: BooruManager - @EnvironmentObject var settings: SettingsManager - let posts: [BooruPost] - let focusedPost: BooruPost? - @Binding var loadingStage: BooruPostLoadingState - @State private var currentIndex: Int - private let cacheManager = ImageCacheManager.shared - - init( - posts: [BooruPost], - loadingStage: Binding<BooruPostLoadingState>, - focusedPost: BooruPost? = nil - ) { - self.posts = posts - self.focusedPost = focusedPost - _loadingStage = loadingStage - - if let focused = focusedPost, - let index = posts.firstIndex(where: { $0.id == focused.id }) - { - self._currentIndex = State(initialValue: index) - } else { - self._currentIndex = State(initialValue: 0) - } - } - - func imageURL(post: BooruPost) -> URL? { - switch settings.detailViewQuality { - case .preview: - post.previewURL - - case .sample: - post.sampleURL - - case .original: - post.fileURL - } - } - - var body: some View { - TabView(selection: $currentIndex) { - ForEach(posts.indices, id: \.self) { index in - ZStack { - PostDetailsImageView( - url: posts[index].previewURL, - loadingStage: $loadingStage - ) - - PostDetailsImageView( - url: imageURL(post: posts[index]), - loadingStage: $loadingStage, - finalLoadingState: .loaded, - post: posts[index] - ) - .background( - loadingStage == .loaded ? Color(.systemBackground) : Color.clear - ) - } - .tag(index) - } - } - .onChange(of: currentIndex) { - if currentIndex == posts.count - 1 { manager.loadNextPage() } - - preloadNearbyImages() - } - .onAppear(perform: preloadNearbyImages) - #if !os(macOS) - .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) - #endif - } - - private func preloadNearbyImages() { - let preloadRange = settings.preloadedCarouselImages - - guard preloadRange > 0 else { return } - - let startIndex = max(0, currentIndex - preloadRange) - let endIndex = min(posts.count - 1, currentIndex + preloadRange) - var urlsToPreload: [URL] = [] - - for index in startIndex...endIndex { - if let url = imageURL(post: posts[index]) { - urlsToPreload.append(url) - } - - urlsToPreload.append(posts[index].previewURL) - } - - cacheManager.preloadImages(urlsToPreload) - } -} |