damus

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

commit 5f9477d55bb235625ff28a1e06f35d57ccdfd005
parent 1421c34aeb2aca94f1a6e3f0ebdb7047f18b00ce
Author: Daniel D’Aquino <daniel@daquino.me>
Date:   Tue, 30 Jan 2024 07:42:18 +0000

purple: notify main DamusPurpleView when user gets a subsscription

Previously, if the user had the DamusPurpleView open and bought the
subscription, the DamusPurpleView would not change. It would stay in the
marketing pitch screen.

This commit makes sure that this view is automatically updated as soon
as the user sees the welcome screen, so that they can see their account
info in case they have DamusPurpleView open.

Testing
--------

PASS

iOS: 17.2
Damus: This commit
damus-api: Varying versions around `9a6af62`
Coverage:
1. Checked the entire LN flow through the local test environment using the simulator
2. Checked all LN flow views on both light and dark mode to ensure it looks good
3. Checked the entire LN flow using the staging environment using a physical iOS device

Closes: https://github.com/damus-io/damus/issues/1899
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mdamus.xcodeproj/project.pbxproj | 4++++
Adamus/Notify/PurpleAccountUpdateNotify.swift | 25+++++++++++++++++++++++++
Mdamus/Views/Purple/DamusPurpleNewUserOnboardingView.swift | 7+++++++
Mdamus/Views/Purple/DamusPurpleView.swift | 14+++-----------
4 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj @@ -450,6 +450,7 @@ D7315A2C2ACDF4DA0036E30A /* DamusCacheManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */; }; D7373BA62B688EA300F7783D /* DamusPurpleTranslationSetupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */; }; D7373BA82B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */; }; + D7373BAA2B68A65A00F7783D /* PurpleAccountUpdateNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */; }; D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */; }; D74AAFC32B153395006CF0F4 /* HeadlessDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */; }; D74AAFC52B1538DF006CF0F4 /* NotificationExtensionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */; }; @@ -1346,6 +1347,7 @@ D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusCacheManagerTests.swift; sourceTree = "<group>"; }; D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleTranslationSetupView.swift; sourceTree = "<group>"; }; D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleNewUserOnboardingView.swift; sourceTree = "<group>"; }; + D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleAccountUpdateNotify.swift; sourceTree = "<group>"; }; D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadlessDamusState.swift; sourceTree = "<group>"; }; D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtensionState.swift; sourceTree = "<group>"; }; D74AAFCB2B155D07006CF0F4 /* MakeZapRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeZapRequest.swift; sourceTree = "<group>"; }; @@ -2209,6 +2211,7 @@ 4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */, 4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */, B57B4C612B312BD700A232C0 /* ReconnectRelaysNotify.swift */, + D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */, ); path = Notify; sourceTree = "<group>"; @@ -3238,6 +3241,7 @@ F71694EA2A662232001F4053 /* OnboardingSuggestionsView.swift in Sources */, 4C12536A2A76D3850004F4B8 /* RelaysChangedNotify.swift in Sources */, 4C30AC8029A6A53F00E2BD5A /* ProfilePicturesView.swift in Sources */, + D7373BAA2B68A65A00F7783D /* PurpleAccountUpdateNotify.swift in Sources */, 5C6E1DAD2A193EC2008FC15A /* GradientButtonStyle.swift in Sources */, 3CCD1E6A2A874C4E0099A953 /* Nip98HTTPAuth.swift in Sources */, 4C8EC52529D1FA6C0085D9A8 /* DamusColors.swift in Sources */, diff --git a/damus/Notify/PurpleAccountUpdateNotify.swift b/damus/Notify/PurpleAccountUpdateNotify.swift @@ -0,0 +1,25 @@ +// +// PurpleAccountUpdateNotify.swift +// damus +// +// Created by Daniel D’Aquino on 2024-01-29. +// + +import Foundation + +struct PurpleAccountUpdateNotify: Notify { + typealias Payload = DamusPurple.Account + var payload: DamusPurple.Account +} + +extension NotifyHandler { + static var purple_account_update: NotifyHandler<PurpleAccountUpdateNotify> { + .init() + } +} + +extension Notifications { + static func purple_account_update(_ result: DamusPurple.Account) -> Notifications<PurpleAccountUpdateNotify> { + .init(.init(payload: result)) + } +} diff --git a/damus/Views/Purple/DamusPurpleNewUserOnboardingView.swift b/damus/Views/Purple/DamusPurpleNewUserOnboardingView.swift @@ -31,6 +31,13 @@ struct DamusPurpleNewUserOnboardingView: View { } .ignoresSafeArea() // Necessary to avoid weird white edges } + .task { + guard let account = try? await damus_state.purple.get_account(pubkey: damus_state.pubkey), account.active else { + return + } + // Let's notify other views across SwiftUI to update our user's Purple status. + notify(.purple_account_update(account)) + } } } diff --git a/damus/Views/Purple/DamusPurpleView.swift b/damus/Views/Purple/DamusPurpleView.swift @@ -58,7 +58,6 @@ struct DamusPurpleView: View { @State var selection: DamusPurpleType = .yearly @State var show_welcome_sheet: Bool = false @State var show_manage_subscriptions = false - @State var show_settings_change_confirmation_dialog = false @State private var shouldDismissView = false @Environment(\.dismiss) var dismiss @@ -101,6 +100,9 @@ struct DamusPurpleView: View { .onDisappear { notify(.display_tabbar(true)) } + .onReceive(handle_notify(.purple_account_update), perform: { account in + self.my_account_info_state = .loaded(account: account) + }) .task { await load_products() } @@ -110,16 +112,6 @@ struct DamusPurpleView: View { }, content: { DamusPurpleNewUserOnboardingView(damus_state: damus_state) }) - .onChange(of: shouldDismissView) { shouldDismissView in - if shouldDismissView && !show_settings_change_confirmation_dialog { - dismiss() - } - } - .onChange(of: show_settings_change_confirmation_dialog) { show_settings_change_confirmation_dialog in - if shouldDismissView && !show_settings_change_confirmation_dialog { - dismiss() - } - } .manageSubscriptionsSheet(isPresented: $show_manage_subscriptions) }