damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

ImageContainerView.swift (2222B)


      1 //
      2 //  CarouselImageContainerView.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2023-03-23.
      6 //
      7 
      8 import SwiftUI
      9 import Kingfisher
     10 
     11     
     12 struct ImageContainerView: View {
     13     let video_controller: VideoController
     14     let url: MediaUrl
     15     let settings: UserSettingsStore
     16     
     17     @State private var image: UIImage?
     18     @State private var showShareSheet = false
     19     
     20     private struct ImageHandler: ImageModifier {
     21         @Binding var handler: UIImage?
     22         
     23         func modify(_ image: UIImage) -> UIImage {
     24             handler = image
     25             return image
     26         }
     27     }
     28     
     29     func Img(url: URL) -> some View {
     30         KFAnimatedImage(url)
     31             .imageContext(.note, disable_animation: settings.disable_animation)
     32             .configure { view in
     33                 view.framePreloadCount = 3
     34             }
     35             .imageModifier(ImageHandler(handler: $image))
     36             .clipped()
     37             .modifier(ImageContextMenuModifier(url: url, image: image, settings: settings, showShareSheet: $showShareSheet))
     38             .sheet(isPresented: $showShareSheet) {
     39                 ShareSheet(activityItems: [url])
     40             }
     41     }
     42     
     43     var body: some View {
     44         Group {
     45             switch url {
     46                 case .image(let url):
     47                     Img(url: url)
     48                 case .video(let url):
     49                     DamusVideoPlayer(url: url, video_size: .constant(nil), controller: video_controller, style: .full, visibility_tracking_method: .generic)
     50             }
     51         }
     52     }
     53 }
     54 
     55 let test_image_url = URL(string: "https://jb55.com/red-me.jpg")!
     56 fileprivate let test_video_url = URL(string: "http://cdn.jb55.com/s/zaps-build.mp4")!
     57 
     58 struct ImageContainerView_Previews: PreviewProvider {
     59     static var previews: some View {
     60         Group {
     61             ImageContainerView(video_controller: test_damus_state.video, url: .image(test_image_url), settings: test_damus_state.settings)
     62                 .previewDisplayName("Image")
     63             ImageContainerView(video_controller: test_damus_state.video, url: .video(test_video_url), settings: test_damus_state.settings)
     64                 .previewDisplayName("Video")
     65         }
     66         .environmentObject(OrientationTracker())
     67     }
     68 }