Browse Source

fix many small bugs

Signed-off-by: William Casarin <jb55@jb55.com>
profiles-everywhere
William Casarin 3 years ago
parent
commit
e104de6431
  1. 4
      damus.xcodeproj/project.pbxproj
  2. 2
      damus/Models/Mentions.swift
  3. 5
      damus/Models/ProfileModel.swift
  4. 5
      damus/Nostr/NostrLink.swift
  5. 8
      damus/Views/ChatroomView.swift
  6. 1
      damus/Views/EventActionBar.swift
  7. 12
      damus/Views/EventView.swift
  8. 18
      damus/Views/PostView.swift
  9. 3
      damus/Views/ProfilePicView.swift
  10. 20
      damus/Views/ReplyQuoteView.swift
  11. 8
      damus/Views/ReplyView.swift

4
damus.xcodeproj/project.pbxproj

@ -806,7 +806,7 @@
"$(PROJECT_DIR)", "$(PROJECT_DIR)",
); );
MARKETING_VERSION = 0.1.0; MARKETING_VERSION = 0.1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus; PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -841,7 +841,7 @@
"$(PROJECT_DIR)", "$(PROJECT_DIR)",
); );
MARKETING_VERSION = 0.1.0; MARKETING_VERSION = 0.1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus; PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;

2
damus/Models/Mentions.swift

@ -244,7 +244,7 @@ func make_post_tags(post_blocks: [PostBlock], tags: [[String]]) -> PostTags {
blocks.append(block) blocks.append(block)
} }
case .hashtag(let hashtag): case .hashtag(let hashtag):
new_tags.append(["hashtag", hashtag]) new_tags.append(["hashtag", hashtag.lowercased()])
blocks.append(.hashtag(hashtag)) blocks.append(.hashtag(hashtag))
case .text(let txt): case .text(let txt):
blocks.append(Block.text(txt)) blocks.append(Block.text(txt))

5
damus/Models/ProfileModel.swift

@ -46,7 +46,6 @@ class ProfileModel: ObservableObject {
NostrKind.contacts.rawValue, NostrKind.contacts.rawValue,
NostrKind.metadata.rawValue, NostrKind.metadata.rawValue,
NostrKind.boost.rawValue, NostrKind.boost.rawValue,
NostrKind.like.rawValue
]) ])
profile_filter.authors = [pubkey] profile_filter.authors = [pubkey]
@ -72,7 +71,7 @@ class ProfileModel: ObservableObject {
if seen_event.contains(ev.id) { if seen_event.contains(ev.id) {
return return
} }
if ev.known_kind == .text { if ev.known_kind == .text || ev.known_kind == .boost {
let _ = insert_uniq_sorted_event(events: &self.events, new_ev: ev, cmp: { $0.created_at > $1.created_at}) let _ = insert_uniq_sorted_event(events: &self.events, new_ev: ev, cmp: { $0.created_at > $1.created_at})
} else if ev.known_kind == .contacts { } else if ev.known_kind == .contacts {
handle_profile_contact_event(ev) handle_profile_contact_event(ev)
@ -87,7 +86,7 @@ class ProfileModel: ObservableObject {
case .nostr_event(let resp): case .nostr_event(let resp):
switch resp { switch resp {
case .event(let sid, let ev): case .event(let sid, let ev):
if sid != self.sub_id { if sid != self.sub_id && sid != self.prof_subid {
return return
} }
add_event(ev) add_event(ev)

5
damus/Nostr/NostrLink.swift

@ -81,7 +81,8 @@ func parse_nostr_ref_uri(_ p: Parser) -> ReferencedId? {
} }
func decode_nostr_uri(_ s: String) -> NostrLink? { func decode_nostr_uri(_ s: String) -> NostrLink? {
let uri = s.replacingOccurrences(of: "nostr:", with: "") var uri = s.replacingOccurrences(of: "nostr://", with: "")
uri = uri.replacingOccurrences(of: "nostr:", with: "")
let parts = uri.split(separator: ":") let parts = uri.split(separator: ":")
.reduce(into: Array<String>()) { acc, str in .reduce(into: Array<String>()) { acc, str in
@ -93,7 +94,7 @@ func decode_nostr_uri(_ s: String) -> NostrLink? {
} }
if parts.count >= 2 && parts[0] == "hashtag" { if parts.count >= 2 && parts[0] == "hashtag" {
return .filter(NostrFilter.filter_hashtag([parts[1]])) return .filter(NostrFilter.filter_hashtag([parts[1].lowercased()]))
} }
return tag_to_refid(parts).map { .ref($0) } return tag_to_refid(parts).map { .ref($0) }

8
damus/Views/ChatroomView.swift

@ -23,6 +23,7 @@ struct ChatroomView: View {
next_ev: ind == count-1 ? nil : thread.events[ind+1], next_ev: ind == count-1 ? nil : thread.events[ind+1],
damus: damus damus: damus
) )
.event_context_menu(ev)
.onTapGesture { .onTapGesture {
if thread.initial_event.id == ev.id { if thread.initial_event.id == ev.id {
//dismiss() //dismiss()
@ -56,12 +57,13 @@ struct ChatroomView: View {
/*
struct ChatroomView_Previews: PreviewProvider { struct ChatroomView_Previews: PreviewProvider {
@State var events = [NostrEvent(content: "hello", pubkey: "pubkey")] @State var events = [NostrEvent(content: "hello", pubkey: "pubkey")]
static var previews: some View { static var previews: some View {
ChatroomView(events: events) let state = test_damus_state()
ChatroomView(damus: state)
.environmentObject(ThreadModel(evid: "&849ab9bb263ed2819db06e05f1a1a3b72878464e8c7146718a2fc1bf1912f893", pool: state.pool))
} }
} }
*/

1
damus/Views/EventActionBar.swift

@ -82,6 +82,7 @@ struct EventActionBar: View {
} }
} }
} }
.padding(.top, 1)
.onReceive(handle_notify(.liked)) { n in .onReceive(handle_notify(.liked)) { n in
let liked = n.object as! Counted let liked = n.object as! Counted
if liked.id != event.id { if liked.id != event.id {

12
damus/Views/EventView.swift

@ -65,7 +65,7 @@ struct EventView: View {
} }
func TextEvent(_ event: NostrEvent) -> some View { func TextEvent(_ event: NostrEvent) -> some View {
return HStack { return HStack(alignment: .top) {
let profile = damus.profiles.lookup(id: event.pubkey) let profile = damus.profiles.lookup(id: event.pubkey)
VStack { VStack {
let pmodel = ProfileModel(pubkey: event.pubkey, damus: damus) let pmodel = ProfileModel(pubkey: event.pubkey, damus: damus)
@ -110,7 +110,13 @@ struct EventView: View {
.id(event.id) .id(event.id)
.frame(minHeight: PFP_SIZE) .frame(minHeight: PFP_SIZE)
.padding([.bottom], 4) .padding([.bottom], 4)
.contextMenu { .event_context_menu(event)
}
}
extension View {
func event_context_menu(_ event: NostrEvent) -> some View {
return self.contextMenu {
Button { Button {
UIPasteboard.general.string = event.content UIPasteboard.general.string = event.content
} label: { } label: {
@ -141,10 +147,10 @@ struct EventView: View {
Label("Broadcast", systemImage: "globe") Label("Broadcast", systemImage: "globe")
} }
} }
} }
} }
func format_relative_time(_ created_at: Int64) -> String func format_relative_time(_ created_at: Int64) -> String
{ {
return time_ago_since(Date(timeIntervalSince1970: Double(created_at))) return time_ago_since(Date(timeIntervalSince1970: Double(created_at)))

18
damus/Views/PostView.swift

@ -54,27 +54,9 @@ struct PostView: View {
} }
.padding([.top, .bottom], 4) .padding([.top, .bottom], 4)
HStack(alignment: .top) {
ZStack(alignment: .leading) {
if self.post == "" {
VStack {
Text("What's happening?")
.foregroundColor(.gray)
.padding(6)
Spacer()
}
}
TextEditor(text: $post) TextEditor(text: $post)
.focused($focus) .focused($focus)
} }
Spacer()
}
Spacer()
}
.onAppear() { .onAppear() {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.focus = true self.focus = true

3
damus/Views/ProfilePicView.swift

@ -26,7 +26,7 @@ func pfp_line_width(_ h: Highlight) -> CGFloat {
switch h { switch h {
case .reply: return 0 case .reply: return 0
case .none: return 0 case .none: return 0
case .main: return 2 case .main: return 3
case .custom(_, let lw): return CGFloat(lw) case .custom(_, let lw): return CGFloat(lw)
} }
} }
@ -58,6 +58,7 @@ struct ProfilePicView: View {
return Group { return Group {
if let img = self.img { if let img = self.img {
img img
.resizable()
.frame(width: size, height: size) .frame(width: size, height: size)
.clipShape(Circle()) .clipShape(Circle())
.overlay(Circle().stroke(highlight_color(highlight), lineWidth: pfp_line_width(highlight))) .overlay(Circle().stroke(highlight_color(highlight), lineWidth: pfp_line_width(highlight)))

20
damus/Views/ReplyQuoteView.swift

@ -17,7 +17,8 @@ struct ReplyQuoteView: View {
func MainContent(event: NostrEvent) -> some View { func MainContent(event: NostrEvent) -> some View {
HStack(alignment: .top) { HStack(alignment: .top) {
Rectangle().frame(width: 2) Rectangle()
.frame(width: 2)
.padding([.leading], 4) .padding([.leading], 4)
.foregroundColor(.accentColor) .foregroundColor(.accentColor)
@ -30,9 +31,9 @@ struct ReplyQuoteView: View {
.foregroundColor(.gray) .foregroundColor(.gray)
} }
Text(event.content) NoteContentView(event: event, profiles: profiles, content: event.content)
//.frame(maxWidth: .infinity, alignment: .leading) .font(.callout)
.textSelection(.enabled) .foregroundColor(.accentColor)
//Spacer() //Spacer()
} }
@ -46,7 +47,7 @@ struct ReplyQuoteView: View {
if let event = thread.lookup(event_id) { if let event = thread.lookup(event_id) {
MainContent(event: event) MainContent(event: event)
.padding(4) .padding(4)
.frame(maxHeight: 100) .frame(maxWidth: .infinity, alignment: .leading)
.contentShape(Rectangle()) .contentShape(Rectangle())
.onTapGesture { .onTapGesture {
NotificationCenter.default.post(name: .select_quote, object: event) NotificationCenter.default.post(name: .select_quote, object: event)
@ -59,10 +60,11 @@ struct ReplyQuoteView: View {
} }
} }
/* struct ReplyQuoteView_Previews: PreviewProvider {
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
SwiftUIView() let s = test_damus_state()
let quoter = NostrEvent(content: "a\nb\nc", pubkey: "pubkey")
ReplyQuoteView(quoter: quoter, event_id: "pubkey2", image_cache: s.image_cache, profiles: s.profiles)
.environmentObject(ThreadModel(event: quoter, pool: s.pool))
} }
} }
*/

8
damus/Views/ReplyView.swift

@ -21,7 +21,7 @@ struct ReplyView: View {
var body: some View { var body: some View {
VStack { VStack {
Text("Replying to:") Text("Replying to:")
HStack { HStack(alignment: .top) {
let names = all_referenced_pubkeys(replying_to) let names = all_referenced_pubkeys(replying_to)
.map { pubkey in .map { pubkey in
let pk = pubkey.ref_id let pk = pubkey.ref_id
@ -35,8 +35,6 @@ struct ReplyView: View {
} }
EventView(event: replying_to, highlight: .none, has_action_bar: false, damus: damus) EventView(event: replying_to, highlight: .none, has_action_bar: false, damus: damus)
PostView(references: gather_reply_ids(our_pubkey: damus.pubkey, from: replying_to)) PostView(references: gather_reply_ids(our_pubkey: damus.pubkey, from: replying_to))
Spacer()
} }
.padding() .padding()
@ -45,10 +43,8 @@ struct ReplyView: View {
} }
/*
struct ReplyView_Previews: PreviewProvider { struct ReplyView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
ReplyView() ReplyView(replying_to: NostrEvent(content: "hi", pubkey: "pubkey"), damus: test_damus_state())
} }
} }
*/

Loading…
Cancel
Save