commit 444f76a233085480764a96e218d466ca40c2c599
parent 49082683473108b8211e991830750240bb014707
Author: Thomas <31560900+0xtlt@users.noreply.github.com>
Date:   Fri, 23 Dec 2022 18:27:39 +0100
MetadataView -> EditMetadataView
Diffstat:
5 files changed, 180 insertions(+), 180 deletions(-)
diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj
@@ -129,7 +129,7 @@
 		4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */; };
 		4CEE2AF9280B2EAC00AB5EEF /* PowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF8280B2EAC00AB5EEF /* PowView.swift */; };
 		4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */; };
-		E990020F2955F837003BBC5A /* MetadataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E990020E2955F837003BBC5A /* MetadataView.swift */; };
+		E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E990020E2955F837003BBC5A /* EditMetadataView.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -307,7 +307,7 @@
 		4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileName.swift; sourceTree = "<group>"; };
 		4CEE2AF8280B2EAC00AB5EEF /* PowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowView.swift; sourceTree = "<group>"; };
 		4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventActionBar.swift; sourceTree = "<group>"; };
-		E990020E2955F837003BBC5A /* MetadataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetadataView.swift; sourceTree = "<group>"; };
+		E990020E2955F837003BBC5A /* EditMetadataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMetadataView.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -475,7 +475,7 @@
 				4C216F31286E388800040376 /* DMChatView.swift */,
 				4C216F33286F5ACD00040376 /* DMView.swift */,
 				4C06670028FC7C5900038D2A /* RelayView.swift */,
-				E990020E2955F837003BBC5A /* MetadataView.swift */,
+				E990020E2955F837003BBC5A /* EditMetadataView.swift */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -848,7 +848,7 @@
 				4C3EA67D28FFBBA300C48A62 /* InvoicesView.swift in Sources */,
 				4C363A8E28236FE4006E126D /* NoteContentView.swift in Sources */,
 				4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */,
-				E990020F2955F837003BBC5A /* MetadataView.swift in Sources */,
+				E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */,
 				4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */,
 				4C0A3F97280F8E02000448DE /* ThreadView.swift in Sources */,
 				4C06670B28FDE64700038D2A /* damus.c in Sources */,
diff --git a/damus/Views/ConfigView.swift b/damus/Views/ConfigView.swift
@@ -80,7 +80,7 @@ struct ConfigView: View {
                 
                 Section("Account settings") {
                     NavigationLink {
-                        MetadataView(damus_state: state, profileModel: ProfileModel(pubkey: state.pubkey, damus: state))
+                        EditMetadataView(damus_state: state, profileModel: ProfileModel(pubkey: state.pubkey, damus: state))
                     } label: {
                         Text("Profile metadata")
                     }
diff --git a/damus/Views/EditMetadataView.swift b/damus/Views/EditMetadataView.swift
@@ -0,0 +1,174 @@
+//
+//  EditMetadataView.swift
+//  damus
+//
+//  Created by Thomas Tastet on 23/12/2022.
+//
+
+import SwiftUI
+
+let PPM_SIZE: CGFloat = 80.0
+
+func isHttpsUrl(_ string: String) -> Bool {
+    let urlRegEx = "^https://.*$"
+    let urlTest = NSPredicate(format:"SELF MATCHES %@", urlRegEx)
+    return urlTest.evaluate(with: string)
+}
+
+func isImage(_ urlString: String) -> Bool {
+    let imageTypes = ["image/jpg", "image/jpeg", "image/png", "image/gif", "image/tiff", "image/bmp"]
+
+    guard let url = URL(string: urlString) else {
+        return false
+    }
+
+    var result = false
+    let semaphore = DispatchSemaphore(value: 0)
+
+    let task = URLSession.shared.dataTask(with: url) { data, response, error in
+        if let error = error {
+            print(error)
+            semaphore.signal()
+            return
+        }
+
+        guard let httpResponse = response as? HTTPURLResponse,
+              let contentType = httpResponse.allHeaderFields["Content-Type"] as? String else {
+            semaphore.signal()
+            return
+        }
+
+        if imageTypes.contains(contentType.lowercased()) {
+            result = true
+        }
+
+        semaphore.signal()
+    }
+
+    task.resume()
+    semaphore.wait()
+
+    return result
+}
+
+struct EditMetadataView: View {
+    let damus_state: DamusState
+    @State var name: String = ""
+    @State var about: String = ""
+    @State var picture: String = ""
+    @State var nip05: String = ""
+    @State var nickname: String = ""
+    @State var lud06: String = ""
+    @State var lud16: String = ""
+    @State private var showAlert = false
+    
+    // Image preview
+    @State var profiles = Profiles()
+    @State private var timer: Timer?
+    
+    @StateObject var profileModel: ProfileModel
+    
+    func save() {
+        let metadata = NostrMetadata(
+            display_name: name,
+            name: nickname,
+            about: about,
+            website: nil,
+            nip05: nip05.isEmpty ? nil : nip05,
+            picture: picture.isEmpty ? nil : picture,
+            lud06: lud06.isEmpty ? nil : lud06,
+            lud16: lud16.isEmpty ? nil : lud16
+        );
+        
+        let m_metadata_ev = make_metadata_event(keypair: damus_state.keypair, metadata: metadata)
+        
+        if let metadata_ev = m_metadata_ev {
+            damus_state.pool.send(.event(metadata_ev))
+        }
+    }
+    
+    var body: some View {
+        VStack(alignment: .leading) {
+            Form {
+                HStack {
+                    Spacer()
+                    ProfilePicView(pubkey: "0", size: PPM_SIZE, highlight: .none, profiles: profiles)
+                    Spacer()
+                }
+                Section("Your Nostr Profile") {
+                    TextField("Your username", text: $name)
+                        .textInputAutocapitalization(.never)
+                    TextField("Your @", text: $nickname)
+                        .textInputAutocapitalization(.never)
+                    TextField("Profile Picture Url", text: $picture)
+                        .autocorrectionDisabled(true)
+                        .textInputAutocapitalization(.never)
+                        .onChange(of: picture) { newValue in
+                            self.timer?.invalidate()
+                            self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { _ in
+                                profiles = Profiles()
+                                let tmp_profile = Profile(name: "0", display_name: "0", about: "0", picture: isHttpsUrl(picture) && isImage(picture) ? picture : nil, website: nil, lud06: "", lud16: nil, nip05: nil)
+                                let ts_profile = TimestampedProfile(profile: tmp_profile, timestamp: 0)
+                                profiles.add(id: "0", profile: ts_profile)
+                            }
+                        }
+                    TextField("NIP-05 Verification Domain (eg: example.com)", text: $nip05)
+                        .autocorrectionDisabled(true)
+                        .textInputAutocapitalization(.never)
+                }
+                
+                Section("Description") {
+                    ZStack(alignment: .topLeading) {
+                        TextEditor(text: $about)
+                            .textInputAutocapitalization(.sentences)
+                        if about.isEmpty {
+                            Text("Type your description here...")
+                                .offset(x: 0, y: 7)
+                                .foregroundColor(Color(uiColor: .placeholderText))
+                        }
+                    }
+                }
+                
+                Section("Advanced") {
+                    TextField("LNURL", text: $lud06)
+                        .autocorrectionDisabled(true)
+                        .textInputAutocapitalization(.never)
+                    TextField("LN Address", text: $lud16)
+                        .autocorrectionDisabled(true)
+                        .textInputAutocapitalization(.never)
+                }
+                
+                Button("Save") {
+                    save()
+                    showAlert = true
+                }.alert(isPresented: $showAlert) {
+                    Alert(title: Text("Saved"), message: Text("Your metadata has been saved."), dismissButton: .default(Text("OK")))
+                }
+            }
+        }
+        .onAppear() {
+            profileModel.subscribe()
+            
+            let data = damus_state.profiles.lookup(id: profileModel.pubkey)
+            
+            name = data?.display_name ?? name
+            nickname = data?.name ?? name
+            about = data?.about ?? about
+            picture = data?.picture ?? picture
+            nip05 = data?.nip05 ?? nip05
+            lud06 = data?.lud06 ?? lud06
+            lud16 = data?.lud16 ?? lud16
+        }
+        .onDisappear {
+            profileModel.unsubscribe()
+        }
+    }
+}
+
+struct EditMetadataView_Previews: PreviewProvider {
+    static var previews: some View {
+        let ds = test_damus_state()
+        let profile_model = ProfileModel(pubkey: ds.pubkey, damus: ds)
+        EditMetadataView(damus_state: ds, profileModel: profile_model)
+    }
+}
diff --git a/damus/Views/MetadataView.swift b/damus/Views/MetadataView.swift
@@ -1,174 +0,0 @@
-//
-//  MetadataView.swift
-//  damus
-//
-//  Created by Thomas Tastet on 23/12/2022.
-//
-
-import SwiftUI
-
-let PPM_SIZE: CGFloat = 80.0
-
-func isHttpsUrl(_ string: String) -> Bool {
-    let urlRegEx = "^https://.*$"
-    let urlTest = NSPredicate(format:"SELF MATCHES %@", urlRegEx)
-    return urlTest.evaluate(with: string)
-}
-
-func isImage(_ urlString: String) -> Bool {
-    let imageTypes = ["image/jpg", "image/jpeg", "image/png", "image/gif", "image/tiff", "image/bmp"]
-
-    guard let url = URL(string: urlString) else {
-        return false
-    }
-
-    var result = false
-    let semaphore = DispatchSemaphore(value: 0)
-
-    let task = URLSession.shared.dataTask(with: url) { data, response, error in
-        if let error = error {
-            print(error)
-            semaphore.signal()
-            return
-        }
-
-        guard let httpResponse = response as? HTTPURLResponse,
-              let contentType = httpResponse.allHeaderFields["Content-Type"] as? String else {
-            semaphore.signal()
-            return
-        }
-
-        if imageTypes.contains(contentType.lowercased()) {
-            result = true
-        }
-
-        semaphore.signal()
-    }
-
-    task.resume()
-    semaphore.wait()
-
-    return result
-}
-
-struct MetadataView: View {
-    let damus_state: DamusState
-    @State var name: String = ""
-    @State var about: String = ""
-    @State var picture: String = ""
-    @State var nip05: String = ""
-    @State var nickname: String = ""
-    @State var lud06: String = ""
-    @State var lud16: String = ""
-    @State private var showAlert = false
-    
-    // Image preview
-    @State var profiles = Profiles()
-    @State private var timer: Timer?
-    
-    @StateObject var profileModel: ProfileModel
-    
-    func save() {
-        let metadata = NostrMetadata(
-            display_name: name,
-            name: nickname,
-            about: about,
-            website: nil,
-            nip05: nip05.isEmpty ? nil : nip05,
-            picture: picture.isEmpty ? nil : picture,
-            lud06: lud06.isEmpty ? nil : lud06,
-            lud16: lud16.isEmpty ? nil : lud16
-        );
-        
-        let m_metadata_ev = make_metadata_event(keypair: damus_state.keypair, metadata: metadata)
-        
-        if let metadata_ev = m_metadata_ev {
-            damus_state.pool.send(.event(metadata_ev))
-        }
-    }
-    
-    var body: some View {
-        VStack(alignment: .leading) {
-            Form {
-                HStack {
-                    Spacer()
-                    ProfilePicView(pubkey: "0", size: PPM_SIZE, highlight: .none, profiles: profiles)
-                    Spacer()
-                }
-                Section("Your Nostr Profile") {
-                    TextField("Your username", text: $name)
-                        .textInputAutocapitalization(.never)
-                    TextField("Your @", text: $nickname)
-                        .textInputAutocapitalization(.never)
-                    TextField("Profile Picture Url", text: $picture)
-                        .autocorrectionDisabled(true)
-                        .textInputAutocapitalization(.never)
-                        .onChange(of: picture) { newValue in
-                            self.timer?.invalidate()
-                            self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { _ in
-                                profiles = Profiles()
-                                let tmp_profile = Profile(name: "0", display_name: "0", about: "0", picture: isHttpsUrl(picture) && isImage(picture) ? picture : nil, website: nil, lud06: "", lud16: nil, nip05: nil)
-                                let ts_profile = TimestampedProfile(profile: tmp_profile, timestamp: 0)
-                                profiles.add(id: "0", profile: ts_profile)
-                            }
-                        }
-                    TextField("NIP-05 Verification Domain (eg: example.com)", text: $nip05)
-                        .autocorrectionDisabled(true)
-                        .textInputAutocapitalization(.never)
-                }
-                
-                Section("Description") {
-                    ZStack(alignment: .topLeading) {
-                        TextEditor(text: $about)
-                            .textInputAutocapitalization(.sentences)
-                        if about.isEmpty {
-                            Text("Type your description here...")
-                                .offset(x: 0, y: 7)
-                                .foregroundColor(Color(uiColor: .placeholderText))
-                        }
-                    }
-                }
-                
-                Section("Advanced") {
-                    TextField("LNURL", text: $lud06)
-                        .autocorrectionDisabled(true)
-                        .textInputAutocapitalization(.never)
-                    TextField("LN Address", text: $lud16)
-                        .autocorrectionDisabled(true)
-                        .textInputAutocapitalization(.never)
-                }
-                
-                Button("Save") {
-                    save()
-                    showAlert = true
-                }.alert(isPresented: $showAlert) {
-                    Alert(title: Text("Saved"), message: Text("Your metadata has been saved."), dismissButton: .default(Text("OK")))
-                }
-            }
-        }
-        .onAppear() {
-            profileModel.subscribe()
-            
-            let data = damus_state.profiles.lookup(id: profileModel.pubkey)
-            
-            name = data?.display_name ?? name
-            nickname = data?.name ?? name
-            about = data?.about ?? about
-            picture = data?.picture ?? picture
-            nip05 = data?.nip05 ?? nip05
-            lud06 = data?.lud06 ?? lud06
-            lud16 = data?.lud16 ?? lud16
-        }
-        .onDisappear {
-            profileModel.unsubscribe()
-        }
-    }
-}
-
-struct MetadataView_Previews: PreviewProvider {
-    static var previews: some View {
-        let ds = test_damus_state()
-        let profile_model = ProfileModel(pubkey: ds.pubkey, damus: ds)
-        MetadataView(damus_state: ds, profileModel: profile_model)
-    }
-}
diff --git a/damus/Views/ProfileView.swift b/damus/Views/ProfileView.swift
@@ -141,7 +141,7 @@ struct ProfileView: View {
                 )
                 
             }.sheet(isPresented: $showingEditProfile) {
-                MetadataView(damus_state: damus_state, profileModel: profile)
+                EditMetadataView(damus_state: damus_state, profileModel: profile)
             }
             
             ProfileNameView(pubkey: profile.pubkey, profile: data, contacts: damus_state.contacts)