commit e1c4f59e9a37cf07012bd712739a286e675bc117
parent dbf8c932ae886946146c396cb5beee8473fe41ce
Author: William Casarin <jb55@jb55.com>
Date: Wed, 25 May 2022 06:34:30 -0700
misc tweaks
Signed-off-by: William Casarin <jb55@jb55.com>
Diffstat:
8 files changed, 110 insertions(+), 43 deletions(-)
diff --git a/damus/Models/HomeModel.swift b/damus/Models/HomeModel.swift
@@ -197,11 +197,8 @@ class HomeModel: ObservableObject {
var friends = damus_state.contacts.get_friend_list()
friends.append(damus_state.pubkey)
- var contacts_filter = NostrFilter.filter_kinds([0,3])
- var friendosphere = damus_state.contacts.get_friendosphere()
- friendosphere.append(damus_state.pubkey)
-
- contacts_filter.authors = friendosphere
+ var contacts_filter = NostrFilter.filter_kinds([0])
+ contacts_filter.authors = friends
// TODO: separate likes?
var home_filter = NostrFilter.filter_kinds([
@@ -211,7 +208,7 @@ class HomeModel: ObservableObject {
])
// include our pubkey as well even if we're not technically a friend
home_filter.authors = friends
- home_filter.limit = 1000
+ home_filter.limit = 500
var notifications_filter = NostrFilter.filter_kinds([
NostrKind.text.rawValue,
@@ -219,7 +216,7 @@ class HomeModel: ObservableObject {
NostrKind.boost.rawValue,
])
notifications_filter.pubkeys = [damus_state.pubkey]
- notifications_filter.limit = 1000
+ notifications_filter.limit = 100
var home_filters = [home_filter]
var notifications_filters = [notifications_filter]
diff --git a/damus/Nostr/Nostr.swift b/damus/Nostr/Nostr.swift
@@ -10,6 +10,7 @@ import Foundation
struct Profile: Decodable {
let name: String?
+ let display_name: String?
let about: String?
let picture: String?
diff --git a/damus/Views/ChatView.swift b/damus/Views/ChatView.swift
@@ -126,7 +126,7 @@ struct ChatView: View {
.padding(6)
}
.padding([.leading], 2)
- .background(Color.secondary.opacity(0.1))
+ .background(colorScheme == .light ? Color.secondary.opacity(0.1) : Color.secondary.opacity(0.25))
.cornerRadius(8.0)
//.border(Color.red)
diff --git a/damus/Views/EventActionBar.swift b/damus/Views/EventActionBar.swift
@@ -38,7 +38,6 @@ struct EventActionBar: View {
EventActionButton(img: "bubble.left", col: nil) {
notify(.reply, event)
}
- .padding([.trailing], 20)
}
HStack(alignment: .bottom) {
@@ -54,7 +53,6 @@ struct EventActionBar: View {
}
}
}
- .padding([.trailing], 20)
HStack(alignment: .bottom) {
Text("\(bar.boosts > 0 ? "\(bar.boosts)" : "")")
@@ -69,7 +67,6 @@ struct EventActionBar: View {
}
}
}
- .padding([.trailing], 20)
HStack(alignment: .bottom) {
Text("\(bar.tips > 0 ? "\(bar.tips)" : "")")
@@ -78,13 +75,12 @@ struct EventActionBar: View {
EventActionButton(img: bar.tipped ? "bitcoinsign.circle.fill" : "bitcoinsign.circle", col: bar.tipped ? Color.orange : nil) {
if bar.tipped {
- notify(.delete, bar.our_tip)
+ //notify(.delete, bar.our_tip)
} else {
- notify(.boost, event)
+ //notify(.boost, event)
}
}
}
-
}
.onReceive(handle_notify(.liked)) { n in
let liked = n.object as! Counted
@@ -104,6 +100,7 @@ func EventActionButton(img: String, col: Color?, action: @escaping () -> ()) ->
Button(action: action) {
Label("", systemImage: img)
.font(.footnote)
+ .frame(maxWidth: .infinity)
.foregroundColor(col == nil ? Color.gray : col!)
}
}
diff --git a/damus/Views/EventView.swift b/damus/Views/EventView.swift
@@ -78,12 +78,11 @@ struct EventView: View {
Spacer()
}
- VStack {
- HStack {
+ VStack(alignment: .leading) {
+ HStack(alignment: .center) {
ProfileName(pubkey: event.pubkey, profile: profile)
Text("\(format_relative_time(event.created_at))")
.foregroundColor(.gray)
- Spacer()
}
if event.is_reply {
@@ -97,8 +96,6 @@ struct EventView: View {
.frame(maxWidth: .infinity, alignment: .leading)
.textSelection(.enabled)
- Spacer()
-
if has_action_bar {
let bar = make_actionbar_model(ev: event, damus: damus)
EventActionBar(event: event, keypair: damus.keypair, profiles: damus.profiles, bar: bar)
diff --git a/damus/Views/ProfileName.swift b/damus/Views/ProfileName.swift
@@ -7,23 +7,59 @@
import SwiftUI
+struct ProfileFullName: View {
+ let pubkey: String
+ let profile: Profile?
+
+ @State var display_name: String?
+
+ var body: some View {
+ HStack {
+ if let real_name = profile?.display_name {
+ Text(real_name)
+ .bold()
+ ProfileName(pubkey: pubkey, profile: profile, prefix: "@")
+ .font(.footnote)
+ .foregroundColor(.gray)
+ } else {
+ ProfileName(pubkey: pubkey, profile: profile)
+ }
+ }
+ }
+}
+
struct ProfileName: View {
let pubkey: String
let profile: Profile?
+ let prefix: String
@State var display_name: String?
+ init(pubkey: String, profile: Profile?) {
+ self.pubkey = pubkey
+ self.profile = profile
+ self.prefix = ""
+ }
+
+ init(pubkey: String, profile: Profile?, prefix: String) {
+ self.pubkey = pubkey
+ self.profile = profile
+ self.prefix = prefix
+ }
+
var body: some View {
- Text(String(display_name ?? Profile.displayName(profile: profile, pubkey: pubkey)))
- //.foregroundColor(hex_to_rgb(pubkey))
- .bold()
- .onReceive(handle_notify(.profile_updated)) { notif in
- let update = notif.object as! ProfileUpdate
- if update.pubkey != pubkey {
- return
- }
- display_name = Profile.displayName(profile: update.profile, pubkey: pubkey)
+ HStack {
+ Text(prefix + String(display_name ?? Profile.displayName(profile: profile, pubkey: pubkey)))
+ //.foregroundColor(hex_to_rgb(pubkey))
+ .fontWeight(prefix == "@" ? .none : .bold)
+ }
+ .onReceive(handle_notify(.profile_updated)) { notif in
+ let update = notif.object as! ProfileUpdate
+ if update.pubkey != pubkey {
+ return
}
+ display_name = Profile.displayName(profile: update.profile, pubkey: pubkey)
+ }
}
}
diff --git a/damus/Views/ProfilePicView.swift b/damus/Views/ProfilePicView.swift
@@ -102,7 +102,7 @@ struct ProfilePicView: View {
func make_preview_profiles(_ pubkey: String) -> Profiles {
let profiles = Profiles()
let picture = "http://cdn.jb55.com/img/red-me.jpg"
- let profile = Profile(name: "Will", about: "It's me", picture: picture)
+ let profile = Profile(name: "jb55", display_name: "William Casarin", about: "It's me", picture: picture)
let ts_profile = TimestampedProfile(profile: profile, timestamp: 0)
profiles.add(id: pubkey, profile: ts_profile)
return profiles
diff --git a/damus/Views/ProfileView.swift b/damus/Views/ProfileView.swift
@@ -56,26 +56,33 @@ struct ProfileView: View {
var TopSection: some View {
VStack(alignment: .leading) {
let data = damus_state.profiles.lookup(id: profile.pubkey)
- HStack(alignment: .top) {
+
+ HStack(alignment: .center) {
ProfilePicView(pubkey: profile.pubkey, size: PFP_SIZE, highlight: .custom(Color.black, 2), image_cache: damus_state.image_cache, profiles: damus_state.profiles)
+ if let real_name = data?.display_name {
+ VStack(alignment: .leading) {
+ Text(real_name)
+ .font(.title)
+ ProfileName(pubkey: profile.pubkey, profile: data, prefix: "@")
+ .font(.callout)
+ .foregroundColor(.gray)
+ }
+ } else {
+ ProfileName(pubkey: profile.pubkey, profile: data)
+ }
+ //.border(Color.green)
+
Spacer()
FollowButtonView(target: profile.get_follow_target(), follow_state: damus_state.contacts.follow_state(profile.pubkey))
}
- if let pubkey = profile.pubkey {
- ProfileName(pubkey: pubkey, profile: data)
- .font(.title)
- //.border(Color.green)
- Text("\(pubkey)")
- .textSelection(.enabled)
- .font(.footnote)
- .foregroundColor(id_to_color(pubkey))
- }
+ KeyView(pubkey: profile.pubkey)
+ .padding(.bottom, 10)
Text(data?.about ?? "")
-
+
if let contact = profile.contacts {
Divider()
@@ -118,10 +125,42 @@ struct ProfileView: View {
}
}
-/*
struct ProfileView_Previews: PreviewProvider {
static var previews: some View {
- ProfileView()
+ let ds = test_damus_state()
+ let profile_model = ProfileModel(pubkey: ds.pubkey, damus: ds)
+ ProfileView(damus_state: ds, profile: profile_model)
+ }
+}
+
+
+func test_damus_state() -> DamusState {
+ let pubkey = "3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681"
+ let damus = DamusState(pool: RelayPool(), keypair: Keypair(pubkey: pubkey, privkey: "privkey"), likes: EventCounter(our_pubkey: pubkey), boosts: EventCounter(our_pubkey: pubkey), contacts: Contacts(), tips: TipCounter(our_pubkey: pubkey), image_cache: ImageCache(), profiles: Profiles())
+
+ let prof = Profile(name: "damus", display_name: "Damus", about: "iOS app!", picture: "https://damus.io/img/logo.png")
+ let tsprof = TimestampedProfile(profile: prof, timestamp: 0)
+ damus.profiles.add(id: pubkey, profile: tsprof)
+ return damus
+}
+
+struct KeyView: View {
+ let pubkey: String
+
+ @Environment(\.colorScheme) var colorScheme
+
+ var body: some View {
+ let col = id_to_color(pubkey)
+
+ VStack {
+ Text("\(String(pubkey.prefix(32)))")
+ .foregroundColor(colorScheme == .light ? .black : col)
+ .font(.footnote.monospaced())
+ Text("\(String(pubkey.suffix(32)))")
+ .font(.footnote.monospaced())
+ .foregroundColor(colorScheme == .light ? .black : col)
+ }
}
}
- */
+
+