damus

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

UserStatusView.swift (2141B)


      1 //
      2 //  UserStatus.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2023-08-21.
      6 //
      7 
      8 import SwiftUI
      9 import MediaPlayer
     10 import WebKit
     11 
     12 struct UserStatusView: View {
     13     @ObservedObject var status: UserStatusModel
     14 
     15     var show_general: Bool
     16     var show_music: Bool
     17 
     18     @Environment(\.openURL) var openURL
     19 
     20     func Status(st: UserStatus, prefix: String = "") -> some View {
     21         HStack {
     22             Text(verbatim: "\(prefix)\(st.content)")
     23                 .lineLimit(1)
     24                 .foregroundColor(.gray)
     25                 .font(.callout.italic())
     26             if st.url != nil {
     27                 Image("link")
     28                     .resizable()
     29                     .frame(width: 16, height: 16)
     30                     .foregroundColor(.gray)
     31             }
     32         }
     33         .onTapGesture {
     34             if let url = st.url {
     35                 openURL(url)
     36             }
     37         }
     38         .contextMenu(
     39             menuItems: {
     40                 if let url = st.url {
     41                     Button(url.absoluteString, action: { openURL(url) }) }
     42             }, preview: {
     43                 if let url = st.url {
     44                     URLPreview(url: url)
     45                 }
     46             })
     47     }
     48 
     49     var body: some View {
     50         VStack(alignment: .leading, spacing: 2) {
     51             if show_general, let general = status.general {
     52                 Status(st: general)
     53             }
     54 
     55             if show_music, let playing = status.music {
     56                 Status(st: playing, prefix: "🎵")
     57             }
     58         }
     59 
     60     }
     61 
     62     struct URLPreview: UIViewRepresentable {
     63         var url: URL
     64 
     65         func makeUIView(context: Context) -> WKWebView {
     66             return WKWebView()
     67         }
     68 
     69         func updateUIView(_ wkView: WKWebView, context: Context) {
     70             let request = URLRequest(url: url)
     71             wkView.load(request)
     72         }
     73     }
     74 }
     75 
     76 /*
     77 struct UserStatusView_Previews: PreviewProvider {
     78     static var previews: some View {
     79         UserStatusView(status: UserStatus(type: .music, expires_at: nil, content: "Track - Artist", created_at: 0, url: URL(string: "spotify:search:abc")), show_general: true, show_music: true)
     80     }
     81 }
     82 
     83 */