From b2ba1e0e3b4e0b01a230fcaa6bd31ca6ba0b7f13 Mon Sep 17 00:00:00 2001 From: ericholguin Date: Tue, 2 Jul 2024 19:32:44 -0600 Subject: [PATCH 1/8] highlight: fixes and improvements This patch allows highlights to be included in posts as well as removes context when creating a highlight. Highlights now route as the root and selecting the highlight in root routes to the highlighted event. Signed-off-by: ericholguin --- damus/Models/ContentFilters.swift | 2 +- damus/Models/ThreadModel.swift | 4 +++- damus/Views/Events/Components/ReplyPart.swift | 16 +++++----------- damus/Views/Events/EventBody.swift | 6 ++++++ .../Events/Highlight/HighlightPostView.swift | 5 ++--- damus/Views/Events/SelectedEventView.swift | 19 ++++--------------- nostrdb/NdbNote.swift | 9 ++++++++- 7 files changed, 29 insertions(+), 32 deletions(-) diff --git a/damus/Models/ContentFilters.swift b/damus/Models/ContentFilters.swift index ca9baa05..425d2b35 100644 --- a/damus/Models/ContentFilters.swift +++ b/damus/Models/ContentFilters.swift @@ -16,7 +16,7 @@ enum FilterState : Int { func filter(ev: NostrEvent) -> Bool { switch self { case .posts: - return ev.known_kind == .boost || !ev.is_reply() + return ev.known_kind == .boost || ev.known_kind == .highlight || !ev.is_reply() case .posts_and_replies: return true } diff --git a/damus/Models/ThreadModel.swift b/damus/Models/ThreadModel.swift index 2f3b2844..f4f65f8b 100644 --- a/damus/Models/ThreadModel.swift +++ b/damus/Models/ThreadModel.swift @@ -11,13 +11,15 @@ import Foundation class ThreadModel: ObservableObject { @Published var event: NostrEvent let original_event: NostrEvent + let highlight: String? var event_map: Set - init(event: NostrEvent, damus_state: DamusState) { + init(event: NostrEvent, damus_state: DamusState, highlight: String? = nil) { self.damus_state = damus_state self.event_map = Set() self.event = event self.original_event = event + self.highlight = highlight add_event(event, keypair: damus_state.keypair) } diff --git a/damus/Views/Events/Components/ReplyPart.swift b/damus/Views/Events/Components/ReplyPart.swift index 7fa8bffd..85858299 100644 --- a/damus/Views/Events/Components/ReplyPart.swift +++ b/damus/Views/Events/Components/ReplyPart.swift @@ -15,18 +15,12 @@ struct ReplyPart: View { var body: some View { Group { - if let reply_ref = event.thread_reply()?.reply { + if event.known_kind == .highlight { + let highlighted_note = event.highlighted_note_id().flatMap { events.lookup($0) } + HighlightDescription(event: event, highlighted_event: highlighted_note, ndb: ndb) + } else if let reply_ref = event.thread_reply()?.reply { let replying_to = events.lookup(reply_ref.note_id) - if event.known_kind != .highlight { - ReplyDescription(event: event, replying_to: replying_to, ndb: ndb) - } else if event.known_kind == .highlight { - HighlightDescription(event: event, highlighted_event: replying_to, ndb: ndb) - } - else { - EmptyView() - } - } else { - EmptyView() + ReplyDescription(event: event, replying_to: replying_to, ndb: ndb) } } } diff --git a/damus/Views/Events/EventBody.swift b/damus/Views/Events/EventBody.swift index 31c978b5..ea63cdd2 100644 --- a/damus/Views/Events/EventBody.swift +++ b/damus/Views/Events/EventBody.swift @@ -37,6 +37,12 @@ struct EventBody: View { } } else if event.known_kind == .highlight { HighlightBodyView(state: damus_state, ev: event, options: options) + .onTapGesture { + if let highlighted_note = event.highlighted_note_id().flatMap({ damus_state.events.lookup($0) }) { + let thread = ThreadModel(event: highlighted_note, damus_state: damus_state, highlight: event.content) + damus_state.nav.push(route: Route.Thread(thread: thread)) + } + } } else { note_content } diff --git a/damus/Views/Events/Highlight/HighlightPostView.swift b/damus/Views/Events/Highlight/HighlightPostView.swift index d0a23f50..d66e339a 100644 --- a/damus/Views/Events/Highlight/HighlightPostView.swift +++ b/damus/Views/Events/Highlight/HighlightPostView.swift @@ -29,8 +29,7 @@ struct HighlightPostView: View { Spacer() Button(NSLocalizedString("Post", comment: "Button to post a highlight.")) { - var tags: [[String]] = [ ["e", "\(self.event.id)"] ] - tags.append(["context", self.event.content]) + let tags: [[String]] = [ ["e", "\(self.event.id)"] ] let kind = NostrKind.highlight.rawValue guard let ev = NostrEvent(content: selectedText, keypair: damus_state.keypair, kind: kind, tags: tags) else { @@ -53,7 +52,7 @@ struct HighlightPostView: View { HStack { var attributedString: AttributedString { - var attributedString = AttributedString(self.event.content) + var attributedString = AttributedString(selectedText) if let range = attributedString.range(of: selectedText) { attributedString[range].backgroundColor = DamusColors.highlight diff --git a/damus/Views/Events/SelectedEventView.swift b/damus/Views/Events/SelectedEventView.swift index ceb34828..f1baaa46 100644 --- a/damus/Views/Events/SelectedEventView.swift +++ b/damus/Views/Events/SelectedEventView.swift @@ -39,21 +39,10 @@ struct SelectedEventView: View { .padding(.horizontal) .minimumScaleFactor(0.75) .lineLimit(1) - - if let reply_ref = event.thread_reply()?.reply { - let replying_to = damus.events.lookup(reply_ref.note_id) - if event.known_kind == .highlight { - HighlightDescription(event: event, highlighted_event: replying_to, ndb: damus.ndb) - .padding(.horizontal) - } else { - ReplyDescription(event: event, replying_to: replying_to, ndb: damus.ndb) - .padding(.horizontal) - } - } else if event.known_kind == .highlight { - HighlightDescription(event: event, highlighted_event: nil, ndb: damus.ndb) - .padding(.horizontal) - } - + + ReplyPart(events: damus.events, event: event, keypair: damus.keypair, ndb: damus.ndb) + .padding(.horizontal) + ProxyView(event: event) .padding(.top, 5) .padding(.horizontal) diff --git a/nostrdb/NdbNote.swift b/nostrdb/NdbNote.swift index ab2c15f1..9c0f7f8a 100644 --- a/nostrdb/NdbNote.swift +++ b/nostrdb/NdbNote.swift @@ -341,7 +341,14 @@ extension NdbNote { } func thread_reply() -> ThreadReply? { - ThreadReply(tags: self.tags) + if self.known_kind != .highlight { + return ThreadReply(tags: self.tags) + } + return nil + } + + func highlighted_note_id() -> NoteId? { + return ThreadReply(tags: self.tags)?.reply.note_id } func get_content(_ keypair: Keypair) -> String { From e70cfbbe635d544c34f177d72e2243fab633eea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Mon, 5 Aug 2024 12:48:18 -0700 Subject: [PATCH 2/8] Fix crash with blurhashes with reported dimension of 0x0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit fixes a consistent crash noticed when visiting a particular profile. The crash was occuring when trying to display the blurhash of a specific Event, where the metadata claimed the image dimensions were 0px x 0px. The null dimensions caused a division by zero to occur when scaling the image down, yielding a NaN (Not a Number) size value, which crashed the app when trying to cast that CGFloat value down to an integer. The crash was fixed by modifying the down-scaling computations to check for invalid dimensions, and return nil. The callers were then updated to fallback to a default display dimension. Issue repro ------- Device: iPhone 15 simulator iOS: 17.5 Damus: dba1799df097014298c52aa16238b4f33ec09ed2 Steps: 1. Visit the profile npub1gujeqakgt7fyp6zjggxhyy7ft623qtcaay5lkc8n8gkry4cvnrzqd3f67z 2. Check accessing the profile does not crash Damus. 3. Visit the event that had invalid 0x0 dimensions on the metadata (note1qmqdualjezamcjun23l4d9xw7529m7fee6hklgtnhack2fwznxysuzuuyz) 4. Check that Damus does not crash. Results: Steps 2 and 4 crash 100% of the time (3/3) Testing -------- PASS Device: iPhone 15 simulator iOS: 17.5 Damus: This commit Steps: Same as repro Results: 1. Crash no longer occurs 2. Blurhash looks ok Closes: https://github.com/damus-io/damus/issues/2341 Changelog-Fixed: Fix crash when viewing notes with invalid image dimension metadata Signed-off-by: Daniel D’Aquino --- damus/Util/Images/ImageMetadata.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/damus/Util/Images/ImageMetadata.swift b/damus/Util/Images/ImageMetadata.swift index cf02294e..a3cce5dd 100644 --- a/damus/Util/Images/ImageMetadata.swift +++ b/damus/Util/Images/ImageMetadata.swift @@ -60,7 +60,8 @@ struct ImageMetadata: Equatable { func process_blurhash(blurhash: String, size: CGSize?) async -> UIImage? { let res = Task.detached(priority: .low) { - let size = get_blurhash_size(img_size: size ?? CGSize(width: 100.0, height: 100.0)) + let default_size = CGSize(width: 100.0, height: 100.0) + let size = get_blurhash_size(img_size: size ?? default_size) ?? default_size guard let img = UIImage.init(blurHash: blurhash, size: size) else { let noimg: UIImage? = nil return noimg @@ -135,7 +136,8 @@ extension UIImage { } } -func get_blurhash_size(img_size: CGSize) -> CGSize { +func get_blurhash_size(img_size: CGSize) -> CGSize? { + guard img_size.width > 0 && img_size.height > 0 else { return nil } return CGSize(width: 100.0, height: (100.0/img_size.width) * img_size.height) } @@ -145,7 +147,7 @@ func calculate_blurhash(img: UIImage) async -> String? { } let res = Task.detached(priority: .low) { - let bhs = get_blurhash_size(img_size: img.size) + let bhs = get_blurhash_size(img_size: img.size) ?? CGSize(width: 100.0, height: 100.0) let smaller = img.resized(to: bhs) guard let blurhash = smaller.blurHash(numberOfComponents: (5,5)) else { From 858d9dc6f0acf6ba3178e15d4dafc1956701323b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 14 Jul 2024 21:56:15 -0700 Subject: [PATCH 3/8] restore localization for custom tabs Signed-off-by: William Casarin --- damus/ContentView.swift | 6 +++--- damus/Views/DirectMessagesView.swift | 4 ++-- damus/Views/FollowingView.swift | 4 ++-- damus/Views/Notifications/NotificationsView.swift | 6 +++--- damus/Views/Profile/ProfileView.swift | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/damus/ContentView.swift b/damus/ContentView.swift index 4371c217..7bf8dac0 100644 --- a/damus/ContentView.swift +++ b/damus/ContentView.swift @@ -127,9 +127,9 @@ struct ContentView: View { } .safeAreaInset(edge: .top, spacing: 0) { VStack(spacing: 0) { - CustomPicker(tabs: - [("Notes", FilterState.posts), - ("Notes & Replies", FilterState.posts_and_replies) + CustomPicker(tabs: [ + (NSLocalizedString("Notes", comment: "Label for filter for seeing only notes (instead of notes and replies)."), FilterState.posts), + (NSLocalizedString("Notes & Replies", comment: "Label for filter for seeing notes and replies (instead of only notes)."), FilterState.posts_and_replies) ], selection: $filter_state) diff --git a/damus/Views/DirectMessagesView.swift b/damus/Views/DirectMessagesView.swift index 26983a33..0adf2cf9 100644 --- a/damus/Views/DirectMessagesView.swift +++ b/damus/Views/DirectMessagesView.swift @@ -73,8 +73,8 @@ struct DirectMessagesView: View { var body: some View { VStack(spacing: 0) { CustomPicker(tabs: [ - ("DMs", DMType.friend), - ("Requests", DMType.rando), + (NSLocalizedString("DMs", comment: "Picker option for DM selector for seeing only DMs that have been responded to. DM is the English abbreviation for Direct Message."), DMType.friend), + (NSLocalizedString("Requests", comment: "Picker option for DM selector for seeing only message requests (DMs that someone else sent the user which has not been responded to yet"), DMType.rando), ], selection: $dm_type) Divider() diff --git a/damus/Views/FollowingView.swift b/damus/Views/FollowingView.swift index 7235f129..d6aef101 100644 --- a/damus/Views/FollowingView.swift +++ b/damus/Views/FollowingView.swift @@ -161,8 +161,8 @@ struct FollowingView: View { .safeAreaInset(edge: .top, spacing: 0) { VStack(spacing: 0) { CustomPicker(tabs: [ - ("People", FollowingViewTabSelection.people), - ("Hashtags",FollowingViewTabSelection.hashtags) + (NSLocalizedString("People", comment: "Label for filter for seeing only people follows."), FollowingViewTabSelection.people), + (NSLocalizedString("Hashtags", comment: "Label for filter for seeing only hashtag follows."), FollowingViewTabSelection.hashtags) ], selection: $tab_selection) Divider() .frame(height: 1) diff --git a/damus/Views/Notifications/NotificationsView.swift b/damus/Views/Notifications/NotificationsView.swift index 482a006f..2f824d18 100644 --- a/damus/Views/Notifications/NotificationsView.swift +++ b/damus/Views/Notifications/NotificationsView.swift @@ -118,9 +118,9 @@ struct NotificationsView: View { .safeAreaInset(edge: .top, spacing: 0) { VStack(spacing: 0) { CustomPicker(tabs: [ - ("All", NotificationFilterState.all), - ("Zaps", NotificationFilterState.zaps), - ("Mentions", NotificationFilterState.replies), + (NSLocalizedString("All", comment: "Label for filter for all notifications."), NotificationFilterState.all), + (NSLocalizedString("Zaps", comment: "Label for filter for zap notifications."), NotificationFilterState.zaps), + (NSLocalizedString("Mentions", comment: "Label for filter for seeing mention notifications (replies, etc)."), NotificationFilterState.replies), ], selection: $filter_state) Divider() .frame(height: 1) diff --git a/damus/Views/Profile/ProfileView.swift b/damus/Views/Profile/ProfileView.swift index e861289d..235720e0 100644 --- a/damus/Views/Profile/ProfileView.swift +++ b/damus/Views/Profile/ProfileView.swift @@ -435,8 +435,8 @@ struct ProfileView: View { VStack(spacing: 0) { CustomPicker(tabs: [ - ("Notes", FilterState.posts), - ("Notes & Replies", FilterState.posts_and_replies) + (NSLocalizedString("Notes", comment: "Label for filter for seeing only notes (instead of notes and replies)."), FilterState.posts), + (NSLocalizedString("Notes & Replies", comment: "Label for filter for seeing notes and replies (instead of only notes)."), FilterState.posts_and_replies) ], selection: $filter_state) Divider() .frame(height: 1) From eff4525720f2e8ebe176021538365eff564293d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Sat, 3 Aug 2024 20:03:14 -0700 Subject: [PATCH 4/8] Implement push notification preferences and update API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit implements push notification preferences with the push notifications server, as well as updates itself to the new push notifications API. Testing ------- Device: iPhone 15 simulator iOS: 17.5 Damus: this commit notepush: 3ca3a8325707535fdbc98d681d5e4a47dc313c67 Steps: 1. Enable push notifications. Settings should get synced and success message should appear 2. Disable push notifications. Sync message should disappear as it no longer applies 3. Enable push notifications again, and tweak notifications. Settings should sync with no errors 4. Leave settings screen and come back. Settings should be declared as synced Signed-off-by: Daniel D’Aquino Closes: https://github.com/damus-io/damus/issues/2360 --- damus/Models/PushNotificationClient.swift | 218 ++++++++++++++++-- damus/Util/Constants.swift | 8 +- .../Settings/NotificationSettingsView.swift | 121 +++++++++- 3 files changed, 311 insertions(+), 36 deletions(-) diff --git a/damus/Models/PushNotificationClient.swift b/damus/Models/PushNotificationClient.swift index 13e75758..70775783 100644 --- a/damus/Models/PushNotificationClient.swift +++ b/damus/Models/PushNotificationClient.swift @@ -11,6 +11,10 @@ struct PushNotificationClient { let keypair: Keypair let settings: UserSettingsStore private(set) var device_token: Data? = nil + var device_token_hex: String? { + guard let device_token else { return nil } + return device_token.map { String(format: "%02.2hhx", $0) }.joined() + } mutating func set_device_token(new_device_token: Data) async throws { self.device_token = new_device_token @@ -20,26 +24,21 @@ struct PushNotificationClient { } func send_token() async throws { - guard let device_token else { return } // Send the device token and pubkey to the server - let token = device_token.map { String(format: "%02.2hhx", $0) }.joined() + guard let token = device_token_hex else { return } Log.info("Sending device token to server: %s", for: .push_notifications, token) - let pubkey = self.keypair.pubkey - - // Send those as JSON to the server - let json: [String: Any] = ["deviceToken": token, "pubkey": pubkey.hex()] - // create post request - let url = self.settings.send_device_token_to_localhost ? Constants.DEVICE_TOKEN_RECEIVER_TEST_URL : Constants.DEVICE_TOKEN_RECEIVER_PRODUCTION_URL - let json_data = try JSONSerialization.data(withJSONObject: json) - + let url = self.current_push_notification_environment().api_base_url() + .appendingPathComponent("user-info") + .appendingPathComponent(self.keypair.pubkey.hex()) + .appendingPathComponent(token) let (data, response) = try await make_nip98_authenticated_request( - method: .post, + method: .put, url: url, - payload: json_data, + payload: nil, payload_type: .json, auth_keypair: self.keypair ) @@ -58,26 +57,23 @@ struct PushNotificationClient { } func revoke_token() async throws { - guard let device_token else { return } - // Send the device token and pubkey to the server - let token = device_token.map { String(format: "%02.2hhx", $0) }.joined() + guard let token = device_token_hex else { return } Log.info("Revoking device token from server: %s", for: .push_notifications, token) let pubkey = self.keypair.pubkey - // Send those as JSON to the server - let json: [String: Any] = ["deviceToken": token, "pubkey": pubkey.hex()] - // create post request - let url = self.settings.send_device_token_to_localhost ? Constants.DEVICE_TOKEN_REVOKER_TEST_URL : Constants.DEVICE_TOKEN_REVOKER_PRODUCTION_URL - let json_data = try JSONSerialization.data(withJSONObject: json) + let url = self.current_push_notification_environment().api_base_url() + .appendingPathComponent("user-info") + .appendingPathComponent(pubkey.hex()) + .appendingPathComponent(token) let (data, response) = try await make_nip98_authenticated_request( - method: .post, + method: .delete, url: url, - payload: json_data, + payload: nil, payload_type: .json, auth_keypair: self.keypair ) @@ -94,6 +90,78 @@ struct PushNotificationClient { return } + + func set_settings(_ new_settings: NotificationSettings? = nil) async throws { + // Send the device token and pubkey to the server + guard let token = device_token_hex else { return } + + Log.info("Sending notification preferences to the server", for: .push_notifications) + + let url = self.current_push_notification_environment().api_base_url() + .appendingPathComponent("user-info") + .appendingPathComponent(self.keypair.pubkey.hex()) + .appendingPathComponent(token) + .appendingPathComponent("preferences") + + let json_payload = try JSONEncoder().encode(new_settings ?? NotificationSettings.from(settings: settings)) + + let (data, response) = try await make_nip98_authenticated_request( + method: .put, + url: url, + payload: json_payload, + payload_type: .json, + auth_keypair: self.keypair + ) + + if let httpResponse = response as? HTTPURLResponse { + switch httpResponse.statusCode { + case 200: + Log.info("Sent notification settings to Damus push notification server successfully", for: .push_notifications) + default: + Log.error("Error in sending notification settings to Damus push notification server. HTTP status code: %d; Response: %s", for: .push_notifications, httpResponse.statusCode, String(data: data, encoding: .utf8) ?? "Unknown") + throw ClientError.http_response_error(status_code: httpResponse.statusCode, response: data) + } + } + + return + } + + func get_settings() async throws -> NotificationSettings { + // Send the device token and pubkey to the server + guard let token = device_token_hex else { + throw ClientError.no_device_token + } + + let url = self.current_push_notification_environment().api_base_url() + .appendingPathComponent("user-info") + .appendingPathComponent(self.keypair.pubkey.hex()) + .appendingPathComponent(token) + .appendingPathComponent("preferences") + + let (data, response) = try await make_nip98_authenticated_request( + method: .get, + url: url, + payload: nil, + payload_type: .json, + auth_keypair: self.keypair + ) + + if let httpResponse = response as? HTTPURLResponse { + switch httpResponse.statusCode { + case 200: + guard let notification_settings = NotificationSettings.from(json_data: data) else { throw ClientError.json_decoding_error } + return notification_settings + default: + Log.error("Error in getting notification settings to Damus push notification server. HTTP status code: %d; Response: %s", for: .push_notifications, httpResponse.statusCode, String(data: data, encoding: .utf8) ?? "Unknown") + throw ClientError.http_response_error(status_code: httpResponse.statusCode, response: data) + } + } + throw ClientError.could_not_process_response + } + + func current_push_notification_environment() -> Environment { + return self.settings.send_device_token_to_localhost ? .local_test(host: nil) : .production + } } // MARK: Helper structures @@ -101,5 +169,111 @@ struct PushNotificationClient { extension PushNotificationClient { enum ClientError: Error { case http_response_error(status_code: Int, response: Data) + case could_not_process_response + case no_device_token + case json_decoding_error + } + + struct NotificationSettings: Codable, Equatable { + let zap_notifications_enabled: Bool + let mention_notifications_enabled: Bool + let repost_notifications_enabled: Bool + let reaction_notifications_enabled: Bool + let dm_notifications_enabled: Bool + let only_notifications_from_following_enabled: Bool + + static func from(json_data: Data) -> Self? { + guard let decoded = try? JSONDecoder().decode(Self.self, from: json_data) else { return nil } + return decoded + } + + static func from(settings: UserSettingsStore) -> Self { + return NotificationSettings( + zap_notifications_enabled: settings.zap_notification, + mention_notifications_enabled: settings.mention_notification, + repost_notifications_enabled: settings.repost_notification, + reaction_notifications_enabled: settings.like_notification, + dm_notifications_enabled: settings.dm_notification, + only_notifications_from_following_enabled: settings.notification_only_from_following + ) + } + + } + + enum Environment: CaseIterable, Codable, Identifiable, StringCodable, Equatable, Hashable { + static var allCases: [Environment] = [.local_test(host: nil), .production] + + case local_test(host: String?) + case production + + func text_description() -> String { + switch self { + case .local_test: + return NSLocalizedString("Test (local)", comment: "Label indicating a local test environment for Push notification functionality (Developer feature)") + case .production: + return NSLocalizedString("Production", comment: "Label indicating the production environment for Push notification functionality") + } + } + + func api_base_url() -> URL { + switch self { + case .local_test(let host): + URL(string: "http://\(host ?? "localhost:8000")") ?? Constants.PUSH_NOTIFICATION_SERVER_TEST_BASE_URL + case .production: + Constants.PURPLE_API_PRODUCTION_BASE_URL + + } + } + + func custom_host() -> String? { + switch self { + case .local_test(let host): + return host + default: + return nil + } + } + + init?(from string: String) { + switch string { + case "local_test": + self = .local_test(host: nil) + case "production": + self = .production + default: + let components = string.split(separator: ":", maxSplits: 1, omittingEmptySubsequences: false) + if components.count == 2 && components[0] == "local_test" { + self = .local_test(host: String(components[1])) + } else { + return nil + } + } + } + + func to_string() -> String { + switch self { + case .local_test(let host): + if let host { + return "local_test:\(host)" + } + return "local_test" + case .production: + return "production" + } + } + + var id: String { + switch self { + case .local_test(let host): + if let host { + return "local_test:\(host)" + } + else { + return "local_test" + } + case .production: + return "production" + } + } } } diff --git a/damus/Util/Constants.swift b/damus/Util/Constants.swift index f3cbf43a..279b92d7 100644 --- a/damus/Util/Constants.swift +++ b/damus/Util/Constants.swift @@ -10,13 +10,13 @@ import Foundation class Constants { //static let EXAMPLE_DEMOS: DamusState = .empty static let DAMUS_APP_GROUP_IDENTIFIER: String = "group.com.damus" - static let DEVICE_TOKEN_RECEIVER_PRODUCTION_URL: URL = URL(string: "http://45.33.32.5:8000/user-info")! - static let DEVICE_TOKEN_RECEIVER_TEST_URL: URL = URL(string: "http://localhost:8000/user-info")! - static let DEVICE_TOKEN_REVOKER_PRODUCTION_URL: URL = URL(string: "http://45.33.32.5:8000/user-info/remove")! - static let DEVICE_TOKEN_REVOKER_TEST_URL: URL = URL(string: "http://localhost:8000/user-info/remove")! static let MAIN_APP_BUNDLE_IDENTIFIER: String = "com.jb55.damus2" static let NOTIFICATION_EXTENSION_BUNDLE_IDENTIFIER: String = "com.jb55.damus2.DamusNotificationService" + // MARK: Push notification server + static let PUSH_NOTIFICATION_SERVER_PRODUCTION_BASE_URL: URL = URL(string: "http://45.33.32.5:8000")! + static let PUSH_NOTIFICATION_SERVER_TEST_BASE_URL: URL = URL(string: "http://localhost:8000")! + // MARK: Purple // API static let PURPLE_API_LOCAL_TEST_BASE_URL: URL = URL(string: "http://localhost:8989")! diff --git a/damus/Views/Settings/NotificationSettingsView.swift b/damus/Views/Settings/NotificationSettingsView.swift index f2711156..4ce30ef4 100644 --- a/damus/Views/Settings/NotificationSettingsView.swift +++ b/damus/Views/Settings/NotificationSettingsView.swift @@ -7,10 +7,13 @@ import SwiftUI +let MINIMUM_PUSH_NOTIFICATION_SYNC_DELAY_IN_SECONDS = 0.25 + struct NotificationSettingsView: View { let damus_state: DamusState @ObservedObject var settings: UserSettingsStore @State var notification_mode_setting_error: String? = nil + @State var notification_preferences_sync_state: PreferencesSyncState = .undefined @Environment(\.dismiss) var dismiss @@ -32,6 +35,7 @@ struct NotificationSettingsView: View { Task { do { try await damus_state.push_notification_client.send_token() + await self.sync_up_remote_notification_settings() settings.notifications_mode = new_value } catch { @@ -44,6 +48,7 @@ struct NotificationSettingsView: View { do { try await damus_state.push_notification_client.revoke_token() settings.notifications_mode = new_value + notification_preferences_sync_state = .not_applicable } catch { notification_mode_setting_error = String(format: NSLocalizedString("Error disabling push notifications with the server: %@", comment: "Error label shown when user tries to disable push notifications but something fails"), error.localizedDescription) @@ -52,6 +57,61 @@ struct NotificationSettingsView: View { } } + // MARK: - Push notification preference sync management + + func notification_preference_binding(_ raw_binding: Binding) -> Binding { + return Binding( + get: { + return raw_binding.wrappedValue + }, + set: { new_value in + let old_value = raw_binding.wrappedValue + raw_binding.wrappedValue = new_value + if self.settings.notifications_mode == .push { + Task { + await self.send_push_notification_preferences(on_failure: { + raw_binding.wrappedValue = old_value + }) + } + } + } + ) + } + + func sync_up_remote_notification_settings() async { + do { + notification_preferences_sync_state = .syncing + let remote_settings = try await damus_state.push_notification_client.get_settings() + let local_settings = PushNotificationClient.NotificationSettings.from(settings: settings) + if remote_settings != local_settings { + await self.send_push_notification_preferences(local_settings) + } + else { + notification_preferences_sync_state = .success + } + } + catch { + notification_preferences_sync_state = .failure(error: String(format: NSLocalizedString("Failed to get push notification preferences from the server", comment: "Error label indicating about a failure in fetching notification preferences"), error.localizedDescription)) + } + } + + func send_push_notification_preferences(_ new_settings: PushNotificationClient.NotificationSettings? = nil, on_failure: (() -> Void)? = nil) async { + do { + notification_preferences_sync_state = .syncing + try await damus_state.push_notification_client.set_settings(new_settings) + // Make sync appear to take at least a few milliseconds or so to avoid issues with labor perception bias (https://growth.design/case-studies/labor-perception-bias) + DispatchQueue.main.asyncAfter(deadline: .now() + MINIMUM_PUSH_NOTIFICATION_SYNC_DELAY_IN_SECONDS) { + notification_preferences_sync_state = .success + } + } + catch { + notification_preferences_sync_state = .failure(error: String(format: NSLocalizedString("Error syncing up push notifications preferences with the server: %@", comment: "Error label shown when system tries to sync up notification preferences to the push notification server but something fails"), error.localizedDescription)) + on_failure?() + } + } + + // MARK: - View layout + var body: some View { Form { if settings.enable_experimental_push_notifications { @@ -80,21 +140,40 @@ struct NotificationSettingsView: View { } } - Section(header: Text("Local Notifications", comment: "Section header for damus local notifications user configuration")) { - Toggle(NSLocalizedString("Zaps", comment: "Setting to enable Zap Local Notification"), isOn: $settings.zap_notification) + Section( + header: Text("Notification Preferences", comment: "Section header for Notification Preferences"), + footer: VStack { + switch notification_preferences_sync_state { + case .undefined, .not_applicable: + EmptyView() + case .success: + HStack { + Image("check-circle.fill") + .foregroundStyle(.damusGreen) + Text("Successfully synced", comment: "Label indicating success in syncing notification preferences") + } + case .syncing: + HStack(spacing: 10) { + ProgressView() + Text("Syncing", comment: "Label indicating success in syncing notification preferences") + } + case .failure(let error): + Text(error) + .foregroundStyle(.damusDangerPrimary) + } + } + ) { + Toggle(NSLocalizedString("Zaps", comment: "Setting to enable Zap Local Notification"), isOn: self.notification_preference_binding($settings.zap_notification)) .toggleStyle(.switch) - Toggle(NSLocalizedString("Mentions", comment: "Setting to enable Mention Local Notification"), isOn: $settings.mention_notification) + Toggle(NSLocalizedString("Mentions", comment: "Setting to enable Mention Local Notification"), isOn: self.notification_preference_binding($settings.mention_notification)) .toggleStyle(.switch) - Toggle(NSLocalizedString("Reposts", comment: "Setting to enable Repost Local Notification"), isOn: $settings.repost_notification) + Toggle(NSLocalizedString("Reposts", comment: "Setting to enable Repost Local Notification"), isOn: self.notification_preference_binding($settings.repost_notification)) .toggleStyle(.switch) - Toggle(NSLocalizedString("Likes", comment: "Setting to enable Like Local Notification"), isOn: $settings.like_notification) + Toggle(NSLocalizedString("Likes", comment: "Setting to enable Like Local Notification"), isOn: self.notification_preference_binding($settings.like_notification)) .toggleStyle(.switch) - Toggle(NSLocalizedString("DMs", comment: "Setting to enable DM Local Notification"), isOn: $settings.dm_notification) + Toggle(NSLocalizedString("DMs", comment: "Setting to enable DM Local Notification"), isOn: self.notification_preference_binding($settings.dm_notification)) .toggleStyle(.switch) - } - - Section(header: Text("Notification Preference", comment: "Section header for Notification Preferences")) { - Toggle(NSLocalizedString("Show only from users you follow", comment: "Setting to Show notifications only associated to users your follow"), isOn: $settings.notification_only_from_following) + Toggle(NSLocalizedString("Show only from users you follow", comment: "Setting to Show notifications only associated to users your follow"), isOn: self.notification_preference_binding($settings.notification_only_from_following)) .toggleStyle(.switch) } @@ -113,6 +192,28 @@ struct NotificationSettingsView: View { .onReceive(handle_notify(.switched_timeline)) { _ in dismiss() } + .onAppear(perform: { + Task { + if self.settings.notifications_mode == .push { + await self.sync_up_remote_notification_settings() + } + } + }) + } +} + +extension NotificationSettingsView { + enum PreferencesSyncState { + /// State is unknown + case undefined + /// State is not applicable (e.g. Notifications are set to local) + case not_applicable + /// Preferences are successfully synced + case success + /// Preferences are being synced + case syncing + /// There was a failure during syncing + case failure(error: String) } } From a9bb2ef98b796d5b3dd5347448b4881403da49ad Mon Sep 17 00:00:00 2001 From: ericholguin Date: Tue, 2 Jul 2024 20:02:20 -0600 Subject: [PATCH 5/8] relay: Add Tor Relay Image This PR just adds the tor icon to relays ending with .onion Changelog-Added: Tor relay icon Closes: #2318 Signed-off-by: ericholguin --- damus/Assets.xcassets/tor.imageset/Contents.json | 12 ++++++++++++ damus/Assets.xcassets/tor.imageset/tor.svg.png | Bin 0 -> 4304 bytes damus/Views/Relays/RelayView.swift | 7 +++++++ 3 files changed, 19 insertions(+) create mode 100644 damus/Assets.xcassets/tor.imageset/Contents.json create mode 100644 damus/Assets.xcassets/tor.imageset/tor.svg.png diff --git a/damus/Assets.xcassets/tor.imageset/Contents.json b/damus/Assets.xcassets/tor.imageset/Contents.json new file mode 100644 index 00000000..62062a1b --- /dev/null +++ b/damus/Assets.xcassets/tor.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "tor.svg.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/damus/Assets.xcassets/tor.imageset/tor.svg.png b/damus/Assets.xcassets/tor.imageset/tor.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..0f4afdb19e1e2d3a18680f08b2ff3f4812accd07 GIT binary patch literal 4304 zcmV;>5HIhEP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/damus/Views/Relays/RelayView.swift b/damus/Views/Relays/RelayView.swift index a50a35b5..428e8b73 100644 --- a/damus/Views/Relays/RelayView.swift +++ b/damus/Views/Relays/RelayView.swift @@ -50,6 +50,13 @@ struct RelayView: View { .padding(.bottom, 2) .lineLimit(1) RelayType(is_paid: state.relay_model_cache.model(with_relay_id: relay)?.metadata.is_paid ?? false) + + if relay.absoluteString.hasSuffix(".onion") { + Image("tor") + .resizable() + .interpolation(.none) + .frame(width: 20, height: 20) + } } Text(relay.absoluteString) .font(.subheadline) From f0b5162205f5b25479e5fb7206c617b3e153595a Mon Sep 17 00:00:00 2001 From: Terry Yiu Date: Sun, 28 Jul 2024 22:48:05 -0400 Subject: [PATCH 6/8] Fix profile view toolbar alignment bug in iOS 18 Changelog-Fixed: Fix profile view toolbar alignment bug in iOS 18 --- damus/Views/Profile/ProfileView.swift | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/damus/Views/Profile/ProfileView.swift b/damus/Views/Profile/ProfileView.swift index 235720e0..a17df5f0 100644 --- a/damus/Views/Profile/ProfileView.swift +++ b/damus/Views/Profile/ProfileView.swift @@ -217,16 +217,6 @@ struct ProfileView: View { } } - var customNavbar: some View { - HStack { - navBackButton - Spacer() - navActionSheetButton - } - .padding(.top, 5) - .accentColor(DamusColors.white) - } - func lnButton(unownedProfile: Profile?, record: ProfileRecord?) -> some View { return ProfileZapLinkView(unownedProfileRecord: record, profileModel: self.profile) { reactions_enabled, lud16, lnurl in Image(reactions_enabled ? "zap.fill" : "zap") @@ -458,8 +448,15 @@ struct ProfileView: View { .navigationTitle("") .navigationBarBackButtonHidden() .toolbar { - ToolbarItem(placement: .principal) { - customNavbar + ToolbarItem(placement: .topBarLeading) { + navBackButton + .padding(.top, 5) + .accentColor(DamusColors.white) + } + ToolbarItem(placement: .topBarTrailing) { + navActionSheetButton + .padding(.top, 5) + .accentColor(DamusColors.white) } } .toolbarBackground(.hidden) From abfe0f642fb35dae754263ba67ad8bc2b6a9a4b5 Mon Sep 17 00:00:00 2001 From: Eric Holguin <14004132+ericholguin@users.noreply.github.com> Date: Mon, 12 Aug 2024 12:54:32 -0600 Subject: [PATCH 7/8] ux: Profile Edit Improvements (#2376) This PR adds improvements to the profile edit view. The banner image is changed from the old ostrich image to the fresh new damoose. The image and banner url text entries have been removed from the edit form and now live under the image selector menu. Selecting the Image URL menu option presents a sheet where a user can update the image URL. There are now safe guards in place for users who update their profile, if they make any changes and try to navigate back to home they will get an alert asking if they want to discard changes. The Save button is also more prominent. Changelog-Changed: Changed the default banner from ostriches to damoose Changelog-Added: Added profile edit safe guards Changelog-Changed: Changed image and banner url text fields to new sheet view Signed-off-by: ericholguin --- .../damoose.imageset/Contents.json | 12 ++ .../damoose.imageset/damoose.jpeg | Bin 0 -> 125196 bytes damus/Views/BannerImageView.swift | 4 +- damus/Views/Profile/EditMetadataView.swift | 136 ++++++++++++++---- damus/Views/Profile/EditPictureControl.swift | 76 +++++++++- 5 files changed, 194 insertions(+), 34 deletions(-) create mode 100644 damus/Assets.xcassets/damoose.imageset/Contents.json create mode 100644 damus/Assets.xcassets/damoose.imageset/damoose.jpeg diff --git a/damus/Assets.xcassets/damoose.imageset/Contents.json b/damus/Assets.xcassets/damoose.imageset/Contents.json new file mode 100644 index 00000000..08bec4c4 --- /dev/null +++ b/damus/Assets.xcassets/damoose.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "damoose.jpeg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/damus/Assets.xcassets/damoose.imageset/damoose.jpeg b/damus/Assets.xcassets/damoose.imageset/damoose.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..86d64a90c36654e611a45d267443aac51b72ae85 GIT binary patch literal 125196 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 literal 0 HcmV?d00001 diff --git a/damus/Views/BannerImageView.swift b/damus/Views/BannerImageView.swift index 10bbac6f..b1afd01a 100644 --- a/damus/Views/BannerImageView.swift +++ b/damus/Views/BannerImageView.swift @@ -13,7 +13,7 @@ struct EditBannerImageView: View { var damus_state: DamusState @ObservedObject var viewModel: ImageUploadingObserver let callback: (URL?) -> Void - let defaultImage = UIImage(named: "profile-banner") ?? UIImage() + let defaultImage = UIImage(named: "damoose") ?? UIImage() @State var banner_image: URL? = nil @@ -38,7 +38,7 @@ struct EditBannerImageView: View { struct InnerBannerImageView: View { let disable_animation: Bool let url: URL? - let defaultImage = UIImage(named: "profile-banner") ?? UIImage() + let defaultImage = UIImage(named: "damoose") ?? UIImage() var body: some View { ZStack { diff --git a/damus/Views/Profile/EditMetadataView.swift b/damus/Views/Profile/EditMetadataView.swift index 99eb473d..dc982175 100644 --- a/damus/Views/Profile/EditMetadataView.swift +++ b/damus/Views/Profile/EditMetadataView.swift @@ -21,13 +21,15 @@ struct EditMetadataView: View { @State var ln: String @State var website: String - @Environment(\.dismiss) var dismiss - @State var confirm_ln_address: Bool = false + @State var confirm_save_alert: Bool = false @StateObject var profileUploadObserver = ImageUploadingObserver() @StateObject var bannerUploadObserver = ImageUploadingObserver() + @Environment(\.dismiss) var dismiss + @Environment(\.presentationMode) var presentationMode + init(damus_state: DamusState) { self.damus_state = damus_state let profile_txn = damus_state.profiles.lookup(id: damus_state.pubkey) @@ -77,7 +79,7 @@ struct EditMetadataView: View { var TopSection: some View { ZStack(alignment: .top) { GeometryReader { geo in - EditBannerImageView(damus_state: damus_state, viewModel: bannerUploadObserver, callback: uploadedBanner(image_url:)) + EditBannerImageView(damus_state: damus_state, viewModel: bannerUploadObserver, callback: uploadedBanner(image_url:), banner_image: URL(string: banner)) .aspectRatio(contentMode: .fill) .frame(width: geo.size.width, height: BANNER_HEIGHT) .clipped() @@ -86,7 +88,7 @@ struct EditMetadataView: View { let pfp_size: CGFloat = 90.0 HStack(alignment: .center) { - EditProfilePictureView(pubkey: damus_state.pubkey, damus_state: damus_state, size: pfp_size, uploadObserver: profileUploadObserver, callback: uploadedProfilePicture(image_url:)) + EditProfilePictureView(profile_url: URL(string: picture), pubkey: damus_state.pubkey, damus_state: damus_state, size: pfp_size, uploadObserver: profileUploadObserver, callback: uploadedProfilePicture(image_url:)) .offset(y: -(pfp_size/2.0)) // Increase if set a frame Spacer() @@ -97,6 +99,28 @@ struct EditMetadataView: View { } } + func navImage(img: String) -> some View { + Image(img) + .frame(width: 33, height: 33) + .background(Color.black.opacity(0.6)) + .clipShape(Circle()) + } + + var navBackButton: some View { + HStack { + Button { + if didChange() { + confirm_save_alert.toggle() + } else { + presentationMode.wrappedValue.dismiss() + } + } label: { + navImage(img: "chevron-left") + } + Spacer() + } + } + var body: some View { VStack(alignment: .leading) { TopSection @@ -116,18 +140,6 @@ struct EditMetadataView: View { } - Section (NSLocalizedString("Profile Picture", comment: "Label for Profile Picture section of user profile form.")) { - TextField(NSLocalizedString("https://example.com/pic.jpg", comment: "Placeholder example text for profile picture URL."), text: $picture) - .autocorrectionDisabled(true) - .textInputAutocapitalization(.never) - } - - Section (NSLocalizedString("Banner Image", comment: "Label for Banner Image section of user profile form.")) { - TextField(NSLocalizedString("https://example.com/pic.jpg", comment: "Placeholder example text for profile picture URL."), text: $banner) - .autocorrectionDisabled(true) - .textInputAutocapitalization(.never) - } - Section(NSLocalizedString("Website", comment: "Label for Website section of user profile form.")) { TextField(NSLocalizedString("https://jb55.com", comment: "Placeholder example text for website URL for user profile."), text: $website) .autocorrectionDisabled(true) @@ -139,10 +151,10 @@ struct EditMetadataView: View { ZStack(alignment: .topLeading) { TextEditor(text: $about) .textInputAutocapitalization(.sentences) - .frame(minHeight: 20, alignment: .leading) + .frame(minHeight: 45, alignment: .leading) .multilineTextAlignment(.leading) Text(about.isEmpty ? placeholder : about) - .padding(.leading, 4) + .padding(4) .opacity(about.isEmpty ? 1 : 0) .foregroundColor(Color(uiColor: .placeholderText)) } @@ -175,25 +187,48 @@ struct EditMetadataView: View { } }) - Button(NSLocalizedString("Save", comment: "Button for saving profile.")) { - if !ln.isEmpty && !is_ln_valid(ln: ln) { - confirm_ln_address = true - } else { - save() - dismiss() - } + + } + + Button(action: { + if !ln.isEmpty && !is_ln_valid(ln: ln) { + confirm_ln_address = true + } else { + save() + dismiss() } - .disabled(profileUploadObserver.isLoading || bannerUploadObserver.isLoading) - .alert(NSLocalizedString("Invalid Tip Address", comment: "Title of alerting as invalid tip address."), isPresented: $confirm_ln_address) { - Button(NSLocalizedString("Ok", comment: "Button to dismiss the alert.")) { - } - } message: { - Text("The address should either begin with LNURL or should look like an email address.", comment: "Giving the description of the alert message.") + }, label: { + Text(NSLocalizedString("Save", comment: "Button for saving profile.")) + .frame(minWidth: 300, maxWidth: .infinity, alignment: .center) + }) + .buttonStyle(GradientButtonStyle(padding: 15)) + .padding(.horizontal, 10) + .padding(.bottom, 10) + .disabled(!didChange()) + .opacity(!didChange() ? 0.5 : 1) + .disabled(profileUploadObserver.isLoading || bannerUploadObserver.isLoading) + .alert(NSLocalizedString("Invalid Tip Address", comment: "Title of alerting as invalid tip address."), isPresented: $confirm_ln_address) { + Button(NSLocalizedString("Ok", comment: "Button to dismiss the alert.")) { } + } message: { + Text("The address should either begin with LNURL or should look like an email address.", comment: "Giving the description of the alert message.") } } .ignoresSafeArea(edges: .top) .background(Color(.systemGroupedBackground)) + .navigationBarBackButtonHidden() + .toolbar { + ToolbarItem(placement: .principal) { + navBackButton + } + } + .alert(NSLocalizedString("Discard changes?", comment: "Alert user that changes have been made."), isPresented: $confirm_save_alert) { + Button(NSLocalizedString("No", comment: "Do not discard changes."), role: .cancel) { + } + Button(NSLocalizedString("Yes", comment: "Agree to discard changes made to profile.")) { + dismiss() + } + } } func uploadedProfilePicture(image_url: URL?) { @@ -203,6 +238,45 @@ struct EditMetadataView: View { func uploadedBanner(image_url: URL?) { banner = image_url?.absoluteString ?? "" } + + func didChange() -> Bool { + let profile_txn = damus_state.profiles.lookup(id: damus_state.pubkey) + let data = profile_txn?.unsafeUnownedValue + + if data?.name ?? "" != name { + return true + } + + if data?.display_name ?? "" != display_name { + return true + } + + if data?.about ?? "" != about { + return true + } + + if data?.website ?? "" != website { + return true + } + + if data?.picture ?? "" != picture { + return true + } + + if data?.banner ?? "" != banner { + return true + } + + if data?.nip05 ?? "" != nip05 { + return true + } + + if data?.lud16 ?? data?.lud06 ?? "" != ln { + return true + } + + return false + } } struct EditMetadataView_Previews: PreviewProvider { diff --git a/damus/Views/Profile/EditPictureControl.swift b/damus/Views/Profile/EditPictureControl.swift index 6df5f2cf..454ced3b 100644 --- a/damus/Views/Profile/EditPictureControl.swift +++ b/damus/Views/Profile/EditPictureControl.swift @@ -18,6 +18,7 @@ struct EditPictureControl: View { var size: CGFloat? = 25 var setup: Bool? = false @Binding var image_url: URL? + @State var image_url_temp: URL? @ObservedObject var uploadObserver: ImageUploadingObserver let callback: (URL?) -> Void @@ -25,12 +26,21 @@ struct EditPictureControl: View { @State private var show_camera = false @State private var show_library = false + @State private var show_url_sheet = false @State var image_upload_confirm: Bool = false @State var preUploadedMedia: PreUploadedMedia? = nil + + @Environment(\.dismiss) var dismiss var body: some View { Menu { + Button(action: { + self.show_url_sheet = true + }) { + Text("Image URL", comment: "Option to enter a url") + } + Button(action: { self.show_library = true }) { @@ -51,7 +61,7 @@ struct EditPictureControl: View { .background(DamusColors.white.opacity(0.7)) .clipShape(Circle()) .shadow(color: DamusColors.purple, radius: 15, x: 0, y: 0) - } else if let url = image_url { + } else if let url = image_url, setup ?? false { KFAnimatedImage(url) .imageContext(.pfp, disable_animation: false) .onFailure(fallbackUrl: URL(string: robohash(pubkey)), cacheKey: url.absoluteString) @@ -115,6 +125,70 @@ struct EditPictureControl: View { Button(NSLocalizedString("Cancel", comment: "Button to cancel the upload."), role: .cancel) {} } } + .sheet(isPresented: $show_url_sheet) { + ZStack { + DamusColors.adaptableWhite.edgesIgnoringSafeArea(.all) + VStack { + Text("Image URL") + .bold() + + Divider() + .padding(.horizontal) + + HStack { + Image(systemName: "doc.on.clipboard") + .foregroundColor(.gray) + .onTapGesture { + if let pastedURL = UIPasteboard.general.string { + image_url_temp = URL(string: pastedURL) + } + } + TextField(image_url_temp?.absoluteString ?? "", text: Binding( + get: { image_url_temp?.absoluteString ?? "" }, + set: { image_url_temp = URL(string: $0) } + )) + } + .padding(12) + .background { + RoundedRectangle(cornerRadius: 12) + .stroke(.gray.opacity(0.5), lineWidth: 1) + .background { + RoundedRectangle(cornerRadius: 12) + .foregroundColor(.damusAdaptableWhite) + } + } + .padding(10) + + Button(action: { + show_url_sheet.toggle() + }, label: { + Text("Cancel", comment: "Cancel button text for dismissing updating image url.") + .frame(minWidth: 300, maxWidth: .infinity, alignment: .center) + .padding(10) + }) + .buttonStyle(NeutralButtonStyle()) + .padding(10) + + Button(action: { + image_url = image_url_temp + callback(image_url) + show_url_sheet.toggle() + }, label: { + Text("Update", comment: "Update button text for updating image url.") + .frame(minWidth: 300, maxWidth: .infinity, alignment: .center) + }) + .buttonStyle(GradientButtonStyle(padding: 10)) + .padding(.horizontal, 10) + .disabled(image_url_temp == image_url) + .opacity(image_url_temp == image_url ? 0.5 : 1) + } + } + .onAppear { + image_url_temp = image_url + } + .presentationDetents([.height(300)]) + .presentationDragIndicator(.visible) + } } private func handle_upload(media: MediaUpload) { From 2b140d42795d80c53d3b23e95a0383548ff93e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Fri, 23 Aug 2024 16:43:54 -0700 Subject: [PATCH 8/8] Fix push notification DM decryption MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit fixes an issue where DM contents would not be displayed on a push notification, by giving the notification extension access to the keychain group which contains the user's private key Testing -------- PASS Device: iPhone 13 mini iOS: 17.6.1 Damus: This commit Setup: - Make sure that device is setup with push notifications - DM notifications enabled - Device registered with push notification server Steps: 1. Send a DM push notification to yourself 2. Ensure DM contents can be decrypted on the push notification body Signed-off-by: Daniel D’Aquino Closes: https://github.com/damus-io/damus/issues/2388 --- .../DamusNotificationService.entitlements | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DamusNotificationService/DamusNotificationService.entitlements b/DamusNotificationService/DamusNotificationService.entitlements index b5d14b53..d4753959 100644 --- a/DamusNotificationService/DamusNotificationService.entitlements +++ b/DamusNotificationService/DamusNotificationService.entitlements @@ -10,5 +10,9 @@ com.apple.security.network.client + keychain-access-groups + + $(AppIdentifierPrefix)com.jb55.damus2 +