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 */