Add OnlyZaps Mode
Changelog-Added: Add OnlyZaps mode: disable reactions, only zaps!
This commit is contained in:
@@ -143,7 +143,6 @@
|
|||||||
4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; };
|
4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; };
|
||||||
4C8D00D429E3C5D40036AF10 /* NIP19Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */; };
|
4C8D00D429E3C5D40036AF10 /* NIP19Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */; };
|
||||||
4C8EC52529D1FA6C0085D9A8 /* DamusColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */; };
|
4C8EC52529D1FA6C0085D9A8 /* DamusColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */; };
|
||||||
4C90BD162839DB54008EE7EF /* NostrMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD152839DB54008EE7EF /* NostrMetadata.swift */; };
|
|
||||||
4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD17283A9EE5008EE7EF /* LoginView.swift */; };
|
4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD17283A9EE5008EE7EF /* LoginView.swift */; };
|
||||||
4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD19283AA67F008EE7EF /* Bech32.swift */; };
|
4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD19283AA67F008EE7EF /* Bech32.swift */; };
|
||||||
4C90BD1C283AC38E008EE7EF /* Bech32Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */; };
|
4C90BD1C283AC38E008EE7EF /* Bech32Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */; };
|
||||||
@@ -550,7 +549,6 @@
|
|||||||
4C8D00D229E3C19F0036AF10 /* str_block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_block.h; sourceTree = "<group>"; };
|
4C8D00D229E3C19F0036AF10 /* str_block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_block.h; sourceTree = "<group>"; };
|
||||||
4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP19Tests.swift; sourceTree = "<group>"; };
|
4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP19Tests.swift; sourceTree = "<group>"; };
|
||||||
4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusColors.swift; sourceTree = "<group>"; };
|
4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusColors.swift; sourceTree = "<group>"; };
|
||||||
4C90BD152839DB54008EE7EF /* NostrMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrMetadata.swift; sourceTree = "<group>"; };
|
|
||||||
4C90BD17283A9EE5008EE7EF /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
|
4C90BD17283A9EE5008EE7EF /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
|
||||||
4C90BD19283AA67F008EE7EF /* Bech32.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32.swift; sourceTree = "<group>"; };
|
4C90BD19283AA67F008EE7EF /* Bech32.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32.swift; sourceTree = "<group>"; };
|
||||||
4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Tests.swift; sourceTree = "<group>"; };
|
4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Tests.swift; sourceTree = "<group>"; };
|
||||||
@@ -906,7 +904,6 @@
|
|||||||
4C64987B286D03E000EAE2B3 /* DirectMessagesView.swift */,
|
4C64987B286D03E000EAE2B3 /* DirectMessagesView.swift */,
|
||||||
4C216F31286E388800040376 /* DMChatView.swift */,
|
4C216F31286E388800040376 /* DMChatView.swift */,
|
||||||
4C216F33286F5ACD00040376 /* DMView.swift */,
|
4C216F33286F5ACD00040376 /* DMView.swift */,
|
||||||
E990020E2955F837003BBC5A /* EditMetadataView.swift */,
|
|
||||||
3169CAE4294E699400EE4006 /* Empty Views */,
|
3169CAE4294E699400EE4006 /* Empty Views */,
|
||||||
4C75EFB82804A2740006080F /* EventView.swift */,
|
4C75EFB82804A2740006080F /* EventView.swift */,
|
||||||
4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */,
|
4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */,
|
||||||
@@ -961,7 +958,6 @@
|
|||||||
4CACA9DB280C38C000D9BBE8 /* Profiles.swift */,
|
4CACA9DB280C38C000D9BBE8 /* Profiles.swift */,
|
||||||
4C3BEFD32819DE8F00B3DE84 /* NostrKind.swift */,
|
4C3BEFD32819DE8F00B3DE84 /* NostrKind.swift */,
|
||||||
4C363A8F28247A1D006E126D /* NostrLink.swift */,
|
4C363A8F28247A1D006E126D /* NostrLink.swift */,
|
||||||
4C90BD152839DB54008EE7EF /* NostrMetadata.swift */,
|
|
||||||
);
|
);
|
||||||
path = Nostr;
|
path = Nostr;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1051,6 +1047,7 @@
|
|||||||
4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */,
|
4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */,
|
||||||
4C285C892838B985008A31F1 /* ProfilePictureSelector.swift */,
|
4C285C892838B985008A31F1 /* ProfilePictureSelector.swift */,
|
||||||
F79C7FAC29D5E9620000F946 /* EditProfilePictureControl.swift */,
|
F79C7FAC29D5E9620000F946 /* EditProfilePictureControl.swift */,
|
||||||
|
E990020E2955F837003BBC5A /* EditMetadataView.swift */,
|
||||||
4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */,
|
4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */,
|
||||||
4C8682862814DE470026224F /* ProfileView.swift */,
|
4C8682862814DE470026224F /* ProfileView.swift */,
|
||||||
4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */,
|
4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */,
|
||||||
@@ -1593,7 +1590,6 @@
|
|||||||
4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */,
|
4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */,
|
||||||
4C3EA64928FF597700C48A62 /* bech32.c in Sources */,
|
4C3EA64928FF597700C48A62 /* bech32.c in Sources */,
|
||||||
4CE879522996B68900F758CC /* RelayType.swift in Sources */,
|
4CE879522996B68900F758CC /* RelayType.swift in Sources */,
|
||||||
4C90BD162839DB54008EE7EF /* NostrMetadata.swift in Sources */,
|
|
||||||
4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */,
|
4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */,
|
||||||
4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */,
|
4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */,
|
||||||
4C3EA67528FF7A5A00C48A62 /* take.c in Sources */,
|
4C3EA67528FF7A5A00C48A62 /* take.c in Sources */,
|
||||||
|
|||||||
@@ -498,8 +498,25 @@ struct ContentView: View {
|
|||||||
open_event(ev: target)
|
open_event(ev: target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onReceive(handle_notify(.hide_reactions)) { notif in
|
.onReceive(handle_notify(.onlyzaps_mode)) { notif in
|
||||||
|
let hide = notif.object as! Bool
|
||||||
home.filter_events()
|
home.filter_events()
|
||||||
|
|
||||||
|
guard let damus_state else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let profile = damus_state.profiles.lookup(id: damus_state.pubkey) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
profile.reactions = !hide
|
||||||
|
|
||||||
|
guard let profile_ev = make_metadata_event(keypair: damus_state.keypair, metadata: profile) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
damus_state.postbox.send(profile_ev)
|
||||||
}
|
}
|
||||||
.alert(NSLocalizedString("Deleted Account", comment: "Alert message to indicate this is a deleted account"), isPresented: $is_deleted_account) {
|
.alert(NSLocalizedString("Deleted Account", comment: "Alert message to indicate this is a deleted account"), isPresented: $is_deleted_account) {
|
||||||
Button(NSLocalizedString("Logout", comment: "Button to close the alert that informs that the current account has been deleted.")) {
|
Button(NSLocalizedString("Logout", comment: "Button to close the alert that informs that the current account has been deleted.")) {
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ class HomeModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
notifications.filter { ev in
|
notifications.filter { ev in
|
||||||
if damus_state.settings.hide_reactions && ev.known_kind == NostrKind.like {
|
if damus_state.settings.onlyzaps_mode && ev.known_kind == NostrKind.like {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,7 +261,7 @@ class HomeModel: ObservableObject {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if damus_state.settings.hide_reactions {
|
if damus_state.settings.onlyzaps_mode {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,7 +389,7 @@ class HomeModel: ObservableObject {
|
|||||||
NostrKind.text.rawValue,
|
NostrKind.text.rawValue,
|
||||||
NostrKind.boost.rawValue
|
NostrKind.boost.rawValue
|
||||||
]
|
]
|
||||||
if !damus_state.settings.hide_reactions {
|
if !damus_state.settings.onlyzaps_mode {
|
||||||
home_filter_kinds.append(NostrKind.like.rawValue)
|
home_filter_kinds.append(NostrKind.like.rawValue)
|
||||||
}
|
}
|
||||||
var home_filter = NostrFilter.filter_kinds(home_filter_kinds)
|
var home_filter = NostrFilter.filter_kinds(home_filter_kinds)
|
||||||
@@ -402,7 +402,7 @@ class HomeModel: ObservableObject {
|
|||||||
NostrKind.boost.rawValue,
|
NostrKind.boost.rawValue,
|
||||||
NostrKind.zap.rawValue,
|
NostrKind.zap.rawValue,
|
||||||
]
|
]
|
||||||
if !damus_state.settings.hide_reactions {
|
if !damus_state.settings.onlyzaps_mode {
|
||||||
notifications_filter_kinds.append(NostrKind.like.rawValue)
|
notifications_filter_kinds.append(NostrKind.like.rawValue)
|
||||||
}
|
}
|
||||||
var notifications_filter = NostrFilter.filter_kinds(notifications_filter_kinds)
|
var notifications_filter = NostrFilter.filter_kinds(notifications_filter_kinds)
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class ThreadModel: ObservableObject {
|
|||||||
meta_events.referenced_ids = [event.id]
|
meta_events.referenced_ids = [event.id]
|
||||||
|
|
||||||
var kinds = [NostrKind.zap.rawValue, NostrKind.text.rawValue, NostrKind.boost.rawValue]
|
var kinds = [NostrKind.zap.rawValue, NostrKind.text.rawValue, NostrKind.boost.rawValue]
|
||||||
if !damus_state.settings.hide_reactions {
|
if !damus_state.settings.onlyzaps_mode {
|
||||||
kinds.append(NostrKind.like.rawValue)
|
kinds.append(NostrKind.like.rawValue)
|
||||||
}
|
}
|
||||||
meta_events.kinds = kinds
|
meta_events.kinds = kinds
|
||||||
|
|||||||
@@ -202,9 +202,9 @@ class UserSettingsStore: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Published var hide_reactions: Bool {
|
@Published var onlyzaps_mode: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
UserDefaults.standard.set(hide_reactions, forKey: "hide_reactions")
|
UserDefaults.standard.set(onlyzaps_mode, forKey: "onlyzaps_mode")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,7 +302,7 @@ class UserSettingsStore: ObservableObject {
|
|||||||
disable_animation = should_disable_image_animation()
|
disable_animation = should_disable_image_animation()
|
||||||
auto_translate = UserDefaults.standard.object(forKey: "auto_translate") as? Bool ?? true
|
auto_translate = UserDefaults.standard.object(forKey: "auto_translate") as? Bool ?? true
|
||||||
show_only_preferred_languages = UserDefaults.standard.object(forKey: "show_only_preferred_languages") as? Bool ?? false
|
show_only_preferred_languages = UserDefaults.standard.object(forKey: "show_only_preferred_languages") as? Bool ?? false
|
||||||
hide_reactions = UserDefaults.standard.object(forKey: "hide_reactions") as? Bool ?? false
|
onlyzaps_mode = UserDefaults.standard.object(forKey: "hide_reactions") as? Bool ?? false
|
||||||
|
|
||||||
// Note from @tyiu:
|
// Note from @tyiu:
|
||||||
// Default translation service is disabled by default for now until we gain some confidence that it is working well in production.
|
// Default translation service is disabled by default for now until we gain some confidence that it is working well in production.
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ class Profile: Codable {
|
|||||||
set_val(key, val)
|
set_val(key, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var reactions: Bool? {
|
||||||
|
get { return get_val("reactions"); }
|
||||||
|
set(s) { set_val("reactions", s) }
|
||||||
|
}
|
||||||
|
|
||||||
var deleted: Bool? {
|
var deleted: Bool? {
|
||||||
get { return get_val("deleted"); }
|
get { return get_val("deleted"); }
|
||||||
set(s) { set_val("deleted", s) }
|
set(s) { set_val("deleted", s) }
|
||||||
|
|||||||
@@ -560,7 +560,7 @@ func make_first_contact_event(keypair: Keypair) -> NostrEvent? {
|
|||||||
return ev
|
return ev
|
||||||
}
|
}
|
||||||
|
|
||||||
func make_metadata_event(keypair: Keypair, metadata: NostrMetadata) -> NostrEvent? {
|
func make_metadata_event(keypair: Keypair, metadata: Profile) -> NostrEvent? {
|
||||||
guard let privkey = keypair.privkey else {
|
guard let privkey = keypair.privkey else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
//
|
|
||||||
// NostrMetadata.swift
|
|
||||||
// damus
|
|
||||||
//
|
|
||||||
// Created by William Casarin on 2022-05-21.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
|
|
||||||
struct NostrMetadata: Codable {
|
|
||||||
let display_name: String?
|
|
||||||
let name: String?
|
|
||||||
let about: String?
|
|
||||||
let website: String?
|
|
||||||
let nip05: String?
|
|
||||||
let picture: String?
|
|
||||||
let banner: String?
|
|
||||||
let lud06: String?
|
|
||||||
let lud16: String?
|
|
||||||
}
|
|
||||||
|
|
||||||
func create_account_to_metadata(_ model: CreateAccountModel) -> NostrMetadata {
|
|
||||||
return NostrMetadata(display_name: model.real_name, name: model.nick_name, about: model.about, website: nil, nip05: nil, picture: model.profile_image, banner: nil, lud06: nil, lud16: nil)
|
|
||||||
}
|
|
||||||
@@ -113,7 +113,7 @@ extension Notification.Name {
|
|||||||
static var local_notification: Notification.Name {
|
static var local_notification: Notification.Name {
|
||||||
return Notification.Name("local_notification")
|
return Notification.Name("local_notification")
|
||||||
}
|
}
|
||||||
static var hide_reactions: Notification.Name {
|
static var onlyzaps_mode: Notification.Name {
|
||||||
return Notification.Name("hide_reactions")
|
return Notification.Name("hide_reactions")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,18 @@ struct EventActionBar: View {
|
|||||||
test_lnurl ?? damus_state.profiles.lookup(id: event.pubkey)?.lnurl
|
test_lnurl ?? damus_state.profiles.lookup(id: event.pubkey)?.lnurl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var show_like: Bool {
|
||||||
|
if settings.onlyzaps_mode {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let profile = damus_state.profiles.lookup(id: event.pubkey) else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return profile.reactions ?? true
|
||||||
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
HStack {
|
HStack {
|
||||||
if damus_state.keypair.privkey != nil {
|
if damus_state.keypair.privkey != nil {
|
||||||
@@ -75,7 +87,7 @@ struct EventActionBar: View {
|
|||||||
.foregroundColor(bar.boosted ? Color.green : Color.gray)
|
.foregroundColor(bar.boosted ? Color.green : Color.gray)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !settings.hide_reactions {
|
if show_like {
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
HStack(spacing: 4) {
|
HStack(spacing: 4) {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ struct EventDetailBar: View {
|
|||||||
.buttonStyle(PlainButtonStyle())
|
.buttonStyle(PlainButtonStyle())
|
||||||
}
|
}
|
||||||
|
|
||||||
if bar.likes > 0 && !state.settings.hide_reactions {
|
if bar.likes > 0 && !state.settings.onlyzaps_mode {
|
||||||
NavigationLink(destination: ReactionsView(damus_state: state, model: ReactionsModel(state: state, target: target))) {
|
NavigationLink(destination: ReactionsView(damus_state: state, model: ReactionsModel(state: state, target: target))) {
|
||||||
let noun = Text(verbatim: "\(reactionsCountString(bar.likes))").foregroundColor(.gray)
|
let noun = Text(verbatim: "\(reactionsCountString(bar.likes))").foregroundColor(.gray)
|
||||||
Text("\(Text("\(bar.likes)").font(.body.bold())) \(noun)", comment: "Sentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'.")
|
Text("\(Text("\(bar.likes)").font(.body.bold())) \(noun)", comment: "Sentence composed of 2 variables to describe how many reactions there are on a post. In source English, the first variable is the number of reactions, and the second variable is 'Reaction' or 'Reactions'.")
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ struct EditMetadataView: View {
|
|||||||
@State var name: String
|
@State var name: String
|
||||||
@State var ln: String
|
@State var ln: String
|
||||||
@State var website: String
|
@State var website: String
|
||||||
|
let profile: Profile?
|
||||||
|
|
||||||
@Environment(\.dismiss) var dismiss
|
@Environment(\.dismiss) var dismiss
|
||||||
@Environment(\.colorScheme) var colorScheme
|
@Environment(\.colorScheme) var colorScheme
|
||||||
@@ -73,6 +74,7 @@ struct EditMetadataView: View {
|
|||||||
init (damus_state: DamusState) {
|
init (damus_state: DamusState) {
|
||||||
self.damus_state = damus_state
|
self.damus_state = damus_state
|
||||||
let data = damus_state.profiles.lookup(id: damus_state.pubkey)
|
let data = damus_state.profiles.lookup(id: damus_state.pubkey)
|
||||||
|
self.profile = data
|
||||||
|
|
||||||
_name = State(initialValue: data?.name ?? "")
|
_name = State(initialValue: data?.name ?? "")
|
||||||
_display_name = State(initialValue: data?.display_name ?? "")
|
_display_name = State(initialValue: data?.display_name ?? "")
|
||||||
@@ -88,24 +90,28 @@ struct EditMetadataView: View {
|
|||||||
colorScheme == .light ? DamusColors.white : DamusColors.black
|
colorScheme == .light ? DamusColors.white : DamusColors.black
|
||||||
}
|
}
|
||||||
|
|
||||||
func save() {
|
func to_profile() -> Profile {
|
||||||
let metadata = NostrMetadata(
|
let profile = self.profile ?? Profile()
|
||||||
display_name: display_name,
|
|
||||||
name: name,
|
|
||||||
about: about,
|
|
||||||
website: website,
|
|
||||||
nip05: nip05.isEmpty ? nil : nip05,
|
|
||||||
picture: picture.isEmpty ? nil : picture,
|
|
||||||
banner: banner.isEmpty ? nil : banner,
|
|
||||||
lud06: ln.contains("@") ? nil : ln,
|
|
||||||
lud16: ln.contains("@") ? ln : nil
|
|
||||||
);
|
|
||||||
|
|
||||||
let m_metadata_ev = make_metadata_event(keypair: damus_state.keypair, metadata: metadata)
|
profile.name = name
|
||||||
|
profile.display_name = display_name
|
||||||
|
profile.about = about
|
||||||
|
profile.website = website
|
||||||
|
profile.nip05 = nip05.isEmpty ? nil : nip05
|
||||||
|
profile.picture = picture.isEmpty ? nil : picture
|
||||||
|
profile.banner = banner.isEmpty ? nil : banner
|
||||||
|
profile.lud06 = ln.contains("@") ? nil : ln
|
||||||
|
profile.lud16 = ln.contains("@") ? ln : nil
|
||||||
|
|
||||||
if let metadata_ev = m_metadata_ev {
|
return profile
|
||||||
damus_state.postbox.send(metadata_ev)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func save() {
|
||||||
|
let profile = to_profile()
|
||||||
|
guard let metadata_ev = make_metadata_event(keypair: damus_state.keypair, metadata: profile) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
damus_state.postbox.send(metadata_ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
func is_ln_valid(ln: String) -> Bool {
|
func is_ln_valid(ln: String) -> Bool {
|
||||||
@@ -245,22 +245,35 @@ struct ProfileView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func lnButton(lnurl: String, profile: Profile) -> some View {
|
func lnButton(lnurl: String, profile: Profile) -> some View {
|
||||||
Button(action: {
|
let button_img = profile.reactions == false ? "bolt.brakesignal" : "bolt.circle"
|
||||||
|
return Button(action: {
|
||||||
if damus_state.settings.show_wallet_selector {
|
if damus_state.settings.show_wallet_selector {
|
||||||
showing_select_wallet = true
|
showing_select_wallet = true
|
||||||
} else {
|
} else {
|
||||||
open_with_wallet(wallet: damus_state.settings.default_wallet.model, invoice: lnurl)
|
open_with_wallet(wallet: damus_state.settings.default_wallet.model, invoice: lnurl)
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
Image(systemName: "bolt.circle")
|
Image(systemName: button_img)
|
||||||
.profile_button_style(scheme: colorScheme)
|
.profile_button_style(scheme: colorScheme)
|
||||||
.contextMenu {
|
.contextMenu {
|
||||||
|
if profile.reactions == false {
|
||||||
|
Text("OnlyZaps Enabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
if let addr = profile.lud16 {
|
||||||
|
Button {
|
||||||
|
UIPasteboard.general.string = addr
|
||||||
|
} label: {
|
||||||
|
Label(addr, systemImage: "doc.on.doc")
|
||||||
|
}
|
||||||
|
} else if let lnurl = profile.lud06 {
|
||||||
Button {
|
Button {
|
||||||
UIPasteboard.general.string = profile.lnurl ?? ""
|
UIPasteboard.general.string = profile.lnurl ?? ""
|
||||||
} label: {
|
} label: {
|
||||||
Label(NSLocalizedString("Copy LNURL", comment: "Context menu option for copying a user's Lightning URL."), systemImage: "doc.on.doc")
|
Label(NSLocalizedString("Copy LNURL", comment: "Context menu option for copying a user's Lightning URL."), systemImage: "doc.on.doc")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.cornerRadius(24)
|
.cornerRadius(24)
|
||||||
|
|||||||
@@ -217,3 +217,7 @@ struct SaveKeysView_Previews: PreviewProvider {
|
|||||||
SaveKeysView(account: model)
|
SaveKeysView(account: model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func create_account_to_metadata(_ model: CreateAccountModel) -> Profile {
|
||||||
|
return Profile(name: model.nick_name, display_name: model.real_name, about: model.about, picture: model.profile_image, banner: nil, website: nil, lud06: nil, lud16: nil, nip05: nil)
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,14 +14,6 @@ struct AppearanceSettingsView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Form {
|
Form {
|
||||||
Section(header: Text(NSLocalizedString("Reactions", comment: "Section header for reaction settings"))) {
|
|
||||||
Toggle(NSLocalizedString("Hide Reactions", comment: "Setting to hide reactions."), isOn: $settings.hide_reactions)
|
|
||||||
.toggleStyle(.switch)
|
|
||||||
.onChange(of: settings.hide_reactions) { newVal in
|
|
||||||
notify(.hide_reactions, newVal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Section(header: Text(NSLocalizedString("Text Truncation", comment: "Section header for damus text truncation user configuration"))) {
|
Section(header: Text(NSLocalizedString("Text Truncation", comment: "Section header for damus text truncation user configuration"))) {
|
||||||
Toggle(NSLocalizedString("Truncate timeline text", comment: "Setting to truncate text in timeline"), isOn: $settings.truncate_timeline_text)
|
Toggle(NSLocalizedString("Truncate timeline text", comment: "Setting to truncate text in timeline"), isOn: $settings.truncate_timeline_text)
|
||||||
.toggleStyle(.switch)
|
.toggleStyle(.switch)
|
||||||
|
|||||||
@@ -24,6 +24,18 @@ struct ZapSettingsView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Form {
|
Form {
|
||||||
|
Section(
|
||||||
|
header: Text(NSLocalizedString("OnlyZaps", comment: "Section header for enabling OnlyZaps mode (hide reactions)")),
|
||||||
|
footer: Text(NSLocalizedString("Hide all 🤙's. Others will not be able to send you 🤙's", comment: "Section footer describing onlyzaps mode"))
|
||||||
|
|
||||||
|
) {
|
||||||
|
Toggle(NSLocalizedString("Enable OnlyZaps mode", comment: "Setting toggle to hide reactions."), isOn: $settings.onlyzaps_mode)
|
||||||
|
.toggleStyle(.switch)
|
||||||
|
.onChange(of: settings.onlyzaps_mode) { newVal in
|
||||||
|
notify(.onlyzaps_mode, newVal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Section(NSLocalizedString("Wallet", comment: "Title for section in zap settings that controls the Lightning wallet selection.")) {
|
Section(NSLocalizedString("Wallet", comment: "Title for section in zap settings that controls the Lightning wallet selection.")) {
|
||||||
|
|
||||||
Toggle(NSLocalizedString("Show wallet selector", comment: "Toggle to show or hide selection of wallet."), isOn: $settings.show_wallet_selector).toggleStyle(.switch)
|
Toggle(NSLocalizedString("Show wallet selector", comment: "Toggle to show or hide selection of wallet."), isOn: $settings.show_wallet_selector).toggleStyle(.switch)
|
||||||
|
|||||||
Reference in New Issue
Block a user