test: fix broken tests

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2024-04-05 11:13:04 -07:00
committed by Daniel D’Aquino
parent 744bf4bb07
commit 690e1347e0
23 changed files with 611 additions and 367 deletions

View File

@@ -90,7 +90,7 @@ class NotificationService: UNNotificationServiceExtension {
return
}
guard let notification_object = generate_local_notification_object(from: nostr_event, state: state) else {
guard let notification_object = generate_local_notification_object(ndb: state.ndb, from: nostr_event, state: state) else {
Log.debug("generate_local_notification_object failed", for: .push_notifications)
// We could not process this notification. Probably an unsupported nostr event kind. Suppress.
// contentHandler(UNNotificationContent())

View File

@@ -314,18 +314,11 @@
4CBB6F682B72B5F0000477A4 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */; };
4CBB6F692B72C783000477A4 /* NdbBlocksIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480562B633F2600F2B2C0 /* NdbBlocksIterator.swift */; };
4CBB6F6A2B730EF1000477A4 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */; };
4CBB6F6B2B7310EC000477A4 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801F2B631C0100F2B2C0 /* tal.c */; };
4CBB6F6C2B7310F8000477A4 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF52B631C0100F2B2C0 /* sha256.c */; };
4CBB6F6D2B731102000477A4 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480232B631C0100F2B2C0 /* take.c */; };
4CBB6F6E2B731113000477A4 /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDF2B631C0100F2B2C0 /* block.c */; };
4CBB6F6F2B73116B000477A4 /* content_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF62B631C0100F2B2C0 /* content_parser.c */; };
4CBB6F702B731179000477A4 /* invoice.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480372B631C0100F2B2C0 /* invoice.c */; };
4CBB6F712B731184000477A4 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480102B631C0100F2B2C0 /* bolt11.c */; };
4CBB6F722B7311AA000477A4 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480122B631C0100F2B2C0 /* list.c */; };
4CBB6F732B7311AA000477A4 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480182B631C0100F2B2C0 /* mem.c */; };
4CBB6F742B7311AA000477A4 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */; };
4CBB6F752B7311AA000477A4 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801C2B631C0100F2B2C0 /* talstr.c */; };
4CBB6F762B7311AA000477A4 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801D2B631C0100F2B2C0 /* utf8.c */; };
4CBB6F772B7311AA000477A4 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801E2B631C0100F2B2C0 /* bech32.c */; };
4CBB6F782B7311AA000477A4 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480252B631C0100F2B2C0 /* amount.c */; };
4CBB6F792B7311AA000477A4 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480262B631C0100F2B2C0 /* error.c */; };
@@ -337,6 +330,46 @@
4CC14FF52A740BB7007AEB17 /* NoteId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF42A740BB7007AEB17 /* NoteId.swift */; };
4CC14FF92A741939007AEB17 /* Referenced.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF82A741939007AEB17 /* Referenced.swift */; };
4CC6193A29DC777C006A86D1 /* RelayBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6193929DC777C006A86D1 /* RelayBootstrap.swift */; };
4CC6A9772CAB650F00989CEF /* CommentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773BC5E2C6D538500349F0A /* CommentItem.swift */; };
4CC6A9FA2CAB688500989CEF /* str.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E22CAB688500989CEF /* str.c */; };
4CC6A9FB2CAB688500989CEF /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E72CAB688500989CEF /* tal.c */; };
4CC6A9FD2CAB688500989CEF /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9C42CAB688500989CEF /* mem.c */; };
4CC6A9FE2CAB688500989CEF /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9A42CAB688500989CEF /* sha256.c */; };
4CC6AA002CAB688500989CEF /* likely.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9BA2CAB688500989CEF /* likely.c */; };
4CC6AA042CAB688500989CEF /* htable.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9B32CAB688500989CEF /* htable.c */; };
4CC6AA0B2CAB688500989CEF /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9BF2CAB688500989CEF /* list.c */; };
4CC6AA0C2CAB688500989CEF /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9F02CAB688500989CEF /* utf8.c */; };
4CC6AA0E2CAB688500989CEF /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9CB2CAB688500989CEF /* debug.c */; };
4CC6AA0F2CAB688500989CEF /* str.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9CE2CAB688500989CEF /* str.c */; };
4CC6AA122CAB688500989CEF /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9D82CAB688500989CEF /* take.c */; };
4CC6AA302CAB688500989CEF /* _info in Resources */ = {isa = PBXBuildFile; fileRef = 4CC6A9DF2CAB688500989CEF /* _info */; };
4CC6AA362CAB688500989CEF /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E02CAB688500989CEF /* LICENSE */; };
4CC6AA612CAB688500989CEF /* _info in Resources */ = {isa = PBXBuildFile; fileRef = 4CC6A9DF2CAB688500989CEF /* _info */; };
4CC6AA672CAB688500989CEF /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E02CAB688500989CEF /* LICENSE */; };
4CC6AA752CAB688500989CEF /* str.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E22CAB688500989CEF /* str.c */; };
4CC6AA762CAB688500989CEF /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E72CAB688500989CEF /* tal.c */; };
4CC6AA782CAB688500989CEF /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9C42CAB688500989CEF /* mem.c */; };
4CC6AA792CAB688500989CEF /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9A42CAB688500989CEF /* sha256.c */; };
4CC6AA7B2CAB688500989CEF /* likely.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9BA2CAB688500989CEF /* likely.c */; };
4CC6AA7F2CAB688500989CEF /* htable.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9B32CAB688500989CEF /* htable.c */; };
4CC6AA862CAB688500989CEF /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9BF2CAB688500989CEF /* list.c */; };
4CC6AA872CAB688500989CEF /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9F02CAB688500989CEF /* utf8.c */; };
4CC6AA892CAB688500989CEF /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9CB2CAB688500989CEF /* debug.c */; };
4CC6AA8A2CAB688500989CEF /* str.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9CE2CAB688500989CEF /* str.c */; };
4CC6AA8D2CAB688500989CEF /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9D82CAB688500989CEF /* take.c */; };
4CC6AAAB2CAB688500989CEF /* _info in Resources */ = {isa = PBXBuildFile; fileRef = 4CC6A9DF2CAB688500989CEF /* _info */; };
4CC6AAB12CAB688500989CEF /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E02CAB688500989CEF /* LICENSE */; };
4CC6AABF2CAB688500989CEF /* str.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E22CAB688500989CEF /* str.c */; };
4CC6AAC02CAB688500989CEF /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9E72CAB688500989CEF /* tal.c */; };
4CC6AAC22CAB688500989CEF /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9C42CAB688500989CEF /* mem.c */; };
4CC6AAC32CAB688500989CEF /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9A42CAB688500989CEF /* sha256.c */; };
4CC6AAC52CAB688500989CEF /* likely.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9BA2CAB688500989CEF /* likely.c */; };
4CC6AAC92CAB688500989CEF /* htable.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9B32CAB688500989CEF /* htable.c */; };
4CC6AAD02CAB688500989CEF /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9BF2CAB688500989CEF /* list.c */; };
4CC6AAD12CAB688500989CEF /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9F02CAB688500989CEF /* utf8.c */; };
4CC6AAD32CAB688500989CEF /* debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9CB2CAB688500989CEF /* debug.c */; };
4CC6AAD42CAB688500989CEF /* str.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9CE2CAB688500989CEF /* str.c */; };
4CC6AAD72CAB688500989CEF /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6A9D82CAB688500989CEF /* take.c */; };
4CC7AAE7297EFA7B00430951 /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; };
4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */; };
4CC7AAED297F0B9E00430951 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEC297F0B9E00430951 /* Highlight.swift */; };
@@ -402,15 +435,12 @@
4CF480382B631C0100F2B2C0 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */; };
4CF480392B631C0100F2B2C0 /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDF2B631C0100F2B2C0 /* block.c */; };
4CF4803A2B631C0100F2B2C0 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */; };
4CF4803C2B631C0100F2B2C0 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF52B631C0100F2B2C0 /* sha256.c */; };
4CF4803D2B631C0100F2B2C0 /* content_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF62B631C0100F2B2C0 /* content_parser.c */; };
4CF4803F2B631C0100F2B2C0 /* ndb_profile.rs in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */; };
4CF480402B631C0100F2B2C0 /* ndb_meta.rs in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */; };
4CF480412B631C0100F2B2C0 /* NdbMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */; };
4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */; };
4CF480442B631C0100F2B2C0 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480102B631C0100F2B2C0 /* bolt11.c */; };
4CF480452B631C0100F2B2C0 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480122B631C0100F2B2C0 /* list.c */; };
4CF480462B631C0100F2B2C0 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480182B631C0100F2B2C0 /* mem.c */; };
4CF480472B631C0100F2B2C0 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */; };
4CF480482B631C0100F2B2C0 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801C2B631C0100F2B2C0 /* talstr.c */; };
4CF480492B631C0100F2B2C0 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801D2B631C0100F2B2C0 /* utf8.c */; };
@@ -1017,7 +1047,7 @@
D703D74C2C6709CE00A400EA /* Zaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A72975FC1800DC99E7 /* Zaps.swift */; };
D703D74D2C6709D400A400EA /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; };
D703D74E2C6709DA00A400EA /* Pubkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF02A73FCDB007AEB17 /* Pubkey.swift */; };
D703D74F2C6709ED00A400EA /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; };
D703D74F2C6709ED00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7502C6709F500A400EA /* NdbTxn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */; };
D703D7512C6709FB00A400EA /* Nostr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFA527FF87A20006080F /* Nostr.swift */; };
D703D7522C670A1400A400EA /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B10272A7B0F5C008AA43E /* Log.swift */; };
@@ -1051,7 +1081,7 @@
D703D76E2C670B4900A400EA /* NdbTagsIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */; };
D703D76F2C670B5200A400EA /* NostrResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB028049D510006080F /* NostrResponse.swift */; };
D703D7702C670B5F00A400EA /* UserStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5E54022A9522F600FF6E60 /* UserStatus.swift */; };
D703D7712C670B6D00A400EA /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E2C2A9935D300489948 /* NdbProfile.swift */; };
D703D7712C670B6D00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7722C670B8000A400EA /* FlatBufferBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93B2A9AD44700DC3548 /* FlatBufferBuilder.swift */; };
D703D7732C670B8500A400EA /* Offset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9382A9AD44700DC3548 /* Offset.swift */; };
D703D7742C670B8A00A400EA /* FbConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9372A9AD44700DC3548 /* FbConstants.swift */; };
@@ -1069,7 +1099,7 @@
D703D7802C670C2500A400EA /* NIP05.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838529656C8B00DC99E7 /* NIP05.swift */; };
D703D7812C670C2B00A400EA /* Bech32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD19283AA67F008EE7EF /* Bech32.swift */; };
D703D7822C670C3400A400EA /* InsertSort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363AA728297703006E126D /* InsertSort.swift */; };
D703D7832C670C3900A400EA /* damus.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670A28FDE64700038D2A /* damus.c */; };
D703D7832C670C3900A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7842C670C4700A400EA /* SequenceUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED202B117DCA0018B19C /* SequenceUtils.swift */; };
D703D7852C670C6100A400EA /* Notify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3529F2A76AE80003BB08B /* Notify.swift */; };
D703D7862C670C6500A400EA /* NewUnmutesNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352AB2A76C07F003BB08B /* NewUnmutesNotify.swift */; };
@@ -1085,23 +1115,23 @@
D703D7902C670D1600A400EA /* NewEventsBits.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D4D2B11728000AD4105 /* NewEventsBits.swift */; };
D703D7912C670D1E00A400EA /* DisplayName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BB83029C0ED4F00FC4E37 /* DisplayName.swift */; };
D703D7922C670D2900A400EA /* RelayURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FF93FF2AC7AC5200FD969D /* RelayURL.swift */; };
D703D7932C670DAF00A400EA /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66428FF5F6800C48A62 /* mem.c */; };
D703D7942C670DE300A400EA /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA63C28FF52D600C48A62 /* bolt11.c */; };
D703D7952C670DE600A400EA /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64028FF553900C48A62 /* hash_u5.c */; };
D703D7962C670DEA00A400EA /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C9146FF2A2A891E00DDEA40 /* error.c */; };
D703D7972C670DED00A400EA /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9276E2A2A5D110098A105 /* wasm.c */; };
D703D7982C670DF200A400EA /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670D28FDEAA000038D2A /* utf8.c */; };
D703D7992C670DF900A400EA /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64328FF558100C48A62 /* sha256.c */; };
D703D79A2C670DFD00A400EA /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64828FF597700C48A62 /* bech32.c */; };
D703D79B2C670E0000A400EA /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */; };
D703D79C2C670E0300A400EA /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64E28FF59F200C48A62 /* tal.c */; };
D703D79D2C670E0700A400EA /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA65F28FF5E7700C48A62 /* node_id.c */; };
D703D79E2C670E0F00A400EA /* hex.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66728FF5F9900C48A62 /* hex.c */; };
D703D79F2C670E1200A400EA /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66C28FF782800C48A62 /* amount.c */; };
D703D7A02C670E1500A400EA /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67428FF7A5A00C48A62 /* take.c */; };
D703D7A12C670E1700A400EA /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67628FF7A9800C48A62 /* talstr.c */; };
D703D7A22C670E1A00A400EA /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67828FF7ABF00C48A62 /* list.c */; };
D703D7A32C670E1D00A400EA /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; };
D703D7932C670DAF00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7942C670DE300A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7952C670DE600A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7962C670DEA00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7972C670DED00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7982C670DF200A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7992C670DF900A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D79A2C670DFD00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D79B2C670E0000A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D79C2C670E0300A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D79D2C670E0700A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D79E2C670E0F00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D79F2C670E1200A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7A02C670E1500A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7A12C670E1700A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7A22C670E1A00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7A32C670E1D00A400EA /* (null) in Sources */ = {isa = PBXBuildFile; };
D703D7A42C670E3C00A400EA /* midl.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793032A993DB900489948 /* midl.c */; };
D703D7A52C670E3E00A400EA /* mdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793002A993B9A00489948 /* mdb.c */; };
D703D7A62C670E5200A400EA /* builder.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792942A9939BD00489948 /* builder.c */; };
@@ -1571,7 +1601,6 @@
D76BE18E2E0CF3DA004AD0C6 /* Interests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76BE18B2E0CF3D5004AD0C6 /* Interests.swift */; };
D773BC5F2C6D538500349F0A /* CommentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773BC5E2C6D538500349F0A /* CommentItem.swift */; };
D773BC602C6D538500349F0A /* CommentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773BC5E2C6D538500349F0A /* CommentItem.swift */; };
D773BC612C6D58A700349F0A /* CommentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773BC5E2C6D538500349F0A /* CommentItem.swift */; };
D77BFA0B2AE3051200621634 /* ProfileActionSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77BFA0A2AE3051200621634 /* ProfileActionSheetView.swift */; };
D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D783A63E2AD4E53D00658DDA /* SuggestedHashtagsView.swift */; };
D78525252A7B2EA4002FA637 /* NoteContentViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78525242A7B2EA4002FA637 /* NoteContentViewTests.swift */; };
@@ -1668,7 +1697,6 @@
D7CBD1D62B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBD1D52B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift */; };
D7CCFC072B05833200323D86 /* NdbNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90548A2A6AEDEE00811EEC /* NdbNote.swift */; };
D7CCFC082B05834500323D86 /* NoteId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF42A740BB7007AEB17 /* NoteId.swift */; };
D7CCFC0B2B0585EA00323D86 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; settings = {COMPILER_FLAGS = "-w"; }; };
D7CCFC0F2B0587F600323D86 /* Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8B28398BC6008A31F1 /* Keys.swift */; };
D7CCFC102B05880F00323D86 /* Id.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B7BF12A71B6540049DEE7 /* Id.swift */; };
D7CCFC112B05884E00323D86 /* AsciiCharacter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5D5C9C2A6B2CB40024563C /* AsciiCharacter.swift */; };
@@ -2310,6 +2338,42 @@
4CC14FF42A740BB7007AEB17 /* NoteId.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteId.swift; sourceTree = "<group>"; };
4CC14FF82A741939007AEB17 /* Referenced.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Referenced.swift; sourceTree = "<group>"; };
4CC6193929DC777C006A86D1 /* RelayBootstrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayBootstrap.swift; sourceTree = "<group>"; };
4CC6A97E2CAB688500989CEF /* alignof.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = alignof.h; sourceTree = "<group>"; };
4CC6A9822CAB688500989CEF /* array_size.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = array_size.h; sourceTree = "<group>"; };
4CC6A9862CAB688500989CEF /* build_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = build_assert.h; sourceTree = "<group>"; };
4CC6A98A2CAB688500989CEF /* check_type.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = check_type.h; sourceTree = "<group>"; };
4CC6A98E2CAB688500989CEF /* compiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compiler.h; sourceTree = "<group>"; };
4CC6A9922CAB688500989CEF /* container_of.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = container_of.h; sourceTree = "<group>"; };
4CC6A9962CAB688500989CEF /* cppmagic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cppmagic.h; sourceTree = "<group>"; };
4CC6A9A32CAB688500989CEF /* sha256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha256.h; sourceTree = "<group>"; };
4CC6A9A42CAB688500989CEF /* sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = "<group>"; };
4CC6A9A82CAB688500989CEF /* endian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = "<group>"; };
4CC6A9B22CAB688500989CEF /* htable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = htable.h; sourceTree = "<group>"; };
4CC6A9B32CAB688500989CEF /* htable.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = htable.c; sourceTree = "<group>"; };
4CC6A9B42CAB688500989CEF /* htable_type.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = htable_type.h; sourceTree = "<group>"; };
4CC6A9B92CAB688500989CEF /* likely.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = likely.h; sourceTree = "<group>"; };
4CC6A9BA2CAB688500989CEF /* likely.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = likely.c; sourceTree = "<group>"; };
4CC6A9BE2CAB688500989CEF /* list.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; };
4CC6A9BF2CAB688500989CEF /* list.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; };
4CC6A9C32CAB688500989CEF /* mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = "<group>"; };
4CC6A9C42CAB688500989CEF /* mem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = "<group>"; };
4CC6A9C82CAB688500989CEF /* short_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = short_types.h; sourceTree = "<group>"; };
4CC6A9CB2CAB688500989CEF /* debug.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = debug.c; sourceTree = "<group>"; };
4CC6A9CD2CAB688500989CEF /* str.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str.h; sourceTree = "<group>"; };
4CC6A9CE2CAB688500989CEF /* str.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = str.c; sourceTree = "<group>"; };
4CC6A9CF2CAB688500989CEF /* str_debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_debug.h; sourceTree = "<group>"; };
4CC6A9D32CAB688500989CEF /* structeq.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = structeq.h; sourceTree = "<group>"; };
4CC6A9D72CAB688500989CEF /* take.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = take.h; sourceTree = "<group>"; };
4CC6A9D82CAB688500989CEF /* take.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = take.c; sourceTree = "<group>"; };
4CC6A9DF2CAB688500989CEF /* _info */ = {isa = PBXFileReference; lastKnownFileType = text; path = _info; sourceTree = "<group>"; };
4CC6A9E02CAB688500989CEF /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
4CC6A9E12CAB688500989CEF /* str.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str.h; sourceTree = "<group>"; };
4CC6A9E22CAB688500989CEF /* str.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = str.c; sourceTree = "<group>"; };
4CC6A9E62CAB688500989CEF /* tal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tal.h; sourceTree = "<group>"; };
4CC6A9E72CAB688500989CEF /* tal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tal.c; sourceTree = "<group>"; };
4CC6A9EB2CAB688500989CEF /* typesafe_cb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = typesafe_cb.h; sourceTree = "<group>"; };
4CC6A9EF2CAB688500989CEF /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
4CC6A9F02CAB688500989CEF /* utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = "<group>"; };
4CC7AAE6297EFA7B00430951 /* Zap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Zap.swift; sourceTree = "<group>"; };
4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuilderEventView.swift; sourceTree = "<group>"; };
4CC7AAEC297F0B9E00430951 /* Highlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Highlight.swift; sourceTree = "<group>"; };
@@ -2904,40 +2968,6 @@
path = NIP10;
sourceTree = "<group>";
};
4C478E2A2A9935D300489948 /* bindings */ = {
isa = PBXGroup;
children = (
4C478E2B2A9935D300489948 /* swift */,
4C478E2D2A9935D300489948 /* c */,
);
path = bindings;
sourceTree = "<group>";
};
4C478E2B2A9935D300489948 /* swift */ = {
isa = PBXGroup;
children = (
4C478E2C2A9935D300489948 /* NdbProfile.swift */,
);
path = swift;
sourceTree = "<group>";
};
4C478E2D2A9935D300489948 /* c */ = {
isa = PBXGroup;
children = (
4C478E2E2A9935D300489948 /* profile_json_parser.h */,
4C478E2F2A9935D300489948 /* profile_reader.h */,
4C478E302A9935D300489948 /* meta_json_parser.h */,
4C478E312A9935D300489948 /* profile_builder.h */,
4C478E322A9935D300489948 /* meta_builder.h */,
4C478E332A9935D300489948 /* profile_verifier.h */,
4C478E352A9935D300489948 /* meta_reader.h */,
4C478E362A9935D300489948 /* flatbuffers_common_reader.h */,
4C478E372A9935D300489948 /* meta_verifier.h */,
4C478E382A9935D300489948 /* flatbuffers_common_builder.h */,
);
path = c;
sourceTree = "<group>";
};
4C47928D2A9939BD00489948 /* flatcc */ = {
isa = PBXGroup;
children = (
@@ -3167,6 +3197,7 @@
isa = PBXGroup;
children = (
D733F9E42D92C75C00317B11 /* UnownedNdbNote.swift */,
4CC6A9F92CAB688500989CEF /* ccan */,
4C15224A2B8D499F007CDC17 /* parser.h */,
4CF47FDC2B631C0100F2B2C0 /* src */,
4C47928D2A9939BD00489948 /* flatcc */,
@@ -3312,6 +3343,233 @@
path = Ids;
sourceTree = "<group>";
};
4CC6A9802CAB688500989CEF /* alignof */ = {
isa = PBXGroup;
children = (
4CC6A97E2CAB688500989CEF /* alignof.h */,
);
path = alignof;
sourceTree = "<group>";
};
4CC6A9842CAB688500989CEF /* array_size */ = {
isa = PBXGroup;
children = (
4CC6A9822CAB688500989CEF /* array_size.h */,
);
path = array_size;
sourceTree = "<group>";
};
4CC6A9882CAB688500989CEF /* build_assert */ = {
isa = PBXGroup;
children = (
4CC6A9862CAB688500989CEF /* build_assert.h */,
);
path = build_assert;
sourceTree = "<group>";
};
4CC6A98C2CAB688500989CEF /* check_type */ = {
isa = PBXGroup;
children = (
4CC6A98A2CAB688500989CEF /* check_type.h */,
);
path = check_type;
sourceTree = "<group>";
};
4CC6A9902CAB688500989CEF /* compiler */ = {
isa = PBXGroup;
children = (
4CC6A98E2CAB688500989CEF /* compiler.h */,
);
path = compiler;
sourceTree = "<group>";
};
4CC6A9942CAB688500989CEF /* container_of */ = {
isa = PBXGroup;
children = (
4CC6A9922CAB688500989CEF /* container_of.h */,
);
path = container_of;
sourceTree = "<group>";
};
4CC6A9982CAB688500989CEF /* cppmagic */ = {
isa = PBXGroup;
children = (
4CC6A9962CAB688500989CEF /* cppmagic.h */,
);
path = cppmagic;
sourceTree = "<group>";
};
4CC6A9A52CAB688500989CEF /* sha256 */ = {
isa = PBXGroup;
children = (
4CC6A9A32CAB688500989CEF /* sha256.h */,
4CC6A9A42CAB688500989CEF /* sha256.c */,
);
path = sha256;
sourceTree = "<group>";
};
4CC6A9A62CAB688500989CEF /* crypto */ = {
isa = PBXGroup;
children = (
4CC6A9A52CAB688500989CEF /* sha256 */,
);
path = crypto;
sourceTree = "<group>";
};
4CC6A9AA2CAB688500989CEF /* endian */ = {
isa = PBXGroup;
children = (
4CC6A9A82CAB688500989CEF /* endian.h */,
);
path = endian;
sourceTree = "<group>";
};
4CC6A9B62CAB688500989CEF /* htable */ = {
isa = PBXGroup;
children = (
4CC6A9B22CAB688500989CEF /* htable.h */,
4CC6A9B32CAB688500989CEF /* htable.c */,
4CC6A9B42CAB688500989CEF /* htable_type.h */,
);
path = htable;
sourceTree = "<group>";
};
4CC6A9BB2CAB688500989CEF /* likely */ = {
isa = PBXGroup;
children = (
4CC6A9B92CAB688500989CEF /* likely.h */,
4CC6A9BA2CAB688500989CEF /* likely.c */,
);
path = likely;
sourceTree = "<group>";
};
4CC6A9C02CAB688500989CEF /* list */ = {
isa = PBXGroup;
children = (
4CC6A9BE2CAB688500989CEF /* list.h */,
4CC6A9BF2CAB688500989CEF /* list.c */,
);
path = list;
sourceTree = "<group>";
};
4CC6A9C52CAB688500989CEF /* mem */ = {
isa = PBXGroup;
children = (
4CC6A9C32CAB688500989CEF /* mem.h */,
4CC6A9C42CAB688500989CEF /* mem.c */,
);
path = mem;
sourceTree = "<group>";
};
4CC6A9C92CAB688500989CEF /* short_types */ = {
isa = PBXGroup;
children = (
4CC6A9C82CAB688500989CEF /* short_types.h */,
);
path = short_types;
sourceTree = "<group>";
};
4CC6A9D02CAB688500989CEF /* str */ = {
isa = PBXGroup;
children = (
4CC6A9CB2CAB688500989CEF /* debug.c */,
4CC6A9CD2CAB688500989CEF /* str.h */,
4CC6A9CE2CAB688500989CEF /* str.c */,
4CC6A9CF2CAB688500989CEF /* str_debug.h */,
);
path = str;
sourceTree = "<group>";
};
4CC6A9D42CAB688500989CEF /* structeq */ = {
isa = PBXGroup;
children = (
4CC6A9D32CAB688500989CEF /* structeq.h */,
);
path = structeq;
sourceTree = "<group>";
};
4CC6A9D92CAB688500989CEF /* take */ = {
isa = PBXGroup;
children = (
4CC6A9D72CAB688500989CEF /* take.h */,
4CC6A9D82CAB688500989CEF /* take.c */,
);
path = take;
sourceTree = "<group>";
};
4CC6A9E32CAB688500989CEF /* str */ = {
isa = PBXGroup;
children = (
4CC6A9DF2CAB688500989CEF /* _info */,
4CC6A9E02CAB688500989CEF /* LICENSE */,
4CC6A9E12CAB688500989CEF /* str.h */,
4CC6A9E22CAB688500989CEF /* str.c */,
);
path = str;
sourceTree = "<group>";
};
4CC6A9E82CAB688500989CEF /* tal */ = {
isa = PBXGroup;
children = (
4CC6A9E32CAB688500989CEF /* str */,
4CC6A9E62CAB688500989CEF /* tal.h */,
4CC6A9E72CAB688500989CEF /* tal.c */,
);
path = tal;
sourceTree = "<group>";
};
4CC6A9EC2CAB688500989CEF /* typesafe_cb */ = {
isa = PBXGroup;
children = (
4CC6A9EB2CAB688500989CEF /* typesafe_cb.h */,
);
path = typesafe_cb;
sourceTree = "<group>";
};
4CC6A9F12CAB688500989CEF /* utf8 */ = {
isa = PBXGroup;
children = (
4CC6A9EF2CAB688500989CEF /* utf8.h */,
4CC6A9F02CAB688500989CEF /* utf8.c */,
);
path = utf8;
sourceTree = "<group>";
};
4CC6A9F22CAB688500989CEF /* ccan */ = {
isa = PBXGroup;
children = (
4CC6A9802CAB688500989CEF /* alignof */,
4CC6A9842CAB688500989CEF /* array_size */,
4CC6A9882CAB688500989CEF /* build_assert */,
4CC6A98C2CAB688500989CEF /* check_type */,
4CC6A9902CAB688500989CEF /* compiler */,
4CC6A9942CAB688500989CEF /* container_of */,
4CC6A9982CAB688500989CEF /* cppmagic */,
4CC6A9A62CAB688500989CEF /* crypto */,
4CC6A9AA2CAB688500989CEF /* endian */,
4CC6A9B62CAB688500989CEF /* htable */,
4CC6A9BB2CAB688500989CEF /* likely */,
4CC6A9C02CAB688500989CEF /* list */,
4CC6A9C52CAB688500989CEF /* mem */,
4CC6A9C92CAB688500989CEF /* short_types */,
4CC6A9D02CAB688500989CEF /* str */,
4CC6A9D42CAB688500989CEF /* structeq */,
4CC6A9D92CAB688500989CEF /* take */,
4CC6A9E82CAB688500989CEF /* tal */,
4CC6A9EC2CAB688500989CEF /* typesafe_cb */,
4CC6A9F12CAB688500989CEF /* utf8 */,
);
path = ccan;
sourceTree = "<group>";
};
4CC6A9F92CAB688500989CEF /* ccan */ = {
isa = PBXGroup;
children = (
4CC6A9F22CAB688500989CEF /* ccan */,
);
path = ccan;
sourceTree = "<group>";
};
4CC7AAEE297F11B300430951 /* Events */ = {
isa = PBXGroup;
children = (
@@ -5102,8 +5360,9 @@
D71527F42E0A2DCA00C893D6 /* follow-packs.jsonl in Resources */,
4C1D4FB42A7967990024F453 /* build-git-hash.txt in Resources */,
D7FB14222BE5970000398331 /* PrivacyInfo.xcprivacy in Resources */,
4CF480432B631C0100F2B2C0 /* .dir in Resources */,
3ACB685F297633BC00C46468 /* Localizable.strings in Resources */,
4CC6AA612CAB688500989CEF /* _info in Resources */,
4CC6AA672CAB688500989CEF /* LICENSE in Resources */,
4CE6DEEE27F7A08200C66700 /* Preview Assets.xcassets in Resources */,
3ACB685C297633BC00C46468 /* InfoPlist.strings in Resources */,
50DA11262A16A23F00236234 /* Launch.storyboard in Resources */,
@@ -5148,6 +5407,8 @@
buildActionMask = 2147483647;
files = (
D7C970202C89100200C56602 /* Localizable.strings in Resources */,
4CC6AA302CAB688500989CEF /* _info in Resources */,
4CC6AA362CAB688500989CEF /* LICENSE in Resources */,
D7C970212C89100200C56602 /* Localizable.stringsdict in Resources */,
D73E5F982C6AA847007EB227 /* Assets.xcassets in Resources */,
D703D72B2C66F29500A400EA /* getSelection.js in Resources */,
@@ -5162,6 +5423,8 @@
D7C9701F2C890FEB00C56602 /* Localizable.stringsdict in Resources */,
D7C9701E2C890FC500C56602 /* Localizable.strings in Resources */,
D7FB14252BE5A9A800398331 /* PrivacyInfo.xcprivacy in Resources */,
4CC6AAAB2CAB688500989CEF /* _info in Resources */,
4CC6AAB12CAB688500989CEF /* LICENSE in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5242,6 +5505,17 @@
D798D22C2B086C7400234419 /* NostrEvent+.swift in Sources */,
4C75EFB728049D990006080F /* RelayPool.swift in Sources */,
F757933A29D7AECD007DEAC1 /* MediaPicker.swift in Sources */,
4CC6AA752CAB688500989CEF /* str.c in Sources */,
4CC6AA762CAB688500989CEF /* tal.c in Sources */,
4CC6AA782CAB688500989CEF /* mem.c in Sources */,
4CC6AA792CAB688500989CEF /* sha256.c in Sources */,
4CC6AA7B2CAB688500989CEF /* likely.c in Sources */,
4CC6AA7F2CAB688500989CEF /* htable.c in Sources */,
4CC6AA862CAB688500989CEF /* list.c in Sources */,
4CC6AA872CAB688500989CEF /* utf8.c in Sources */,
4CC6AA892CAB688500989CEF /* debug.c in Sources */,
4CC6AA8A2CAB688500989CEF /* str.c in Sources */,
4CC6AA8D2CAB688500989CEF /* take.c in Sources */,
4CF0ABEE29844B5500D66079 /* AnyEncodable.swift in Sources */,
B57B4C662B312C3700A232C0 /* NostrAuth.swift in Sources */,
D7DB930B2D69486700DA1EE5 /* NIP65.swift in Sources */,
@@ -5286,7 +5560,6 @@
4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */,
4C7FF7D52823313F009601DB /* Mentions.swift in Sources */,
4CF4803D2B631C0100F2B2C0 /* content_parser.c in Sources */,
BA4AB0AE2A63B9270070A32A /* AddEmojiView.swift in Sources */,
4C32B94D2A9AD44700DC3548 /* Offset.swift in Sources */,
4C633350283D40E500B1C9C3 /* HomeModel.swift in Sources */,
4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */,
@@ -5418,7 +5691,6 @@
D7CB5D452B116FE800AD4105 /* Contacts+.swift in Sources */,
4CA352A42A76AFF3003BB08B /* UpdateStatsNotify.swift in Sources */,
D798D21E2B0858BB00234419 /* MigratedTypes.swift in Sources */,
4CF4803C2B631C0100F2B2C0 /* sha256.c in Sources */,
4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */,
4C2B7BF22A71B6540049DEE7 /* Id.swift in Sources */,
7C95CAEE299DCEF1009DCB67 /* KFOptionSetter+.swift in Sources */,
@@ -5500,7 +5772,6 @@
BA37598D2ABCCE500018D73B /* PhotoCaptureProcessor.swift in Sources */,
3A515C562DF5371D002D3B34 /* TrustedNetworkButtonTipViewStyle.swift in Sources */,
5CC8529D2BD741CD0039FFC5 /* HighlightEvent.swift in Sources */,
4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */,
4C75EFAF28049D350006080F /* NostrFilter.swift in Sources */,
4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */,
4CA9276C2A2910D10098A105 /* ReplyPart.swift in Sources */,
@@ -5527,7 +5798,6 @@
4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */,
D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */,
D73FA9E12DDC12AA00C706E1 /* OnboardingContentSettings.swift in Sources */,
4CB88393296F798300DC99E7 /* ReactionsModel.swift in Sources */,
5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */,
4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */,
50A16FFD2AA7525700DFEC1F /* DamusVideoPlayer.swift in Sources */,
@@ -5583,7 +5853,6 @@
4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */,
4CC7AAF6297F1A6A00430951 /* EventBody.swift in Sources */,
D76556D62B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift in Sources */,
4CF480452B631C0100F2B2C0 /* list.c in Sources */,
3165648B295B70D500C64604 /* LinkView.swift in Sources */,
D7CB5D5C2B1176B200AD4105 /* MediaUploader.swift in Sources */,
5C4FA7FD2DC29C3800CE658C /* FollowPackView.swift in Sources */,
@@ -5597,7 +5866,6 @@
4CA352A02A76AE80003BB08B /* Notify.swift in Sources */,
4CF38C882A9442DC00BE01B6 /* UserStatusView.swift in Sources */,
4CE6DEE727F7A08100C66700 /* damusApp.swift in Sources */,
4CF480462B631C0100F2B2C0 /* mem.c in Sources */,
4C1253582A76C9060004F4B8 /* PresentSheetNotify.swift in Sources */,
D7D09AB52DADCA5C00AB170D /* CoinosDeterministicAccountClient.swift in Sources */,
D773BC5F2C6D538500349F0A /* CommentItem.swift in Sources */,
@@ -6455,6 +6723,17 @@
D73E5EA82C6A97F4007EB227 /* DirectMessageModel.swift in Sources */,
D78F08132D7F78F900FC6C75 /* Response.swift in Sources */,
D73E5EA92C6A97F4007EB227 /* Report.swift in Sources */,
4CC6A9FA2CAB688500989CEF /* str.c in Sources */,
4CC6A9FB2CAB688500989CEF /* tal.c in Sources */,
4CC6A9FD2CAB688500989CEF /* mem.c in Sources */,
4CC6A9FE2CAB688500989CEF /* sha256.c in Sources */,
4CC6AA002CAB688500989CEF /* likely.c in Sources */,
4CC6AA042CAB688500989CEF /* htable.c in Sources */,
4CC6AA0B2CAB688500989CEF /* list.c in Sources */,
4CC6AA0C2CAB688500989CEF /* utf8.c in Sources */,
4CC6AA0E2CAB688500989CEF /* debug.c in Sources */,
4CC6AA0F2CAB688500989CEF /* str.c in Sources */,
4CC6AA122CAB688500989CEF /* take.c in Sources */,
D73E5EAA2C6A97F4007EB227 /* ZapsModel.swift in Sources */,
D73E5EAB2C6A97F4007EB227 /* DraftsModel.swift in Sources */,
D73E5F932C6AA743007EB227 /* SetupView.swift in Sources */,
@@ -6675,9 +6954,9 @@
D703D7602C670AAB00A400EA /* MigratedTypes.swift in Sources */,
D73E5F742C6A9890007EB227 /* damusApp.swift in Sources */,
D73E5E192C6A965A007EB227 /* DamusState.swift in Sources */,
D703D74F2C6709ED00A400EA /* nostrdb.c in Sources */,
D703D74F2C6709ED00A400EA /* (null) in Sources */,
D73E5F872C6AA639007EB227 /* ImageCarousel.swift in Sources */,
D703D7932C670DAF00A400EA /* mem.c in Sources */,
D703D7932C670DAF00A400EA /* (null) in Sources */,
D703D7732C670B8500A400EA /* Offset.swift in Sources */,
D703D7572C670A5A00A400EA /* IdType.swift in Sources */,
D703D7542C670A2A00A400EA /* MediaUploader.swift in Sources */,
@@ -6685,16 +6964,16 @@
D73E5E1A2C6A9665007EB227 /* RelayPool.swift in Sources */,
D703D74C2C6709CE00A400EA /* Zaps.swift in Sources */,
D703D7552C670A3700A400EA /* DamusUserDefaults.swift in Sources */,
D703D7A32C670E1D00A400EA /* nostr_bech32.c in Sources */,
D703D7992C670DF900A400EA /* sha256.c in Sources */,
5C4FA8002DC5119300CE658C /* FollowPackPreview.swift in Sources */,
D703D7972C670DED00A400EA /* wasm.c in Sources */,
5C8498042D5D150000F74FEB /* ZapExplainer.swift in Sources */,
D703D7A32C670E1D00A400EA /* (null) in Sources */,
D703D7992C670DF900A400EA /* (null) in Sources */,
D703D7972C670DED00A400EA /* (null) in Sources */,
D703D7842C670C4700A400EA /* SequenceUtils.swift in Sources */,
D703D7912C670D1E00A400EA /* DisplayName.swift in Sources */,
D703D7B02C6710A500A400EA /* Root.swift in Sources */,
D703D7822C670C3400A400EA /* InsertSort.swift in Sources */,
D703D79E2C670E0F00A400EA /* hex.c in Sources */,
D703D79E2C670E0F00A400EA /* (null) in Sources */,
D703D7B12C6710AB00A400EA /* LocalizationUtil.swift in Sources */,
D703D74D2C6709D400A400EA /* Zap.swift in Sources */,
D73E5E1C2C6A9677007EB227 /* DirectMessagesModel.swift in Sources */,
@@ -6707,7 +6986,7 @@
D703D77E2C670C1100A400EA /* NostrKind.swift in Sources */,
D73E5F972C6AA7B7007EB227 /* SuggestedHashtagsView.swift in Sources */,
D703D7B22C6710AF00A400EA /* ContentParsing.swift in Sources */,
D703D79F2C670E1200A400EA /* amount.c in Sources */,
D703D79F2C670E1200A400EA /* (null) in Sources */,
D703D7522C670A1400A400EA /* Log.swift in Sources */,
D73E5E1B2C6A9672007EB227 /* LikeCounter.swift in Sources */,
D703D7A92C670E5A00A400EA /* refmap.c in Sources */,
@@ -6715,20 +6994,20 @@
D703D77B2C670BF000A400EA /* TableVerifier.swift in Sources */,
3ACF94442DA9FCAB00971A4E /* NIP05DomainTimelineView.swift in Sources */,
D703D76D2C670B4500A400EA /* ZapDataModel.swift in Sources */,
D703D79D2C670E0700A400EA /* node_id.c in Sources */,
D703D79B2C670E0000A400EA /* bech32_util.c in Sources */,
D703D79D2C670E0700A400EA /* (null) in Sources */,
D703D79B2C670E0000A400EA /* (null) in Sources */,
D703D75D2C670A8E00A400EA /* ReferencedId.swift in Sources */,
D703D7772C670BCE00A400EA /* Verifiable.swift in Sources */,
D703D7642C670AE300A400EA /* StringCodable.swift in Sources */,
D703D7A52C670E3E00A400EA /* mdb.c in Sources */,
D703D76B2C670B3100A400EA /* Referenced.swift in Sources */,
D703D7952C670DE600A400EA /* hash_u5.c in Sources */,
D73BDB192D71311900D69970 /* UserRelayListErrors.swift in Sources */,
D703D7952C670DE600A400EA /* (null) in Sources */,
D703D7582C670A6000A400EA /* Id.swift in Sources */,
5C05675A2C8FBDE70073F23A /* NDBSearchView.swift in Sources */,
D703D76E2C670B4900A400EA /* NdbTagsIterator.swift in Sources */,
D703D7A02C670E1500A400EA /* take.c in Sources */,
D78BA6672DD7DFB9000AE62C /* InterestSelectionView.swift in Sources */,
D703D7A02C670E1500A400EA /* (null) in Sources */,
D703D7692C670B2600A400EA /* Block.swift in Sources */,
D703D77D2C670C0300A400EA /* FlatbuffersErrors.swift in Sources */,
D703D7A62C670E5200A400EA /* builder.c in Sources */,
@@ -6744,9 +7023,9 @@
D703D7882C670C8200A400EA /* FriendFilter.swift in Sources */,
D703D7562C670A4C00A400EA /* TranslationService.swift in Sources */,
D703D7A72C670E5500A400EA /* json_parser.c in Sources */,
D703D79C2C670E0300A400EA /* tal.c in Sources */,
D703D7712C670B6D00A400EA /* NdbProfile.swift in Sources */,
D703D7A22C670E1A00A400EA /* list.c in Sources */,
D703D79C2C670E0300A400EA /* (null) in Sources */,
D703D7712C670B6D00A400EA /* (null) in Sources */,
D703D7A22C670E1A00A400EA /* (null) in Sources */,
D703D7A42C670E3C00A400EA /* midl.c in Sources */,
D7DB1FE02D5A78CE00CF06DA /* NIP44.swift in Sources */,
D706C5B02D5D31C20027C627 /* AutoSaveIndicatorView.swift in Sources */,
@@ -6758,17 +7037,17 @@
D703D7432C67084F00A400EA /* Ndb.swift in Sources */,
D703D7B32C6710BF00A400EA /* NewMutesNotify.swift in Sources */,
D703D78C2C670CAB00A400EA /* ProofOfWork.swift in Sources */,
D703D7A12C670E1700A400EA /* talstr.c in Sources */,
D703D7A12C670E1700A400EA /* (null) in Sources */,
D703D7782C670BD900A400EA /* LNUrlPayRequest.swift in Sources */,
D703D7612C670AC000A400EA /* FlatBufferObject.swift in Sources */,
D703D7942C670DE300A400EA /* bolt11.c in Sources */,
D703D7942C670DE300A400EA /* (null) in Sources */,
D703D74A2C6709C200A400EA /* MuteItem.swift in Sources */,
D703D77C2C670BFB00A400EA /* Enum.swift in Sources */,
D73E5E1F2C6A969E007EB227 /* RelayModelCache.swift in Sources */,
D703D7AB2C670F6900A400EA /* UnmuteThreadNotify.swift in Sources */,
D703D7702C670B5F00A400EA /* UserStatus.swift in Sources */,
D703D7752C670BBF00A400EA /* Constants.swift in Sources */,
D703D7832C670C3900A400EA /* damus.c in Sources */,
D703D7832C670C3900A400EA /* (null) in Sources */,
D73E5E172C6A962A007EB227 /* ImageUploadModel.swift in Sources */,
D703D76A2C670B2C00A400EA /* Bech32Object.swift in Sources */,
D73E5E162C6A9619007EB227 /* PostView.swift in Sources */,
@@ -6788,10 +7067,10 @@
D703D7A82C670E5800A400EA /* emitter.c in Sources */,
D703D76F2C670B5200A400EA /* NostrResponse.swift in Sources */,
D703D7902C670D1600A400EA /* NewEventsBits.swift in Sources */,
D703D7962C670DEA00A400EA /* error.c in Sources */,
D703D7962C670DEA00A400EA /* (null) in Sources */,
D703D75E2C670A9A00A400EA /* NdbTagElem.swift in Sources */,
D703D7622C670ACB00A400EA /* ByteBuffer.swift in Sources */,
D703D79A2C670DFD00A400EA /* bech32.c in Sources */,
D703D79A2C670DFD00A400EA /* (null) in Sources */,
D703D7B62C67118200A400EA /* String+extension.swift in Sources */,
D74EA08A2D2BF2A7002290DD /* URLHandler.swift in Sources */,
D703D76C2C670B3900A400EA /* Post.swift in Sources */,
@@ -6819,14 +7098,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4CC6A9772CAB650F00989CEF /* CommentItem.swift in Sources */,
4C8FA7242BED58A900798A6A /* ThreadReply.swift in Sources */,
D733F9E52D92C76100317B11 /* UnownedNdbNote.swift in Sources */,
4CBB6F7C2B7312A7000477A4 /* nostr_bech32.c in Sources */,
4CBB6F722B7311AA000477A4 /* list.c in Sources */,
4CBB6F732B7311AA000477A4 /* mem.c in Sources */,
4CBB6F742B7311AA000477A4 /* hash_u5.c in Sources */,
4CBB6F752B7311AA000477A4 /* talstr.c in Sources */,
4CBB6F762B7311AA000477A4 /* utf8.c in Sources */,
4CBB6F772B7311AA000477A4 /* bech32.c in Sources */,
4CBB6F782B7311AA000477A4 /* amount.c in Sources */,
4CBB6F792B7311AA000477A4 /* error.c in Sources */,
@@ -6835,9 +7111,6 @@
4CBB6F702B731179000477A4 /* invoice.c in Sources */,
4CBB6F6F2B73116B000477A4 /* content_parser.c in Sources */,
4CBB6F6E2B731113000477A4 /* block.c in Sources */,
4CBB6F6D2B731102000477A4 /* take.c in Sources */,
4CBB6F6C2B7310F8000477A4 /* sha256.c in Sources */,
4CBB6F6B2B7310EC000477A4 /* tal.c in Sources */,
4CBB6F6A2B730EF1000477A4 /* nostrdb.c in Sources */,
4CBB6F682B72B5F0000477A4 /* NdbProfile.swift in Sources */,
4CBB6F672B72B5E8000477A4 /* NdbBlock.swift in Sources */,
@@ -6870,6 +7143,17 @@
D7CB5D402B116E8A00AD4105 /* UserSettingsStore.swift in Sources */,
D7CE1B1C2B0BE147002EDAD4 /* refmap.c in Sources */,
D74AAFC92B155CA5006CF0F4 /* UpdateStatsNotify.swift in Sources */,
4CC6AABF2CAB688500989CEF /* str.c in Sources */,
4CC6AAC02CAB688500989CEF /* tal.c in Sources */,
4CC6AAC22CAB688500989CEF /* mem.c in Sources */,
4CC6AAC32CAB688500989CEF /* sha256.c in Sources */,
4CC6AAC52CAB688500989CEF /* likely.c in Sources */,
4CC6AAC92CAB688500989CEF /* htable.c in Sources */,
4CC6AAD02CAB688500989CEF /* list.c in Sources */,
4CC6AAD12CAB688500989CEF /* utf8.c in Sources */,
4CC6AAD32CAB688500989CEF /* debug.c in Sources */,
4CC6AAD42CAB688500989CEF /* str.c in Sources */,
4CC6AAD72CAB688500989CEF /* take.c in Sources */,
D79C4C172AFEB061003A41B4 /* NotificationService.swift in Sources */,
D7CB5D522B1174D100AD4105 /* FriendFilter.swift in Sources */,
D7CE1B362B0BE702002EDAD4 /* FbConstants.swift in Sources */,
@@ -7175,6 +7459,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(PROJECT_DIR)/nostrdb",
"$(PROJECT_DIR)/nostrdb/ccan",
"$(PROJECT_DIR)/nostrdb/ccan/ccan/short_types",
"$(PROJECT_DIR)/damus-c",
);
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
MACOSX_DEPLOYMENT_TARGET = 12.3;
MARKETING_VERSION = 1.15;
@@ -7240,6 +7530,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(PROJECT_DIR)/nostrdb",
"$(PROJECT_DIR)/nostrdb/ccan",
"$(PROJECT_DIR)/nostrdb/ccan/ccan/short_types",
"$(PROJECT_DIR)/damus-c",
);
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
MACOSX_DEPLOYMENT_TARGET = 12.3;
MARKETING_VERSION = 1.15;
@@ -7289,6 +7585,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
"$(PROJECT_DIR)/nostrdb/src/bolt11",
"$(PROJECT_DIR)/nostrdb/ccan",
);
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7342,6 +7639,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
"$(PROJECT_DIR)/nostrdb/src/bolt11",
"$(PROJECT_DIR)/nostrdb/ccan",
);
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
PRODUCT_NAME = "$(TARGET_NAME)";

View File

@@ -20,45 +20,6 @@ enum NoteContent {
}
}
func parsed_blocks_finish(bs: inout note_blocks, tags: TagsSequence?) -> Blocks {
var out: [Block] = []
var i = 0
while (i < bs.num_blocks) {
let block = bs.blocks[i]
if let converted = Block(block, tags: tags) {
out.append(converted)
}
i += 1
}
let words = Int(bs.words)
blocks_free(&bs)
return Blocks(words: words, blocks: out)
}
func parse_note_content(content: NoteContent) -> Blocks {
var bs = note_blocks()
bs.num_blocks = 0;
blocks_init(&bs)
switch content {
case .content(let s, let tags):
return s.withCString { cptr in
damus_parse_content(&bs, cptr)
return parsed_blocks_finish(bs: &bs, tags: tags)
}
case .note(let note):
damus_parse_content(&bs, note.content_raw)
return parsed_blocks_finish(bs: &bs, tags: note.tags)
}
}
func interpret_event_refs(tags: TagsSequence) -> ThreadReply? {
// migration is long over, lets just do this to fix tests
return interpret_event_refs_ndb(tags: tags)

View File

@@ -27,6 +27,10 @@ extension UnsafePointer<UInt8> {
struct MentionRef: TagKeys, TagConvertible, Equatable, Hashable {
let nip19: Bech32Object
static func pubkey(_ pubkey: Pubkey) -> MentionRef {
self.init(nip19: .npub(pubkey))
}
static func note(_ note_id: NoteId) -> MentionRef {
return self.init(nip19: .note(note_id))
}
@@ -215,7 +219,7 @@ struct LightningInvoice<T> {
// avoiding code duplication and utilizing the guarantees acquired from age and testing.
// We could also use the C function `parse_invoice`, but it requires extra C bridging logic.
// NDBTODO: This may need updating on the nostrdb upgrade.
let parsedBlocks = parse_note_content(content: .content(string,nil)).blocks
guard let parsedBlocks = parse_note_content(content: .content(string,nil))?.blocks else { return nil }
guard parsedBlocks.count == 1 else { return nil }
return parsedBlocks[0].asInvoice
}
@@ -350,14 +354,3 @@ func make_post_tags(post_blocks: [Block], tags: [[String]]) -> PostTags {
return PostTags(blocks: post_blocks, tags: new_tags)
}
func post_to_event(post: NostrPost, keypair: FullKeypair) -> NostrEvent? {
let tags = post.references.map({ r in r.tag }) + post.tags
guard let post_blocks = parse_post_blocks(content: post.content)?.blocks else {
return nil
}
let post_tags = make_post_tags(post_blocks: post_blocks, tags: tags)
let content = post_tags.blocks
.map({ b in b.asString })
.joined(separator: "")
return NostrEvent(content: content, keypair: keypair.to_keypair(), kind: post.kind.rawValue, tags: post_tags.tags)
}

View File

@@ -518,6 +518,15 @@ func uniq<T: Hashable>(_ xs: [T]) -> [T] {
return ys
}
func gather_quote_ids(our_pubkey: Pubkey, from: NostrEvent) -> [RefId] {
var ids: [RefId] = [.quote(from.id.quote_id)]
if from.pubkey != our_pubkey {
ids.append(.pubkey(from.pubkey))
}
return ids
}
func gather_reply_ids(our_pubkey: Pubkey, from: NostrEvent) -> [RefId] {
var ids: [RefId] = from.referenced_ids.first.map({ ref in [ .event(ref) ] }) ?? []
@@ -538,14 +547,6 @@ func gather_reply_ids(our_pubkey: Pubkey, from: NostrEvent) -> [RefId] {
return ids
}
func gather_quote_ids(our_pubkey: Pubkey, from: NostrEvent) -> [RefId] {
var ids: [RefId] = [.quote(from.id.quote_id)]
if from.pubkey != our_pubkey {
ids.append(.pubkey(from.pubkey))
}
return ids
}
func event_from_json(dat: String) -> NostrEvent? {
return NostrEvent.owned_from_json(json: dat)
}

View File

@@ -126,12 +126,10 @@ struct DMChatView: View, KeyboardReadable {
func send_message() {
let tags = [["p", pubkey.hex()]]
let post_blocks = parse_post_blocks(content: dms.draft)?.blocks
guard let content = post_blocks?.map({ pb in pb.asString }).joined(separator: "") else {
// TODO: handle these errors somehow?
print("error creating dm")
guard let post_blocks = parse_post_blocks(content: dms.draft)?.blocks else {
return
}
let content = post_blocks.map({ pb in pb.asString }).joined(separator: "")
guard let dm = NIP04.create_dm(content, to_pk: pubkey, tags: tags, keypair: damus_state.keypair) else {
print("error creating dm")

View File

@@ -89,13 +89,13 @@ func generate_local_notification_object(ndb: Ndb, from ev: NostrEvent, state: He
return true
}) {
// This is a reply to one of our posts
let content_preview = render_notification_content_preview(ev: ev, profiles: state.profiles, keypair: state.keypair)
let content_preview = render_notification_content_preview(ndb: state.ndb, ev: ev, profiles: state.profiles, keypair: state.keypair)
return LocalNotification(type: .reply, event: ev, target: .note(ev), content: content_preview)
}
if ev.referenced_pubkeys.contains(state.keypair.pubkey) {
// not mentioned or replied to, just tagged
let content_preview = render_notification_content_preview(ev: ev, profiles: state.profiles, keypair: state.keypair)
let content_preview = render_notification_content_preview(ndb: state.ndb, ev: ev, profiles: state.profiles, keypair: state.keypair)
return LocalNotification(type: .tagged, event: ev, target: .note(ev), content: content_preview)
}

View File

@@ -38,7 +38,7 @@ struct NostrPost {
func parse_blocks() -> [Block] {
guard let content_for_parsing = self.default_content_for_block_parsing() else { return [] }
return parse_post_blocks(content: content_for_parsing)
return parse_post_blocks(content: content_for_parsing)?.blocks ?? []
}
private func default_content_for_block_parsing() -> String? {
@@ -57,28 +57,21 @@ struct NostrPost {
for post_block in post_blocks {
switch post_block {
case .mention(let mention):
switch(mention.ref) {
switch(mention.ref.nip19) {
case .note, .nevent:
continue
default:
break
}
if self.kind == .highlight, case .pubkey(_) = mention.ref {
var new_tag = mention.ref.tag
new_tag.append("mention")
new_tags.append(new_tag)
}
else {
new_tags.append(mention.ref.tag)
}
case .hashtag(let hashtag):
new_tags.append(["t", hashtag.lowercased()])
case .text: break
case .invoice: break
case .relay: break
case .url(let url):
new_tags.append(self.kind == .highlight ? ["r", url.absoluteString, "mention"] : ["r", url.absoluteString])
new_tags.append(["r", url.absoluteString])
break
}
}
@@ -97,6 +90,17 @@ extension NostrPost {
}
}
/// This should only be used in tests, we don't use this anymore directly
func parse_note_content(content: NoteContent) -> Blocks?
{
switch content {
case .note(let note):
return parse_post_blocks(content: note.content)
case .content(let content, _):
return parse_post_blocks(content: content)
}
}
/// Return a list of tags
func parse_post_blocks(content: String) -> Blocks? {
let buf_size = 16000

View File

@@ -434,7 +434,7 @@ func decode_bolt11(_ s: String) -> Invoice? {
var bolt11_ptr: UnsafeMutablePointer<bolt11>?
let _ = bytes.withUnsafeBufferPointer { p in
bolt11_ptr = bolt11_decode(nil, p.baseAddress, nil)
bolt11_ptr = bolt11_decode_minimal(nil, p.baseAddress, nil)
}
guard let bolt11 = maybe_pointee(bolt11_ptr) else {

View File

@@ -116,7 +116,23 @@ func interp_event_refs_with_mentions(tags: Tags) -> [EventRef] {
return replies
}
func interpret_event_refs(blocks: BlocksSequence, tags: Tags) -> [EventRef] {
func interpret_event_refs(tags: Tags) -> [EventRef] {
if tags.count == 0 {
return []
}
/// build a set of indices for each event mention
//let mention_indices = build_mention_indices(blocks, type: .e)
/// simpler case with no mentions
//if mention_indices.count == 0 {
//return interp_event_refs_without_mentions_ndb(References<NoteRef>(tags: tags))
//}
return interp_event_refs_with_mentions(tags: tags)
}
func ndb_interpret_event_refs(tags: Tags) -> [EventRef] {
if tags.count == 0 {
return []
}

View File

@@ -16,7 +16,7 @@ class Bech32ObjectTests: XCTestCase {
func testTLVParsing_NeventHasRelaysNoAuthorNoKind_ValidContent() throws {
let content = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5nxnepm"
let expectedNoteIDHex = "b9f5441e45ca39179320e0031cfb18e34078673dcc3d3e3a3b3a981760aa5696"
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"]
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init)
guard let noteid = hex_decode_noteid(expectedNoteIDHex) else {
XCTFail("Parsing note ID failed")
return
@@ -34,7 +34,7 @@ class Bech32ObjectTests: XCTestCase {
func testTLVParsing_NeventHasRelaysNoAuthorHasKind_ValidContent() throws {
let content = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qvzqqqqqqyjyqz7d"
let expectedNoteIDHex = "b9f5441e45ca39179320e0031cfb18e34078673dcc3d3e3a3b3a981760aa5696"
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"]
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init)
guard let noteid = hex_decode_noteid(expectedNoteIDHex) else {
XCTFail("Parsing note ID failed")
return
@@ -53,7 +53,7 @@ class Bech32ObjectTests: XCTestCase {
let content = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qgsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8grqsqqqqqpw4032x"
let expectedNoteIDHex = "b9f5441e45ca39179320e0031cfb18e34078673dcc3d3e3a3b3a981760aa5696"
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"]
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init)
guard let noteid = hex_decode_noteid(expectedNoteIDHex) else {
XCTFail("Parsing note ID failed")
return
@@ -78,7 +78,7 @@ class Bech32ObjectTests: XCTestCase {
XCTFail()
return
}
let relays = ["wss://r.x.com", "wss://djbas.sadkb.com"]
let relays = ["wss://r.x.com", "wss://djbas.sadkb.com"].compactMap(RelayURL.init)
let expectedObject = Bech32Object.nprofile(NProfile(author: Pubkey(author.data), relays: relays))
guard let actualObject = Bech32Object.parse(content) else {
@@ -106,7 +106,7 @@ class Bech32ObjectTests: XCTestCase {
XCTFail("Can't decode npub")
return
}
let relays = ["wss://relay.nostr.band"]
let relays = ["wss://relay.nostr.band"].compactMap(RelayURL.init)
let identifier = "1700730909108"
let kind: UInt32 = 30023
@@ -122,7 +122,7 @@ class Bech32ObjectTests: XCTestCase {
return
}
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"]
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init)
let expectedEncoding = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5nxnepm"
@@ -140,7 +140,7 @@ class Bech32ObjectTests: XCTestCase {
let relays = [
"wss://nostr-relay.untethr.me",
"wss://nostr-pub.wellorder.net"
]
].compactMap(RelayURL.init)
let expectedEncoding = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qvzqqqqqqyjyqz7d"
@@ -159,7 +159,7 @@ class Bech32ObjectTests: XCTestCase {
return
}
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"]
let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init)
let expectedEncoding = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qgsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8grqsqqqqqpw4032x"
@@ -194,7 +194,7 @@ class Bech32ObjectTests: XCTestCase {
let relays = [
"wss://r.x.com",
"wss://djbas.sadkb.com"
]
].compactMap(RelayURL.init)
let expectedEncoding = "nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p"
@@ -219,7 +219,7 @@ class Bech32ObjectTests: XCTestCase {
return
}
let relays = ["wss://relay.nostr.band"]
let relays = ["wss://relay.nostr.band"].compactMap(RelayURL.init)
let identifier = "1700730909108"
let kind: UInt32 = 30023

View File

@@ -9,12 +9,13 @@
import XCTest
@testable import damus
final class HashtagTests: XCTestCase {
// Basic hashtag tests
func testParseHashtag() {
let parsed = parse_note_content(content: .content("some hashtag #bitcoin derp",nil)).blocks
let parsed = parse_note_content(content: .content("some hashtag #bitcoin derp",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -24,7 +25,7 @@ final class HashtagTests: XCTestCase {
}
func testParseHashtagEnd() {
let parsed = parse_note_content(content: .content("some hashtag #bitcoin",nil)).blocks
let parsed = parse_note_content(content: .content("some hashtag #bitcoin",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 2)
@@ -40,7 +41,7 @@ final class HashtagTests: XCTestCase {
// Underscores are allowed in hashtags
func testHashtagWithUnderscore() {
let parsed = parse_note_content(content: .content("the #under_score is allowed in hashtags",nil)).blocks
let parsed = parse_note_content(content: .content("the #under_score is allowed in hashtags",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -52,7 +53,7 @@ final class HashtagTests: XCTestCase {
// Test ASCII punctuation (not allowed in hashtags)
func testHashtagWithComma() {
let parsed = parse_note_content(content: .content("the #comma, is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #comma, is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -62,7 +63,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithPeriod() {
let parsed = parse_note_content(content: .content("the #period. is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #period. is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -72,7 +73,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithQuestionMark() {
let parsed = parse_note_content(content: .content("the #question?mark is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #question?mark is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -82,7 +83,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithGraveAccent() {
let parsed = parse_note_content(content: .content("the #grave`accent is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #grave`accent is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -92,7 +93,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithTilde() {
let parsed = parse_note_content(content: .content("the #tilde~ is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #tilde~ is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -102,7 +103,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithExclamationPoint() {
let parsed = parse_note_content(content: .content("the #exclamation!point is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #exclamation!point is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -112,7 +113,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithAtSign() {
let parsed = parse_note_content(content: .content("the #at@sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #at@sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -122,7 +123,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithDollarSign() {
let parsed = parse_note_content(content: .content("the #dollar$sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #dollar$sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -132,7 +133,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithPercentSign() {
let parsed = parse_note_content(content: .content("the #percent%sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #percent%sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -142,7 +143,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithCaret() {
let parsed = parse_note_content(content: .content("the #caret^ is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #caret^ is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -152,7 +153,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithAmpersand() {
let parsed = parse_note_content(content: .content("the #ampersand& is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #ampersand& is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -162,7 +163,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithAsterisk() {
let parsed = parse_note_content(content: .content("the #asterisk* is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #asterisk* is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -172,7 +173,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithLeftParenthesis() {
let parsed = parse_note_content(content: .content("the #left(parenthesis is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #left(parenthesis is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -182,7 +183,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithRightParenthesis() {
let parsed = parse_note_content(content: .content("the #right)parenthesis is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #right)parenthesis is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -192,7 +193,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithDash() {
let parsed = parse_note_content(content: .content("the #dash- is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #dash- is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -202,7 +203,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithPlusSign() {
let parsed = parse_note_content(content: .content("the #plus+sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #plus+sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -212,7 +213,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithEqualsSign() {
let parsed = parse_note_content(content: .content("the #equals=sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #equals=sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -222,7 +223,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithLeftBracket() {
let parsed = parse_note_content(content: .content("the #left[bracket is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #left[bracket is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -232,7 +233,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithRightBracket() {
let parsed = parse_note_content(content: .content("the #right]bracket is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #right]bracket is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -242,7 +243,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithLeftBrace() {
let parsed = parse_note_content(content: .content("the #left{brace is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #left{brace is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -252,7 +253,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithRightBrace() {
let parsed = parse_note_content(content: .content("the #right}brace is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #right}brace is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -262,7 +263,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithBackslash() {
let parsed = parse_note_content(content: .content("the #back\\slash is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #back\\slash is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -272,7 +273,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithVerticalLine() {
let parsed = parse_note_content(content: .content("the #vertical|line is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #vertical|line is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -282,7 +283,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithSemicolon() {
let parsed = parse_note_content(content: .content("the #semicolon; is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #semicolon; is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -292,7 +293,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithColon() {
let parsed = parse_note_content(content: .content("the #colon: is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #colon: is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -302,7 +303,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithApostrophe() {
let parsed = parse_note_content(content: .content("the #apostrophe' is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #apostrophe' is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -312,7 +313,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithQuotationMark() {
let parsed = parse_note_content(content: .content("the #quotation\"mark is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #quotation\"mark is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -322,7 +323,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithLessThanSign() {
let parsed = parse_note_content(content: .content("the #lessthan<sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #lessthan<sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -332,7 +333,7 @@ final class HashtagTests: XCTestCase {
}
func testHashtagWithGreaterThanSign() {
let parsed = parse_note_content(content: .content("the #greaterthan>sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #greaterthan>sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -349,7 +350,7 @@ final class HashtagTests: XCTestCase {
// Test pound sign (£) (U+00A3)
func testHashtagWithPoundSign() {
let parsed = parse_note_content(content: .content("the #pound£sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #pound£sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -360,7 +361,7 @@ final class HashtagTests: XCTestCase {
// Test yen sign (¥) (U+00A5)
func testHashtagWithYenSign() {
let parsed = parse_note_content(content: .content("the #yen¥sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #yen¥sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -371,7 +372,7 @@ final class HashtagTests: XCTestCase {
// Test section sign (§) (U+00A7)
func testHashtagWithSectionSign() {
let parsed = parse_note_content(content: .content("the #section§sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #section§sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -382,7 +383,7 @@ final class HashtagTests: XCTestCase {
// Test plus-minus sign (±) (U+00B1)
func testHashtagWithPlusMinusSign() {
let parsed = parse_note_content(content: .content("the #plusminus±sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #plusminus±sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -393,7 +394,7 @@ final class HashtagTests: XCTestCase {
// Test inverted question mark (¿) (U+00BF)
func testHashtagWithInvertedQuestionMark() {
let parsed = parse_note_content(content: .content("the #invertedquestion¿mark is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #invertedquestion¿mark is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -406,7 +407,7 @@ final class HashtagTests: XCTestCase {
// Test Latin small letter u with diaeresis (ü) (U+00FC) (allowed in hashtags)
func testHashtagWithAccents() {
let parsed = parse_note_content(content: .content("hello from #türkiye",nil)).blocks
let parsed = parse_note_content(content: .content("hello from #türkiye",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 2)
@@ -418,7 +419,7 @@ final class HashtagTests: XCTestCase {
// Test en dash () (U+2013)
func testHashtagWithEnDash() {
let parsed = parse_note_content(content: .content("the #endash is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #endash is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -429,7 +430,7 @@ final class HashtagTests: XCTestCase {
// Test em dash () (U+2014)
func testHashtagWithEmDash() {
let parsed = parse_note_content(content: .content("the #em—dash is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #em—dash is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -440,7 +441,7 @@ final class HashtagTests: XCTestCase {
// Test horizontal bar () (U+2015)
func testHashtagWithHorizontalBar() {
let parsed = parse_note_content(content: .content("the #horizontal―bar is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #horizontal―bar is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -451,7 +452,7 @@ final class HashtagTests: XCTestCase {
// Test horizontal ellipsis () (U+2026)
func testHashtagWithHorizontalEllipsis() {
let parsed = parse_note_content(content: .content("the #horizontal…ellipsis is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #horizontal…ellipsis is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -464,7 +465,7 @@ final class HashtagTests: XCTestCase {
// Test euro sign () (U+20AC)
func testHashtagWithEuroSign() {
let parsed = parse_note_content(content: .content("the #euro€sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #euro€sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -475,7 +476,7 @@ final class HashtagTests: XCTestCase {
// Test Bitcoin sign () (U+20BF)
func testHashtagWithBitcoinSign() {
let parsed = parse_note_content(content: .content("the #bitcoin₿sign is not allowed",nil)).blocks
let parsed = parse_note_content(content: .content("the #bitcoin₿sign is not allowed",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -489,8 +490,8 @@ final class HashtagTests: XCTestCase {
// Emojis such as (U+2615) are allowed in hashtags
func testHashtagWithEmoji() {
let content = "some hashtag #bitcoin☕ cool"
let parsed = parse_note_content(content: .content(content, nil)).blocks
let post_blocks = parse_post_blocks(content: content)
let parsed = parse_note_content(content: .content(content, nil))!.blocks
let post_blocks = parse_post_blocks(content: content)!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -509,8 +510,8 @@ final class HashtagTests: XCTestCase {
// Japanese: wave dash () (U+301C) (allowed in hashtags)
func testPowHashtag() {
let content = "pow! #ぽわ〜"
let parsed = parse_note_content(content: .content(content,nil)).blocks
let post_blocks = parse_post_blocks(content: content)
let parsed = parse_note_content(content: .content(content,nil))!.blocks
let post_blocks = parse_post_blocks(content: content)!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 2)
@@ -525,7 +526,7 @@ final class HashtagTests: XCTestCase {
// Hangul: Hangul Syllable Si () (U+C2DC) and
// Hangul Syllable Heom () (U+D5D8) (allowed in hashtags)
func testHashtagWithNonLatinCharacters() {
let parsed = parse_note_content(content: .content("this is a #시험 hope it works",nil)).blocks
let parsed = parse_note_content(content: .content("this is a #시험 hope it works",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -536,7 +537,7 @@ final class HashtagTests: XCTestCase {
// Japanese: fullwidth tilde () (U+FF5E) (allowed in hashtags)
func testHashtagWithFullwidthTilde() {
let parsed = parse_note_content(content: .content("pow! the fullwidth tilde #ぽわ~ is allowed in hashtags",nil)).blocks
let parsed = parse_note_content(content: .content("pow! the fullwidth tilde #ぽわ~ is allowed in hashtags",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -547,7 +548,7 @@ final class HashtagTests: XCTestCase {
// Japanese: bai () (U+500D) (allowed in hashtags)
func testHashtagWithBaiKanji() {
let parsed = parse_note_content(content: .content("pow! #10倍界王拳 is allowed in hashtags",nil)).blocks
let parsed = parse_note_content(content: .content("pow! #10倍界王拳 is allowed in hashtags",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)

View File

@@ -21,7 +21,7 @@ final class InvoiceTests: XCTestCase {
func testParseAnyAmountInvoice() throws {
let invstr = "LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C"
let parsed = parse_note_content(content: .content(invstr,nil)).blocks
let parsed = parse_note_content(content: .content(invstr,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)
@@ -40,7 +40,7 @@ final class InvoiceTests: XCTestCase {
let invstr = """
LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C hi there
"""
let parsed = parse_note_content(content: .content(invstr,nil)).blocks
let parsed = parse_note_content(content: .content(invstr,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 2)
@@ -57,7 +57,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
func testParseInvoiceUpper() throws {
let invstr = "LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R"
let parsed = parse_note_content(content: .content(invstr,nil)).blocks
let parsed = parse_note_content(content: .content(invstr,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)
@@ -74,7 +74,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
func testParseInvoiceWithPrefix() throws {
let invstr = "lightning:lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r"
let parsed = parse_note_content(content: .content(invstr,nil)).blocks
let parsed = parse_note_content(content: .content(invstr,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)
@@ -83,7 +83,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
func testParseInvoiceWithPrefixCapitalized() throws {
let invstr = "LIGHTNING:LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R"
let parsed = parse_note_content(content: .content(invstr,nil)).blocks
let parsed = parse_note_content(content: .content(invstr,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)
@@ -92,7 +92,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
func testParseInvoice() throws {
let invstr = "lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r"
let parsed = parse_note_content(content: .content(invstr,nil)).blocks
let parsed = parse_note_content(content: .content(invstr,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)

View File

@@ -24,7 +24,7 @@ class ContentParserTests: XCTestCase {
let url = "https://media.tenor.com/5MibLt95scAAAAAC/%ED%98%BC%ED%8C%8C%EB%A7%9D-%ED%94%BC%EC%9E%90.gif"
let content = "gm 🤙\(url)"
let blocks = parse_note_content(content: .content(content,nil)).blocks
let blocks = parse_note_content(content: .content(content,nil))!.blocks
XCTAssertEqual(blocks.count, 2)
XCTAssertEqual(blocks[0], .text("gm 🤙"))
XCTAssertEqual(blocks[1], .url(URL(string: url)!))

View File

@@ -29,22 +29,22 @@ final class NIP19Tests: XCTestCase {
*/
func test_parse_npub() throws {
let res = parse_note_content(content: .content("nostr:npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg ",nil)).blocks
let res = parse_note_content(content: .content("nostr:npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg ",nil))!.blocks
XCTAssertEqual(res.count, 2)
let expected_ref = Pubkey(hex: "7e7e9c42a91bfef19fa929e5fda1b72e0ebc1a4c1141673e2794234d86addf4e")!
let expected_mention: Mention<MentionRef> = Mention(index: nil, ref: .pubkey(expected_ref))
let expected_mention: Mention<MentionRef> = .any(.init(bech32_str: "npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg")!)
XCTAssertEqual(res[0], .mention(expected_mention))
}
func test_parse_note() throws {
let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep",nil)).blocks
let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep",nil))!.blocks
XCTAssertEqual(res.count, 2)
let note_id = NoteId(hex:"8543e7d0bafb28f33c495f2198454bd62c7369c86d72d77704cad2674e0a92c9")!
XCTAssertEqual(res[1], .mention(.any(.note(note_id))))
}
func test_mention_with_adjacent() throws {
let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep?",nil)).blocks
let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep?",nil))!.blocks
XCTAssertEqual(res.count, 3)
let note_id = NoteId(hex: "8543e7d0bafb28f33c495f2198454bd62c7369c86d72d77704cad2674e0a92c9")!
XCTAssertEqual(res[0], .text(" "))

View File

@@ -10,14 +10,15 @@ import SwiftUI
@testable import damus
class NoteContentViewTests: XCTestCase {
func testRenderBlocksWithNonLatinHashtags() throws {
/*
func testRenderBlocksWithNonLatinHashtags() {
let content = "Damus #cool #"
let note = try XCTUnwrap(NostrEvent(content: content, keypair: test_keypair, tags: [["t", ""]]))
let parsed: Blocks = parse_note_content(content: .init(note: note, keypair: test_keypair))
let testState = test_damus_state
let text: NoteArtifactsSeparated = render_blocks(blocks: parsed, profiles: testState.profiles, can_hide_last_previewable_refs: true)
let text: NoteArtifactsSeparated = render_blocks(blocks: parsed, profiles: testState.profiles, note: note, can_hide_last_previewable_refs: true)
let attributedText: AttributedString = text.content.attributed
let runs: AttributedString.Runs = attributedText.runs
@@ -329,13 +330,14 @@ class NoteContentViewTests: XCTestCase {
XCTAssertEqual(noteArtifactsSeparated.invoices.count, 1)
XCTAssertEqual(noteArtifactsSeparated.invoices[0].string, invoiceString)
}
*/
/// Based on https://github.com/damus-io/damus/issues/1468
/// Tests whether a note content view correctly parses an image block when url in JSON content contains optional escaped slashes
func testParseImageBlockInContentWithEscapedSlashes() throws {
let testJSONWithEscapedSlashes = "{\"tags\":[],\"pubkey\":\"f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9\",\"content\":\"https:\\/\\/cdn.nostr.build\\/i\\/5c1d3296f66c2630131bf123106486aeaf051ed8466031c0e0532d70b33cddb2.jpg\",\"created_at\":1691864981,\"kind\":1,\"sig\":\"fc0033aa3d4df50b692a5b346fa816fdded698de2045e36e0642a021391468c44ca69c2471adc7e92088131872d4aaa1e90ea6e1ad97f3cc748f4aed96dfae18\",\"id\":\"e8f6eca3b161abba034dac9a02bb6930ecde9fd2fb5d6c5f22a05526e11382cb\"}"
let testNote = try XCTUnwrap(NostrEvent.owned_from_json(json: testJSONWithEscapedSlashes))
let parsed = parse_note_content(content: .init(note: testNote, keypair: test_keypair))
let testNote = NostrEvent.owned_from_json(json: testJSONWithEscapedSlashes)!
let parsed = parse_note_content(content: .init(note: testNote, keypair: test_keypair))!
XCTAssertTrue((parsed.blocks[0].asURL != nil), "NoteContentView does not correctly parse an image block when url in JSON content contains optional escaped slashes.")
}

View File

@@ -20,7 +20,7 @@ class ReplyTests: XCTestCase {
func testAtAtEnd() {
let content = "what @"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 1)
XCTAssertEqual(blocks[0].asText, "what @")
@@ -28,7 +28,7 @@ class ReplyTests: XCTestCase {
func testHashtagsInQuote() {
let content = "This is my \"#awesome post\""
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 3)
XCTAssertEqual(blocks[0].asText, "This is my \"")
@@ -38,25 +38,46 @@ class ReplyTests: XCTestCase {
func testHashtagAtStartWorks() {
let content = "#hashtag"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 1)
XCTAssertEqual(blocks[0].asHashtag, "hashtag")
}
func testGroupOfHashtags() {
let content = "#hashtag#what#nope"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 3)
XCTAssertEqual(blocks[0].asHashtag, "hashtag")
XCTAssertEqual(blocks[1].asHashtag, "what")
XCTAssertEqual(blocks[2].asHashtag, "nope")
}
<<<<<<< HEAD
=======
func testRootReplyWithMention() throws {
let content = "this is #[1] a mention"
let thread_id = NoteId(hex: "c75e5cbafbefd5de2275f831c2a2386ea05ec5e5a78a5ccf60d467582db48945")!
let mentioned_id = NoteId(hex: "5a534797e8cd3b9f4c1cf63e20e48bd0e8bd7f8c4d6353fbd576df000f6f54d3")!
let tags = [thread_id.tag, mentioned_id.tag]
let ev = NostrEvent(content: content, keypair: test_keypair, tags: tags)!
let event_refs = interpret_event_refs(tags: ev.tags)
XCTAssertEqual(event_refs.count, 2)
XCTAssertNotNil(event_refs[0].is_reply)
XCTAssertNotNil(event_refs[0].is_thread_id)
XCTAssertNotNil(event_refs[0].is_reply)
XCTAssertNotNil(event_refs[0].is_direct_reply)
XCTAssertEqual(event_refs[0].is_reply, .some(NoteRef(note_id: thread_id)))
XCTAssertEqual(event_refs[0].is_thread_id, .some(NoteRef(note_id: thread_id)))
XCTAssertNotNil(event_refs[1].is_mention)
XCTAssertEqual(event_refs[1].is_mention, .some(NoteRef(note_id: mentioned_id)))
}
func testEmptyMention() throws {
let content = "this is some & content"
let ev = NostrEvent(content: content, keypair: test_keypair, tags: [])!
let blocks = parse_note_content(content: .init(note: ev, keypair: test_keypair)).blocks
let post_blocks = parse_post_blocks(content: content)
let post_blocks = parse_post_blocks(content: content)!.blocks
let post = NostrPost(content: content, kind: NostrKind.text, tags: [])
let post_tags = post.make_post_tags(post_blocks: post_blocks, tags: [])
let tr = interpret_event_refs(tags: ev.tags)
@@ -82,7 +103,7 @@ class ReplyTests: XCTestCase {
let expected_render = "nostr:\(pk.npub)\nnostr:\(pk.npub)"
XCTAssertEqual(post_note.content, expected_render)
let blocks = parse_note_content(content: .content(post_note.content,nil)).blocks
let blocks = parse_note_content(content: .content(post_note.content,nil))!.blocks
let rendered = blocks.map { $0.asString }.joined(separator: "")
XCTAssertEqual(rendered, expected_render)
@@ -210,14 +231,14 @@ class ReplyTests: XCTestCase {
}
func testEmptyPostReference() throws {
let parsed = parse_post_blocks(content: "")
let parsed = parse_post_blocks(content: "")!.blocks
XCTAssertEqual(parsed.count, 0)
}
func testBech32MentionAtStart() throws {
let pk = Pubkey(hex: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245")!
let content = "@\(pk.npub) hello there"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 2)
XCTAssertEqual(blocks[0].asMention, .any(.pubkey(pk)))
@@ -228,7 +249,7 @@ class ReplyTests: XCTestCase {
func testBech32MentionAtEnd() throws {
let pk = Pubkey(hex: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245")!
let content = "this is a @\(pk.npub)"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 2)
XCTAssertEqual(blocks[1].asMention, .any(.pubkey(pk)))
@@ -239,8 +260,8 @@ class ReplyTests: XCTestCase {
let evid = NoteId(hex: "71ba3e5ddaf48103be294aa370e470fb60b6c8bca3fb01706eecd00054c2f588")!
let pk = Pubkey(hex: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245")!
let content = "this is a @\(pk.npub) mention"
let blocks = parse_post_blocks(content: content)
let post = NostrPost(content: content, tags: [["e", evid.hex()]])
let blocks = parse_post_blocks(content: content)!.blocks
let post = NostrPost(content: content, references: [.event(evid)])
let ev = post.to_event(keypair: test_keypair_full)!
XCTAssertEqual(ev.tags.count, 2)
@@ -254,8 +275,8 @@ class ReplyTests: XCTestCase {
let pk = Pubkey(hex: "ccf95d668650178defca5ac503693b6668eb77895f610178ff8ed9fe5cf9482e")!
let nsec = "nsec1jmzdz7d0ldqctdxwm5fzue277ttng2pk28n2u8wntc2r4a0w96ssnyukg7"
let content = "this is a @\(nsec) mention"
let blocks = parse_post_blocks(content: content)
let post = NostrPost(content: content, tags: [["e", evid.hex()]])
let blocks = parse_post_blocks(content: content)!.blocks
let post = NostrPost(content: content, references: [.event(evid)])
let ev = post.to_event(keypair: test_keypair_full)!
XCTAssertEqual(ev.tags.count, 2)
@@ -285,7 +306,7 @@ class ReplyTests: XCTestCase {
func testInvalidPostReference() throws {
let pk = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e24"
let content = "this is a @\(pk) mention"
let parsed = parse_post_blocks(content: content)
let parsed = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(parsed.count, 1)
guard case .text(let txt) = parsed[0] else {
XCTAssert(false)
@@ -296,7 +317,7 @@ class ReplyTests: XCTestCase {
func testInvalidPostReferenceEmptyAt() throws {
let content = "this is a @ mention"
let parsed = parse_post_blocks(content: content)
let parsed = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(parsed.count, 1)
guard case .text(let txt) = parsed[0] else {
XCTAssert(false)
@@ -308,7 +329,7 @@ class ReplyTests: XCTestCase {
func testInvalidUriReference() throws {
let id = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de"
let content = "this is a nostr:z:\(id) event mention"
let parsed = parse_post_blocks(content: content)
let parsed = parse_post_blocks(content: content)!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)
@@ -323,7 +344,7 @@ class ReplyTests: XCTestCase {
func testParsePostUriPubkeyReference() throws {
let id = Pubkey(hex: "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de")!
let parsed = parse_post_blocks(content: "this is a nostr:\(id.npub) event mention")
let parsed = parse_post_blocks(content: "this is a nostr:\(id.npub) event mention")!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -346,7 +367,7 @@ class ReplyTests: XCTestCase {
func testParsePostUriReference() throws {
let id = NoteId(hex: "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de")!
let parsed = parse_post_blocks(content: "this is a nostr:\(id.bech32) event mention")
let parsed = parse_post_blocks(content: "this is a nostr:\(id.bech32) event mention")!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -366,5 +387,4 @@ class ReplyTests: XCTestCase {
}
XCTAssertEqual(t2, " event mention")
}
}

View File

@@ -42,7 +42,7 @@ final class UrlTests: XCTestCase {
let testString = "https://en.m.wikipedia.org/wiki/Delicious_(website)"
let parsed = parse_note_content(content: .content(testString, nil)).blocks
let parsed = parse_note_content(content: .content(testString, nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed[0].asURL, testURL)
@@ -53,7 +53,7 @@ final class UrlTests: XCTestCase {
XCTAssertNotNil(testURL)
let testString = "( https://en.m.wikipedia.org/wiki/Delicious_(website)"
let parsed = parse_note_content(content: .content(testString, nil)).blocks
let parsed = parse_note_content(content: .content(testString, nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed[1].asURL, testURL)
@@ -64,7 +64,7 @@ final class UrlTests: XCTestCase {
XCTAssertNotNil(testURL)
let testString = "(https://jb55.com)"
let parsed = parse_note_content(content: .content(testString, nil)).blocks
let parsed = parse_note_content(content: .content(testString, nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed[1].asURL, testURL)
@@ -75,7 +75,7 @@ final class UrlTests: XCTestCase {
XCTAssertNotNil(testURL)
let testString = "(https://nostr-con.com/simplex)"
let parsed = parse_note_content(content: .content(testString, nil)).blocks
let parsed = parse_note_content(content: .content(testString, nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed[1].asURL, testURL)
@@ -87,7 +87,7 @@ final class UrlTests: XCTestCase {
XCTAssertNotNil(testURL)
let content = "my \(link) link"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 3)
XCTAssertEqual(blocks[0].asText, "my ")
@@ -99,7 +99,7 @@ final class UrlTests: XCTestCase {
let testURL = URL(string: "HTTPS://jb55.COM")
XCTAssertNotNil(testURL)
let parsed = parse_note_content(content: .content("a HTTPS://jb55.COM b", nil)).blocks
let parsed = parse_note_content(content: .content("a HTTPS://jb55.COM b", nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -111,7 +111,7 @@ final class UrlTests: XCTestCase {
XCTAssertNotNil(testURL)
let content = "this is my link: https://jb55.com/index.html#buybitcoin this is not a hashtag!"
let blocks = parse_post_blocks(content: content)
let blocks = parse_post_blocks(content: content)!.blocks
XCTAssertEqual(blocks.count, 3)
XCTAssertEqual(blocks[0].asText, "this is my link: ")
@@ -206,7 +206,7 @@ final class UrlTests: XCTestCase {
}
func testParseURL(inputURLString: String, expectedURLs: String...) {
let parsedURL: [Block] = parse_note_content(content: .content(inputURLString, nil)).blocks.filter {
let parsedURL: [Block] = parse_note_content(content: .content(inputURLString, nil))!.blocks.filter {
$0.isURL
}

View File

@@ -66,7 +66,7 @@ class damusTests: XCTestCase {
[my website](https://jb55.com)
"""
let parsed = parse_note_content(content: .content(md, nil)).blocks
let parsed = parse_note_content(content: .content(md, nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -121,7 +121,7 @@ class damusTests: XCTestCase {
}
func testParseUrl() {
let parsed = parse_note_content(content: .content("a https://jb55.com b", nil)).blocks
let parsed = parse_note_content(content: .content("a https://jb55.com b", nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 3)
@@ -133,7 +133,7 @@ class damusTests: XCTestCase {
}
func testParseUrlEnd() {
let parsed = parse_note_content(content: .content("a https://jb55.com", nil)).blocks
let parsed = parse_note_content(content: .content("a https://jb55.com", nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 2)
@@ -147,7 +147,7 @@ class damusTests: XCTestCase {
}
func testParseUrlStart() {
let parsed = parse_note_content(content: .content("https://jb55.com br",nil)).blocks
let parsed = parse_note_content(content: .content("https://jb55.com br",nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 2)
@@ -162,7 +162,7 @@ class damusTests: XCTestCase {
func testNoParseUrlWithOnlyWhitespace() {
let testString = "https:// "
let parsed = parse_note_content(content: .content(testString,nil)).blocks
let parsed = parse_note_content(content: .content(testString,nil))!.blocks
XCTAssertNotNil(parsed)
XCTAssertFalse(parsed[0].isURL)
@@ -171,7 +171,7 @@ class damusTests: XCTestCase {
func testNoParseUrlTrailingCharacters() {
let testString = "https://foo.bar, "
let parsed = parse_note_content(content: .content(testString,nil)).blocks
let parsed = parse_note_content(content: .content(testString,nil))!.blocks
let testURL = URL(string: "https://foo.bar")
XCTAssertNotNil(testURL)
@@ -207,7 +207,7 @@ class damusTests: XCTestCase {
func testParseMentionOnlyText() {
let tags = [["e", "event_id"]]
let ev = NostrEvent(content: "there is no mention here", keypair: test_keypair, tags: tags)!
let parsed = parse_note_content(content: .init(note: ev, keypair: test_keypair)).blocks
let parsed = parse_note_content(content: .init(note: ev, keypair: test_keypair))!.blocks
XCTAssertNotNil(parsed)
XCTAssertEqual(parsed.count, 1)

View File

@@ -111,7 +111,8 @@ class Ndb {
var ok = false
while !ok && mapsize > 1024 * 1024 * 700 {
var cfg = ndb_config(flags: 0, ingester_threads: ingest_threads, mapsize: mapsize, filter_context: nil, ingest_filter: nil, sub_cb_ctx: nil, sub_cb: nil)
ok = ndb_init(&ndb_p, testdir, &cfg) != 0
let res = ndb_init(&ndb_p, testdir, &cfg);
let ok = res != 0;
if !ok {
Log.error("ndb_init failed: %d, reducing mapsize from %d to %d", for: .storage, res, mapsize, mapsize / 2)
mapsize /= 2

View File

@@ -8,50 +8,4 @@
#ifndef block_h
#define block_h
#include "nostr_bech32.h"
#include "str_block.h"
#define MAX_BLOCKS 1024
enum block_type {
BLOCK_HASHTAG = 1,
BLOCK_TEXT = 2,
BLOCK_MENTION_INDEX = 3,
BLOCK_MENTION_BECH32 = 4,
BLOCK_URL = 5,
BLOCK_INVOICE = 6,
};
typedef struct invoice_block {
struct str_block invstr;
union {
struct bolt11 *bolt11;
};
} invoice_block_t;
typedef struct mention_bech32_block {
struct str_block str;
struct nostr_bech32 bech32;
} mention_bech32_block_t;
typedef struct note_block {
enum block_type type;
union {
struct str_block str;
struct invoice_block invoice;
struct mention_bech32_block mention_bech32;
int mention_index;
} block;
} block_t;
typedef struct note_blocks {
int words;
int num_blocks;
struct note_block *blocks;
} blocks_t;
void blocks_init(struct note_blocks *blocks);
void blocks_free(struct note_blocks *blocks);
#endif /* block_h */

View File

@@ -162,7 +162,7 @@ static void Transform(uint32_t *s, const uint32_t *chunk)
s[2] += c;
s[3] += d;
s[4] += e;
s[5] nostrdb: += f;
s[5] += f;
s[6] += g;
s[7] += h;
}

View File

@@ -8,9 +8,4 @@
#ifndef str_block_h
#define str_block_h
typedef struct str_block {
const char *start;
const char *end;
} str_block_t;
#endif /* str_block_h */