damus

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

commit 249e765642a39ad6efb889063e5ecc7cfc77f2d5
parent 712624f51525e2f7f2bb632877c005b61e9b5300
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 25 Jan 2024 14:43:25 -0800

c: re-add damus-only C stuff

Diffstat:
Adamus-c/damus-Bridging-Header.h | 12++++++++++++
Rnostrdb/wasm.c -> damus-c/wasm.c | 0
Rnostrdb/wasm.h -> damus-c/wasm.h | 0
Mdamus.xcodeproj/project.pbxproj | 526++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Dnostrdb/damus-Bridging-Header.h | 13-------------
Dnostrdb/damus.c | 393-------------------------------------------------------------------------------
Dnostrdb/damus.h | 18------------------
7 files changed, 308 insertions(+), 654 deletions(-)

diff --git a/damus-c/damus-Bridging-Header.h b/damus-c/damus-Bridging-Header.h @@ -0,0 +1,12 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#include "bolt11.h" +#include "amount.h" +#include "nostr_bech32.h" +#include "wasm.h" +#include "nostrscript.h" +#include "nostrdb.h" +#include "lmdb.h" + diff --git a/nostrdb/wasm.c b/damus-c/wasm.c diff --git a/nostrdb/wasm.h b/damus-c/wasm.h diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj @@ -69,8 +69,6 @@ 4C06670128FC7C5900038D2A /* RelayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670028FC7C5900038D2A /* RelayView.swift */; }; 4C06670428FC7EC500038D2A /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 4C06670328FC7EC500038D2A /* Kingfisher */; }; 4C06670628FCB08600038D2A /* ImageCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670528FCB08600038D2A /* ImageCarousel.swift */; }; - 4C06670B28FDE64700038D2A /* damus.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670A28FDE64700038D2A /* damus.c */; }; - 4C06670E28FDEAA000038D2A /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670D28FDEAA000038D2A /* utf8.c */; }; 4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F8E280F640A000448DE /* ThreadModel.swift */; }; 4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F92280F66F5000448DE /* ReplyMap.swift */; }; 4C0C03992A61E27B0098B3B8 /* primal.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 4C0C03972A61E27B0098B3B8 /* primal.wasm */; }; @@ -134,7 +132,6 @@ 4C30AC7829A577AB00E2BD5A /* EventCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7729A577AB00E2BD5A /* EventCache.swift */; }; 4C30AC8029A6A53F00E2BD5A /* ProfilePicturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7F29A6A53F00E2BD5A /* ProfilePicturesView.swift */; }; 4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E242A9932C100489948 /* Ndb.swift */; }; - 4C32B9342A9AD01A00DC3548 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E2C2A9935D300489948 /* NdbProfile.swift */; }; 4C32B94C2A9AD44700DC3548 /* FbConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9372A9AD44700DC3548 /* FbConstants.swift */; }; 4C32B94D2A9AD44700DC3548 /* Offset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9382A9AD44700DC3548 /* Offset.swift */; }; 4C32B94E2A9AD44700DC3548 /* Mutable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9392A9AD44700DC3548 /* Mutable.swift */; }; @@ -184,19 +181,6 @@ 4C3D52B6298DB4E6001C5831 /* ZapEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D52B5298DB4E6001C5831 /* ZapEvent.swift */; }; 4C3D52B8298DB5C6001C5831 /* TextEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D52B7298DB5C6001C5831 /* TextEvent.swift */; }; 4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */; }; - 4C3EA63D28FF52D600C48A62 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA63C28FF52D600C48A62 /* bolt11.c */; }; - 4C3EA64128FF553900C48A62 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64028FF553900C48A62 /* hash_u5.c */; }; - 4C3EA64428FF558100C48A62 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64328FF558100C48A62 /* sha256.c */; }; - 4C3EA64928FF597700C48A62 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64828FF597700C48A62 /* bech32.c */; }; - 4C3EA64C28FF59AC00C48A62 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */; }; - 4C3EA64F28FF59F200C48A62 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64E28FF59F200C48A62 /* tal.c */; }; - 4C3EA66028FF5E7700C48A62 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA65F28FF5E7700C48A62 /* node_id.c */; }; - 4C3EA66528FF5F6800C48A62 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66428FF5F6800C48A62 /* mem.c */; }; - 4C3EA66828FF5F9900C48A62 /* hex.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66728FF5F9900C48A62 /* hex.c */; }; - 4C3EA66D28FF782800C48A62 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66C28FF782800C48A62 /* amount.c */; }; - 4C3EA67528FF7A5A00C48A62 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67428FF7A5A00C48A62 /* take.c */; }; - 4C3EA67728FF7A9800C48A62 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67628FF7A9800C48A62 /* talstr.c */; }; - 4C3EA67928FF7ABF00C48A62 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67828FF7ABF00C48A62 /* list.c */; }; 4C3EA67B28FF7B3900C48A62 /* InvoiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67A28FF7B3900C48A62 /* InvoiceTests.swift */; }; 4C3EA67D28FFBBA300C48A62 /* InvoicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67C28FFBBA200C48A62 /* InvoicesView.swift */; }; 4C3EA67F28FFC01D00C48A62 /* InvoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67E28FFC01D00C48A62 /* InvoiceView.swift */; }; @@ -266,7 +250,6 @@ 4C8D00C829DF791C0036AF10 /* CompatibleAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */; }; 4C8D00CA29DF80350036AF10 /* TruncatedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C929DF80350036AF10 /* TruncatedText.swift */; }; 4C8D00CC29DF92DF0036AF10 /* Hashtags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */; }; - 4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; }; 4C8D00D429E3C5D40036AF10 /* NIP19Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */; }; 4C8D1A6C29F1DFC200ACDF75 /* FriendIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */; }; 4C8D1A6F29F31E5000ACDF75 /* TrustedNetworkButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D1A6E29F31E5000ACDF75 /* TrustedNetworkButton.swift */; }; @@ -276,9 +259,7 @@ 4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD17283A9EE5008EE7EF /* LoginView.swift */; }; 4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD19283AA67F008EE7EF /* Bech32.swift */; }; 4C90BD1C283AC38E008EE7EF /* Bech32Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */; }; - 4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9276E2A2A5D110098A105 /* wasm.c */; }; 4C9146FE2A2A87C200DDEA40 /* nostrscript.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F14A92A2A71AB0045A0B9 /* nostrscript.c */; }; - 4C9147002A2A891E00DDEA40 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C9146FF2A2A891E00DDEA40 /* error.c */; }; 4C94D6432BA5AEFE00C26EFF /* QuoteRepostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */; }; 4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C987B56283FD07F0042CE38 /* FollowersModel.swift */; }; 4C9AA14A2A4587A6003F49FD /* NotificationStatusModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */; }; @@ -374,6 +355,7 @@ 4CE879582996C45300F758CC /* ZapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879572996C45300F758CC /* ZapsView.swift */; }; 4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8795A2996C47A00F758CC /* ZapsModel.swift */; }; 4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; settings = {COMPILER_FLAGS = "-w"; }; }; + 4CED18FD2C84B28F006AF665 /* PostingTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8711DD2C460C06007879C2 /* PostingTimelineView.swift */; }; 4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */; }; 4CEE2AF1280B216B00AB5EEF /* EventDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */; }; 4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */; }; @@ -395,6 +377,34 @@ 4CF0ABF029857E9200D66079 /* Bech32Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABEF29857E9200D66079 /* Bech32Object.swift */; }; 4CF0ABF62985CD5500D66079 /* UserSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABF52985CD5500D66079 /* UserSearch.swift */; }; 4CF38C882A9442DC00BE01B6 /* UserStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */; }; + 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 */; }; + 4CF4803B2B631C0100F2B2C0 /* configurator.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FEF2B631C0100F2B2C0 /* configurator.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 */; }; + 4CF4803E2B631C0100F2B2C0 /* .dir in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FF92B631C0100F2B2C0 /* .dir */; }; + 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 */; }; + 4CF480432B631C0100F2B2C0 /* .dir in Resources */ = {isa = PBXBuildFile; fileRef = 4CF480062B631C0100F2B2C0 /* .dir */; }; + 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 */; }; + 4CF4804A2B631C0100F2B2C0 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801E2B631C0100F2B2C0 /* bech32.c */; }; + 4CF4804B2B631C0100F2B2C0 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801F2B631C0100F2B2C0 /* tal.c */; }; + 4CF4804C2B631C0100F2B2C0 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480232B631C0100F2B2C0 /* take.c */; }; + 4CF4804D2B631C0100F2B2C0 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480252B631C0100F2B2C0 /* amount.c */; }; + 4CF4804E2B631C0100F2B2C0 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480262B631C0100F2B2C0 /* error.c */; }; + 4CF4804F2B631C0100F2B2C0 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480282B631C0100F2B2C0 /* bech32_util.c */; }; + 4CF480502B631C0100F2B2C0 /* libnostrdb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */; }; + 4CF480512B631C0100F2B2C0 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480342B631C0100F2B2C0 /* node_id.c */; }; + 4CF480522B631C0100F2B2C0 /* invoice.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480372B631C0100F2B2C0 /* invoice.c */; }; + 4CF480552B631C4F00F2B2C0 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480532B631C4F00F2B2C0 /* wasm.c */; }; 4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD502E2A2DA45800A229DB /* MediaView.swift */; }; 4CFF8F5929C9FD1E008DB934 /* DamusPurpleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */; }; 4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */; }; @@ -1657,28 +1667,9 @@ D7CE1B1C2B0BE147002EDAD4 /* refmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792D12A9939BD00489948 /* refmap.c */; }; D7CE1B1D2B0BE14A002EDAD4 /* verifier.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792D42A9939BD00489948 /* verifier.c */; }; D7CE1B1E2B0BE190002EDAD4 /* midl.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793032A993DB900489948 /* midl.c */; }; - D7CE1B1F2B0BE1B8002EDAD4 /* damus.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670A28FDE64700038D2A /* damus.c */; }; - D7CE1B202B0BE1C8002EDAD4 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C9146FF2A2A891E00DDEA40 /* error.c */; }; - D7CE1B212B0BE1CB002EDAD4 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9276E2A2A5D110098A105 /* wasm.c */; }; - D7CE1B222B0BE1EB002EDAD4 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670D28FDEAA000038D2A /* utf8.c */; }; - D7CE1B232B0BE1EE002EDAD4 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA63C28FF52D600C48A62 /* bolt11.c */; }; - D7CE1B242B0BE1F1002EDAD4 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64028FF553900C48A62 /* hash_u5.c */; }; - D7CE1B252B0BE1F4002EDAD4 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64328FF558100C48A62 /* sha256.c */; }; - D7CE1B262B0BE1F8002EDAD4 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64828FF597700C48A62 /* bech32.c */; }; - D7CE1B272B0BE224002EDAD4 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */; }; - D7CE1B282B0BE226002EDAD4 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64E28FF59F200C48A62 /* tal.c */; }; - D7CE1B292B0BE239002EDAD4 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA65F28FF5E7700C48A62 /* node_id.c */; }; - D7CE1B2A2B0BE23E002EDAD4 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66428FF5F6800C48A62 /* mem.c */; }; - D7CE1B2B2B0BE243002EDAD4 /* hex.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66728FF5F9900C48A62 /* hex.c */; }; - D7CE1B2C2B0BE24B002EDAD4 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66C28FF782800C48A62 /* amount.c */; }; - D7CE1B2D2B0BE250002EDAD4 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67428FF7A5A00C48A62 /* take.c */; }; - D7CE1B2E2B0BE25C002EDAD4 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67628FF7A9800C48A62 /* talstr.c */; }; - D7CE1B2F2B0BE260002EDAD4 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67828FF7ABF00C48A62 /* list.c */; }; - D7CE1B302B0BE263002EDAD4 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; }; D7CE1B312B0BE69D002EDAD4 /* Ndb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E242A9932C100489948 /* Ndb.swift */; }; D7CE1B322B0BE6C3002EDAD4 /* NdbTxn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */; }; D7CE1B332B0BE6DE002EDAD4 /* Nostr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFA527FF87A20006080F /* Nostr.swift */; }; - D7CE1B342B0BE6EE002EDAD4 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E2C2A9935D300489948 /* NdbProfile.swift */; }; D7CE1B352B0BE6FA002EDAD4 /* ByteBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9402A9AD44700DC3548 /* ByteBuffer.swift */; }; D7CE1B362B0BE702002EDAD4 /* FbConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9372A9AD44700DC3548 /* FbConstants.swift */; }; D7CE1B372B0BE719002EDAD4 /* Verifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93E2A9AD44700DC3548 /* Verifier.swift */; }; @@ -1975,11 +1966,6 @@ 4C011B602BD0B25C002F2F9B /* ReplyQuoteView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplyQuoteView.swift; sourceTree = "<group>"; }; 4C06670028FC7C5900038D2A /* RelayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayView.swift; sourceTree = "<group>"; }; 4C06670528FCB08600038D2A /* ImageCarousel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCarousel.swift; sourceTree = "<group>"; }; - 4C06670828FDE64700038D2A /* damus-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "damus-Bridging-Header.h"; sourceTree = "<group>"; }; - 4C06670928FDE64700038D2A /* damus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = damus.h; sourceTree = "<group>"; }; - 4C06670A28FDE64700038D2A /* damus.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = damus.c; sourceTree = "<group>"; }; - 4C06670C28FDEAA000038D2A /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; }; - 4C06670D28FDEAA000038D2A /* utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = "<group>"; }; 4C0A3F8E280F640A000448DE /* ThreadModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadModel.swift; sourceTree = "<group>"; }; 4C0A3F92280F66F5000448DE /* ReplyMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyMap.swift; sourceTree = "<group>"; }; 4C0C03972A61E27B0098B3B8 /* primal.wasm */ = {isa = PBXFileReference; lastKnownFileType = file; name = primal.wasm; path = nostrscript/primal.wasm; sourceTree = SOURCE_ROOT; }; @@ -2092,48 +2078,6 @@ 4C3D52B5298DB4E6001C5831 /* ZapEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapEvent.swift; sourceTree = "<group>"; }; 4C3D52B7298DB5C6001C5831 /* TextEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextEvent.swift; sourceTree = "<group>"; }; 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTxn.swift; sourceTree = "<group>"; }; - 4C3EA63B28FF52D600C48A62 /* bolt11.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bolt11.h; sourceTree = "<group>"; }; - 4C3EA63C28FF52D600C48A62 /* bolt11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bolt11.c; sourceTree = "<group>"; }; - 4C3EA63E28FF54BD00C48A62 /* short_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = short_types.h; sourceTree = "<group>"; }; - 4C3EA63F28FF553900C48A62 /* hash_u5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hash_u5.h; sourceTree = "<group>"; }; - 4C3EA64028FF553900C48A62 /* hash_u5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hash_u5.c; sourceTree = "<group>"; }; - 4C3EA64228FF558100C48A62 /* sha256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha256.h; sourceTree = "<group>"; }; - 4C3EA64328FF558100C48A62 /* sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = "<group>"; }; - 4C3EA64528FF56D300C48A62 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; }; - 4C3EA64628FF570F00C48A62 /* node_id.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = node_id.h; sourceTree = "<group>"; }; - 4C3EA64728FF597700C48A62 /* bech32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bech32.h; sourceTree = "<group>"; }; - 4C3EA64828FF597700C48A62 /* bech32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bech32.c; sourceTree = "<group>"; }; - 4C3EA64A28FF59AC00C48A62 /* bech32_util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bech32_util.h; sourceTree = "<group>"; }; - 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bech32_util.c; sourceTree = "<group>"; }; - 4C3EA64D28FF59F200C48A62 /* tal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tal.h; sourceTree = "<group>"; }; - 4C3EA64E28FF59F200C48A62 /* tal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tal.c; sourceTree = "<group>"; }; - 4C3EA65028FF5A5500C48A62 /* list.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; }; - 4C3EA65328FF5A8600C48A62 /* str.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str.h; sourceTree = "<group>"; }; - 4C3EA65428FF5AAE00C48A62 /* container_of.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = container_of.h; sourceTree = "<group>"; }; - 4C3EA65528FF5AC300C48A62 /* check_type.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = check_type.h; sourceTree = "<group>"; }; - 4C3EA65628FF5B0200C48A62 /* compiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compiler.h; sourceTree = "<group>"; }; - 4C3EA65728FF5B1E00C48A62 /* likely.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = likely.h; sourceTree = "<group>"; }; - 4C3EA65828FF5B3700C48A62 /* typesafe_cb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = typesafe_cb.h; sourceTree = "<group>"; }; - 4C3EA65928FF5B5100C48A62 /* take.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = take.h; sourceTree = "<group>"; }; - 4C3EA65A28FF5BC900C48A62 /* alignof.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = alignof.h; sourceTree = "<group>"; }; - 4C3EA65B28FF5C7E00C48A62 /* str_debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_debug.h; sourceTree = "<group>"; }; - 4C3EA65C28FF5CAF00C48A62 /* endian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = "<group>"; }; - 4C3EA65D28FF5CF300C48A62 /* talstr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = talstr.h; sourceTree = "<group>"; }; - 4C3EA65E28FF5DA400C48A62 /* amount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = amount.h; sourceTree = "<group>"; }; - 4C3EA65F28FF5E7700C48A62 /* node_id.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = node_id.c; sourceTree = "<group>"; }; - 4C3EA66128FF5EA800C48A62 /* array_size.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = array_size.h; sourceTree = "<group>"; }; - 4C3EA66228FF5EBC00C48A62 /* build_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = build_assert.h; sourceTree = "<group>"; }; - 4C3EA66328FF5F6800C48A62 /* mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = "<group>"; }; - 4C3EA66428FF5F6800C48A62 /* mem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = "<group>"; }; - 4C3EA66628FF5F9900C48A62 /* hex.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hex.h; sourceTree = "<group>"; }; - 4C3EA66728FF5F9900C48A62 /* hex.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hex.c; sourceTree = "<group>"; }; - 4C3EA66C28FF782800C48A62 /* amount.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = amount.c; sourceTree = "<group>"; }; - 4C3EA66E28FF787100C48A62 /* overflows.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = overflows.h; sourceTree = "<group>"; }; - 4C3EA67228FF79F600C48A62 /* structeq.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = structeq.h; sourceTree = "<group>"; }; - 4C3EA67328FF7A2600C48A62 /* cppmagic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cppmagic.h; sourceTree = "<group>"; }; - 4C3EA67428FF7A5A00C48A62 /* take.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = take.c; sourceTree = "<group>"; }; - 4C3EA67628FF7A9800C48A62 /* talstr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = talstr.c; sourceTree = "<group>"; }; - 4C3EA67828FF7ABF00C48A62 /* list.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; }; 4C3EA67A28FF7B3900C48A62 /* InvoiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvoiceTests.swift; sourceTree = "<group>"; }; 4C3EA67C28FFBBA200C48A62 /* InvoicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvoicesView.swift; sourceTree = "<group>"; }; 4C3EA67E28FFC01D00C48A62 /* InvoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvoiceView.swift; sourceTree = "<group>"; }; @@ -2141,21 +2085,6 @@ 4C45E5012BED4D000025A428 /* ThreadReply.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadReply.swift; sourceTree = "<group>"; }; 4C463CBE2B960B96008A8C36 /* PurpleBackdrop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleBackdrop.swift; sourceTree = "<group>"; }; 4C478E242A9932C100489948 /* Ndb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ndb.swift; sourceTree = "<group>"; }; - 4C478E262A99353500489948 /* threadpool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = threadpool.h; sourceTree = "<group>"; }; - 4C478E272A99354E00489948 /* protected_queue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = protected_queue.h; sourceTree = "<group>"; }; - 4C478E282A99357400489948 /* memchr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memchr.h; sourceTree = "<group>"; }; - 4C478E292A99359900489948 /* util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; }; - 4C478E2C2A9935D300489948 /* NdbProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbProfile.swift; sourceTree = "<group>"; }; - 4C478E2E2A9935D300489948 /* profile_json_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_json_parser.h; sourceTree = "<group>"; }; - 4C478E2F2A9935D300489948 /* profile_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_reader.h; sourceTree = "<group>"; }; - 4C478E302A9935D300489948 /* meta_json_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_json_parser.h; sourceTree = "<group>"; }; - 4C478E312A9935D300489948 /* profile_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_builder.h; sourceTree = "<group>"; }; - 4C478E322A9935D300489948 /* meta_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_builder.h; sourceTree = "<group>"; }; - 4C478E332A9935D300489948 /* profile_verifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_verifier.h; sourceTree = "<group>"; }; - 4C478E352A9935D300489948 /* meta_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_reader.h; sourceTree = "<group>"; }; - 4C478E362A9935D300489948 /* flatbuffers_common_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_reader.h; sourceTree = "<group>"; }; - 4C478E372A9935D300489948 /* meta_verifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_verifier.h; sourceTree = "<group>"; }; - 4C478E382A9935D300489948 /* flatbuffers_common_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_builder.h; sourceTree = "<group>"; }; 4C47928E2A9939BD00489948 /* flatcc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc.h; sourceTree = "<group>"; }; 4C47928F2A9939BD00489948 /* flatcc_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_version.h; sourceTree = "<group>"; }; 4C4792902A9939BD00489948 /* flatcc_emitter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_emitter.h; sourceTree = "<group>"; }; @@ -2276,7 +2205,6 @@ 4C75EFB628049D990006080F /* RelayPool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPool.swift; sourceTree = "<group>"; }; 4C75EFB82804A2740006080F /* EventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventView.swift; sourceTree = "<group>"; }; 4C75EFBA2804A34C0006080F /* ProofOfWork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProofOfWork.swift; sourceTree = "<group>"; }; - 4C78EFD62A7078C5007E8197 /* random.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = "<group>"; }; 4C78EFD72A707C4D007E8197 /* secp256k1_schnorrsig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_schnorrsig.h; sourceTree = "<group>"; }; 4C78EFD82A707C4D007E8197 /* secp256k1_ecdh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_ecdh.h; sourceTree = "<group>"; }; 4C78EFD92A707C4D007E8197 /* secp256k1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1.h; sourceTree = "<group>"; }; @@ -2298,11 +2226,6 @@ 4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibleAttribute.swift; sourceTree = "<group>"; }; 4C8D00C929DF80350036AF10 /* TruncatedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TruncatedText.swift; sourceTree = "<group>"; }; 4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hashtags.swift; sourceTree = "<group>"; }; - 4C8D00CD29E38B950036AF10 /* nostr_bech32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nostr_bech32.h; sourceTree = "<group>"; }; - 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nostr_bech32.c; sourceTree = "<group>"; }; - 4C8D00D029E38E4C0036AF10 /* cursor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = "<group>"; }; - 4C8D00D129E397AD0036AF10 /* block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = block.h; sourceTree = "<group>"; }; - 4C8D00D229E3C19F0036AF10 /* str_block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_block.h; sourceTree = "<group>"; }; 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP19Tests.swift; sourceTree = "<group>"; }; 4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendIcon.swift; sourceTree = "<group>"; }; 4C8D1A6E29F31E5000ACDF75 /* TrustedNetworkButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrustedNetworkButton.swift; sourceTree = "<group>"; }; @@ -2313,7 +2236,6 @@ 4C90BD17283A9EE5008EE7EF /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; }; 4C90BD19283AA67F008EE7EF /* Bech32.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32.swift; sourceTree = "<group>"; }; 4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Tests.swift; sourceTree = "<group>"; }; - 4C9146FF2A2A891E00DDEA40 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = "<group>"; }; 4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteRepostsView.swift; sourceTree = "<group>"; }; 4C987B56283FD07F0042CE38 /* FollowersModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowersModel.swift; sourceTree = "<group>"; }; 4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationStatusModel.swift; sourceTree = "<group>"; }; @@ -2343,13 +2265,6 @@ 4CA927642A290F1A0098A105 /* TimeDot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeDot.swift; sourceTree = "<group>"; }; 4CA927662A290F8B0098A105 /* RelativeTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelativeTime.swift; sourceTree = "<group>"; }; 4CA9276B2A2910D10098A105 /* ReplyPart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyPart.swift; sourceTree = "<group>"; }; - 4CA9276D2A2A5D110098A105 /* wasm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wasm.h; sourceTree = "<group>"; }; - 4CA9276E2A2A5D110098A105 /* wasm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = wasm.c; sourceTree = "<group>"; }; - 4CA9276F2A2A5D470098A105 /* parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = "<group>"; }; - 4CA927702A2A5D470098A105 /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; }; - 4CA927712A2A5D480098A105 /* error.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = "<group>"; }; - 4CA927742A2A5E2F0098A105 /* varint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = varint.h; sourceTree = "<group>"; }; - 4CA927752A2A5E2F0098A105 /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = "<group>"; }; 4CAAD8AC298851D000060CEA /* AccountDeletion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeletion.swift; sourceTree = "<group>"; }; 4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayConfigView.swift; sourceTree = "<group>"; }; 4CACA9D4280C31E100D9BBE8 /* ReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyView.swift; sourceTree = "<group>"; }; @@ -2391,7 +2306,6 @@ 4CDA128B29EB19C40006FA5A /* LocalNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotification.swift; sourceTree = "<group>"; }; 4CDD1ADF2A6B305F001CD4DF /* NdbTagElem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTagElem.swift; sourceTree = "<group>"; }; 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTagsIterator.swift; sourceTree = "<group>"; }; - 4CDD1AE72A6B3611001CD4DF /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = "<group>"; }; 4CE0E2AE29A2E82100DB4CA2 /* EventHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventHolder.swift; sourceTree = "<group>"; }; 4CE0E2B529A3ED5500DB4CA2 /* InnerTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InnerTimelineView.swift; sourceTree = "<group>"; }; 4CE1398F29F0661A00AC6A0B /* RepostAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostAction.swift; sourceTree = "<group>"; }; @@ -2419,8 +2333,6 @@ 4CE879542996BAB900F758CC /* RelayPaidDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPaidDetail.swift; sourceTree = "<group>"; }; 4CE879572996C45300F758CC /* ZapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapsView.swift; sourceTree = "<group>"; }; 4CE8795A2996C47A00F758CC /* ZapsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapsModel.swift; sourceTree = "<group>"; }; - 4CE9FBB82A6B3B26007E485C /* nostrdb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nostrdb.c; sourceTree = "<group>"; }; - 4CE9FBB92A6B3B26007E485C /* nostrdb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nostrdb.h; sourceTree = "<group>"; }; 4CEE2AE72804F57C00AB5EEF /* libsecp256k1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libsecp256k1.a; sourceTree = "<group>"; }; 4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrRequest.swift; sourceTree = "<group>"; }; 4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailView.swift; sourceTree = "<group>"; }; @@ -2442,6 +2354,95 @@ 4CF0ABEF29857E9200D66079 /* Bech32Object.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Object.swift; sourceTree = "<group>"; }; 4CF0ABF52985CD5500D66079 /* UserSearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSearch.swift; sourceTree = "<group>"; }; 4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatusView.swift; sourceTree = "<group>"; }; + 4CF47FDA2B631BA500F2B2C0 /* damus-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "damus-Bridging-Header.h"; sourceTree = "<group>"; }; + 4CF47FDD2B631C0100F2B2C0 /* lmdb_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lmdb_util.h; sourceTree = "<group>"; }; + 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nostrdb.c; sourceTree = "<group>"; }; + 4CF47FDF2B631C0100F2B2C0 /* block.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = block.c; sourceTree = "<group>"; }; + 4CF47FE02B631C0100F2B2C0 /* str_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_block.h; sourceTree = "<group>"; }; + 4CF47FE12B631C0100F2B2C0 /* compiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compiler.h; sourceTree = "<group>"; }; + 4CF47FE22B631C0100F2B2C0 /* threadpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threadpool.h; sourceTree = "<group>"; }; + 4CF47FE32B631C0100F2B2C0 /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = "<group>"; }; + 4CF47FE42B631C0100F2B2C0 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; }; + 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nostr_bech32.c; sourceTree = "<group>"; }; + 4CF47FE62B631C0100F2B2C0 /* endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = "<group>"; }; + 4CF47FE72B631C0100F2B2C0 /* jsmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = "<group>"; }; + 4CF47FE82B631C0100F2B2C0 /* memchr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memchr.h; sourceTree = "<group>"; }; + 4CF47FE92B631C0100F2B2C0 /* sha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha256.h; sourceTree = "<group>"; }; + 4CF47FEA2B631C0100F2B2C0 /* invoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = invoice.h; sourceTree = "<group>"; }; + 4CF47FEB2B631C0100F2B2C0 /* cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = "<group>"; }; + 4CF47FEC2B631C0100F2B2C0 /* nostrdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nostrdb.h; sourceTree = "<group>"; }; + 4CF47FED2B631C0100F2B2C0 /* hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex.h; sourceTree = "<group>"; }; + 4CF47FEE2B631C0100F2B2C0 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = "<group>"; }; + 4CF47FEF2B631C0100F2B2C0 /* configurator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = configurator.c; sourceTree = "<group>"; }; + 4CF47FF02B631C0100F2B2C0 /* nostr_bech32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nostr_bech32.h; sourceTree = "<group>"; }; + 4CF47FF12B631C0100F2B2C0 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = "<group>"; }; + 4CF47FF22B631C0100F2B2C0 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; }; + 4CF47FF32B631C0100F2B2C0 /* print_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print_util.h; sourceTree = "<group>"; }; + 4CF47FF42B631C0100F2B2C0 /* block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block.h; sourceTree = "<group>"; }; + 4CF47FF52B631C0100F2B2C0 /* sha256.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = "<group>"; }; + 4CF47FF62B631C0100F2B2C0 /* content_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = content_parser.c; sourceTree = "<group>"; }; + 4CF47FF92B631C0100F2B2C0 /* .dir */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .dir; sourceTree = "<group>"; }; + 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ndb_profile.rs; sourceTree = "<group>"; }; + 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ndb_meta.rs; sourceTree = "<group>"; }; + 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NdbMeta.swift; sourceTree = "<group>"; }; + 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NdbProfile.swift; sourceTree = "<group>"; }; + 4CF480002B631C0100F2B2C0 /* profile_json_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_json_parser.h; sourceTree = "<group>"; }; + 4CF480012B631C0100F2B2C0 /* profile_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_reader.h; sourceTree = "<group>"; }; + 4CF480022B631C0100F2B2C0 /* meta_json_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_json_parser.h; sourceTree = "<group>"; }; + 4CF480032B631C0100F2B2C0 /* profile_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_builder.h; sourceTree = "<group>"; }; + 4CF480042B631C0100F2B2C0 /* meta_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_builder.h; sourceTree = "<group>"; }; + 4CF480052B631C0100F2B2C0 /* profile_verifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_verifier.h; sourceTree = "<group>"; }; + 4CF480062B631C0100F2B2C0 /* .dir */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .dir; sourceTree = "<group>"; }; + 4CF480072B631C0100F2B2C0 /* meta_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_reader.h; sourceTree = "<group>"; }; + 4CF480082B631C0100F2B2C0 /* flatbuffers_common_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_reader.h; sourceTree = "<group>"; }; + 4CF480092B631C0100F2B2C0 /* meta_verifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_verifier.h; sourceTree = "<group>"; }; + 4CF4800A2B631C0100F2B2C0 /* flatbuffers_common_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_builder.h; sourceTree = "<group>"; }; + 4CF4800C2B631C0100F2B2C0 /* amount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amount.h; sourceTree = "<group>"; }; + 4CF4800D2B631C0100F2B2C0 /* cppmagic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cppmagic.h; sourceTree = "<group>"; }; + 4CF4800E2B631C0100F2B2C0 /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = "<group>"; }; + 4CF4800F2B631C0100F2B2C0 /* take.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = take.h; sourceTree = "<group>"; }; + 4CF480102B631C0100F2B2C0 /* bolt11.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bolt11.c; sourceTree = "<group>"; }; + 4CF480112B631C0100F2B2C0 /* structeq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structeq.h; sourceTree = "<group>"; }; + 4CF480122B631C0100F2B2C0 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; }; + 4CF480132B631C0100F2B2C0 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; }; + 4CF480142B631C0100F2B2C0 /* bech32_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bech32_util.h; sourceTree = "<group>"; }; + 4CF480152B631C0100F2B2C0 /* alignof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alignof.h; sourceTree = "<group>"; }; + 4CF480162B631C0100F2B2C0 /* typesafe_cb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typesafe_cb.h; sourceTree = "<group>"; }; + 4CF480172B631C0100F2B2C0 /* overflows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = overflows.h; sourceTree = "<group>"; }; + 4CF480182B631C0100F2B2C0 /* mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = "<group>"; }; + 4CF480192B631C0100F2B2C0 /* container_of.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container_of.h; sourceTree = "<group>"; }; + 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_u5.c; sourceTree = "<group>"; }; + 4CF4801B2B631C0100F2B2C0 /* node_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_id.h; sourceTree = "<group>"; }; + 4CF4801C2B631C0100F2B2C0 /* talstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = talstr.c; sourceTree = "<group>"; }; + 4CF4801D2B631C0100F2B2C0 /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = "<group>"; }; + 4CF4801E2B631C0100F2B2C0 /* bech32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bech32.c; sourceTree = "<group>"; }; + 4CF4801F2B631C0100F2B2C0 /* tal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tal.c; sourceTree = "<group>"; }; + 4CF480202B631C0100F2B2C0 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; }; + 4CF480212B631C0100F2B2C0 /* str_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_debug.h; sourceTree = "<group>"; }; + 4CF480222B631C0100F2B2C0 /* bolt11.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bolt11.h; sourceTree = "<group>"; }; + 4CF480232B631C0100F2B2C0 /* take.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = take.c; sourceTree = "<group>"; }; + 4CF480242B631C0100F2B2C0 /* likely.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = likely.h; sourceTree = "<group>"; }; + 4CF480252B631C0100F2B2C0 /* amount.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = amount.c; sourceTree = "<group>"; }; + 4CF480262B631C0100F2B2C0 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = "<group>"; }; + 4CF480272B631C0100F2B2C0 /* array_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = array_size.h; sourceTree = "<group>"; }; + 4CF480282B631C0100F2B2C0 /* bech32_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bech32_util.c; sourceTree = "<group>"; }; + 4CF480292B631C0100F2B2C0 /* str.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str.h; sourceTree = "<group>"; }; + 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libnostrdb.a; sourceTree = "<group>"; }; + 4CF4802B2B631C0100F2B2C0 /* hash_u5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hash_u5.h; sourceTree = "<group>"; }; + 4CF4802C2B631C0100F2B2C0 /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = "<group>"; }; + 4CF4802D2B631C0100F2B2C0 /* build_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_assert.h; sourceTree = "<group>"; }; + 4CF4802E2B631C0100F2B2C0 /* short_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = short_types.h; sourceTree = "<group>"; }; + 4CF4802F2B631C0100F2B2C0 /* tal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tal.h; sourceTree = "<group>"; }; + 4CF480302B631C0100F2B2C0 /* bech32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bech32.h; sourceTree = "<group>"; }; + 4CF480312B631C0100F2B2C0 /* check_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = check_type.h; sourceTree = "<group>"; }; + 4CF480322B631C0100F2B2C0 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; }; + 4CF480332B631C0100F2B2C0 /* talstr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = talstr.h; sourceTree = "<group>"; }; + 4CF480342B631C0100F2B2C0 /* node_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = node_id.c; sourceTree = "<group>"; }; + 4CF480352B631C0100F2B2C0 /* protected_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = protected_queue.h; sourceTree = "<group>"; }; + 4CF480362B631C0100F2B2C0 /* random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = "<group>"; }; + 4CF480372B631C0100F2B2C0 /* invoice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = invoice.c; sourceTree = "<group>"; }; + 4CF480532B631C4F00F2B2C0 /* wasm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wasm.c; sourceTree = "<group>"; }; + 4CF480542B631C4F00F2B2C0 /* wasm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wasm.h; sourceTree = "<group>"; }; 4CFD502E2A2DA45800A229DB /* MediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaView.swift; sourceTree = "<group>"; }; 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleView.swift; sourceTree = "<group>"; }; 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContextMenuModifier.swift; sourceTree = "<group>"; }; @@ -2692,6 +2693,7 @@ D7C48C0B2D12DE0C00A3BACF /* SwiftyCrop in Frameworks */, D78DB8592C1CE9CA00F0AB12 /* SwipeActions in Frameworks */, 4C649881286E0EE300EAE2B3 /* secp256k1 in Frameworks */, + 4CF480502B631C0100F2B2C0 /* libnostrdb.a in Frameworks */, 4C27C9322A64766F007DBC75 /* MarkdownUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2787,73 +2789,6 @@ path = Reposts; sourceTree = "<group>"; }; - 4C06670728FDE62900038D2A /* damus-c */ = { - isa = PBXGroup; - children = ( - 4C9146FF2A2A891E00DDEA40 /* error.c */, - 4CA927752A2A5E2F0098A105 /* typedefs.h */, - 4CA927742A2A5E2F0098A105 /* varint.h */, - 4CA927702A2A5D470098A105 /* debug.h */, - 4CA927712A2A5D480098A105 /* error.h */, - 4CA9276F2A2A5D470098A105 /* parser.h */, - 4CA9276E2A2A5D110098A105 /* wasm.c */, - 4CA9276D2A2A5D110098A105 /* wasm.h */, - 4C06670928FDE64700038D2A /* damus.h */, - 4C06670A28FDE64700038D2A /* damus.c */, - 4C06670828FDE64700038D2A /* damus-Bridging-Header.h */, - 4C06670C28FDEAA000038D2A /* utf8.h */, - 4C06670D28FDEAA000038D2A /* utf8.c */, - 4C3EA63B28FF52D600C48A62 /* bolt11.h */, - 4C3EA63C28FF52D600C48A62 /* bolt11.c */, - 4C3EA63E28FF54BD00C48A62 /* short_types.h */, - 4C3EA63F28FF553900C48A62 /* hash_u5.h */, - 4C3EA64028FF553900C48A62 /* hash_u5.c */, - 4C3EA64228FF558100C48A62 /* sha256.h */, - 4C3EA64328FF558100C48A62 /* sha256.c */, - 4C3EA64528FF56D300C48A62 /* config.h */, - 4C3EA64628FF570F00C48A62 /* node_id.h */, - 4C3EA64728FF597700C48A62 /* bech32.h */, - 4C3EA64828FF597700C48A62 /* bech32.c */, - 4C3EA64A28FF59AC00C48A62 /* bech32_util.h */, - 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */, - 4C3EA64D28FF59F200C48A62 /* tal.h */, - 4C3EA64E28FF59F200C48A62 /* tal.c */, - 4C3EA65028FF5A5500C48A62 /* list.h */, - 4C3EA65328FF5A8600C48A62 /* str.h */, - 4C3EA65428FF5AAE00C48A62 /* container_of.h */, - 4C3EA65528FF5AC300C48A62 /* check_type.h */, - 4C3EA65628FF5B0200C48A62 /* compiler.h */, - 4C3EA65728FF5B1E00C48A62 /* likely.h */, - 4C3EA65828FF5B3700C48A62 /* typesafe_cb.h */, - 4C3EA65928FF5B5100C48A62 /* take.h */, - 4C3EA65A28FF5BC900C48A62 /* alignof.h */, - 4C3EA65B28FF5C7E00C48A62 /* str_debug.h */, - 4C3EA65C28FF5CAF00C48A62 /* endian.h */, - 4C3EA65D28FF5CF300C48A62 /* talstr.h */, - 4C3EA65E28FF5DA400C48A62 /* amount.h */, - 4C3EA65F28FF5E7700C48A62 /* node_id.c */, - 4C3EA66128FF5EA800C48A62 /* array_size.h */, - 4C3EA66228FF5EBC00C48A62 /* build_assert.h */, - 4C3EA66328FF5F6800C48A62 /* mem.h */, - 4C3EA66428FF5F6800C48A62 /* mem.c */, - 4C3EA66628FF5F9900C48A62 /* hex.h */, - 4C3EA66728FF5F9900C48A62 /* hex.c */, - 4C3EA66C28FF782800C48A62 /* amount.c */, - 4C3EA66E28FF787100C48A62 /* overflows.h */, - 4C3EA67228FF79F600C48A62 /* structeq.h */, - 4C3EA67328FF7A2600C48A62 /* cppmagic.h */, - 4C3EA67428FF7A5A00C48A62 /* take.c */, - 4C3EA67628FF7A9800C48A62 /* talstr.c */, - 4C3EA67828FF7ABF00C48A62 /* list.c */, - 4C8D00CD29E38B950036AF10 /* nostr_bech32.h */, - 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */, - 4C8D00D029E38E4C0036AF10 /* cursor.h */, - 4C8D00D129E397AD0036AF10 /* block.h */, - 4C8D00D229E3C19F0036AF10 /* str_block.h */, - ); - path = "damus-c"; - sourceTree = "<group>"; - }; 4C0C03962A61E2670098B3B8 /* Fixtures */ = { isa = PBXGroup; children = ( @@ -3215,8 +3150,8 @@ isa = PBXGroup; children = ( D733F9E42D92C75C00317B11 /* UnownedNdbNote.swift */, + 4CF47FDC2B631C0100F2B2C0 /* src */, 4C47928D2A9939BD00489948 /* flatcc */, - 4C478E2A2A9935D300489948 /* bindings */, 4CE9FBBB2A6B3D9C007E485C /* Test */, 4C9054882A6AED4700811EEC /* NdbTagIterator.swift */, 4C90548A2A6AEDEE00811EEC /* NdbNote.swift */, @@ -3225,18 +3160,10 @@ 4C478E242A9932C100489948 /* Ndb.swift */, 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */, 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */, - 4CE9FBB82A6B3B26007E485C /* nostrdb.c */, 4C4793032A993DB900489948 /* midl.c */, 4C4793002A993B9A00489948 /* mdb.c */, 4C4793022A993D9300489948 /* midl.h */, 4C4792FF2A993B9A00489948 /* lmdb.h */, - 4CE9FBB92A6B3B26007E485C /* nostrdb.h */, - 4C78EFD62A7078C5007E8197 /* random.h */, - 4CDD1AE72A6B3611001CD4DF /* jsmn.h */, - 4C478E292A99359900489948 /* util.h */, - 4C478E282A99357400489948 /* memchr.h */, - 4C478E272A99354E00489948 /* protected_queue.h */, - 4C478E262A99353500489948 /* threadpool.h */, 4C78EFD82A707C4D007E8197 /* secp256k1_ecdh.h */, 4C78EFD72A707C4D007E8197 /* secp256k1_schnorrsig.h */, 4C78EFDA2A707C67007E8197 /* secp256k1_extrakeys.h */, @@ -3437,11 +3364,11 @@ children = ( 82D6FAA82CD982D500C925F4 /* share extension */, D7FB14212BE5970000398331 /* PrivacyInfo.xcprivacy */, + 4CF47FD82B631BA500F2B2C0 /* damus-c */, 4C32B9362A9AD44700DC3548 /* flatbuffers */, 4C9054862A6AEB4500811EEC /* nostrdb */, 4C19AE4A2A5CEF7C00C90DB7 /* nostrscript */, 4C8AE1182A0320BE00B944E6 /* Purple.storekit */, - 4C06670728FDE62900038D2A /* damus-c */, 4CE6DEE527F7A08100C66700 /* damus */, 4CE6DEF627F7A08200C66700 /* damusTests */, 4CE6DF0027F7A08200C66700 /* damusUITests */, @@ -3627,6 +3554,149 @@ path = Posting; sourceTree = "<group>"; }; + 4CF47FD82B631BA500F2B2C0 /* damus-c */ = { + isa = PBXGroup; + children = ( + 4CF480532B631C4F00F2B2C0 /* wasm.c */, + 4CF480542B631C4F00F2B2C0 /* wasm.h */, + 4CF47FDA2B631BA500F2B2C0 /* damus-Bridging-Header.h */, + ); + path = "damus-c"; + sourceTree = "<group>"; + }; + 4CF47FDC2B631C0100F2B2C0 /* src */ = { + isa = PBXGroup; + children = ( + 4CF47FDD2B631C0100F2B2C0 /* lmdb_util.h */, + 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */, + 4CF47FDF2B631C0100F2B2C0 /* block.c */, + 4CF47FE02B631C0100F2B2C0 /* str_block.h */, + 4CF47FE12B631C0100F2B2C0 /* compiler.h */, + 4CF47FE22B631C0100F2B2C0 /* threadpool.h */, + 4CF47FE32B631C0100F2B2C0 /* typedefs.h */, + 4CF47FE42B631C0100F2B2C0 /* config.h */, + 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */, + 4CF47FE62B631C0100F2B2C0 /* endian.h */, + 4CF47FE72B631C0100F2B2C0 /* jsmn.h */, + 4CF47FE82B631C0100F2B2C0 /* memchr.h */, + 4CF47FE92B631C0100F2B2C0 /* sha256.h */, + 4CF47FEA2B631C0100F2B2C0 /* invoice.h */, + 4CF47FEB2B631C0100F2B2C0 /* cursor.h */, + 4CF47FEC2B631C0100F2B2C0 /* nostrdb.h */, + 4CF47FED2B631C0100F2B2C0 /* hex.h */, + 4CF47FEE2B631C0100F2B2C0 /* io.h */, + 4CF47FEF2B631C0100F2B2C0 /* configurator.c */, + 4CF47FF02B631C0100F2B2C0 /* nostr_bech32.h */, + 4CF47FF12B631C0100F2B2C0 /* cpu.h */, + 4CF47FF22B631C0100F2B2C0 /* util.h */, + 4CF47FF32B631C0100F2B2C0 /* print_util.h */, + 4CF47FF42B631C0100F2B2C0 /* block.h */, + 4CF47FF52B631C0100F2B2C0 /* sha256.c */, + 4CF47FF62B631C0100F2B2C0 /* content_parser.c */, + 4CF47FF72B631C0100F2B2C0 /* bindings */, + 4CF4800B2B631C0100F2B2C0 /* bolt11 */, + 4CF480352B631C0100F2B2C0 /* protected_queue.h */, + 4CF480362B631C0100F2B2C0 /* random.h */, + 4CF480372B631C0100F2B2C0 /* invoice.c */, + ); + path = src; + sourceTree = "<group>"; + }; + 4CF47FF72B631C0100F2B2C0 /* bindings */ = { + isa = PBXGroup; + children = ( + 4CF47FF82B631C0100F2B2C0 /* rust */, + 4CF47FFC2B631C0100F2B2C0 /* swift */, + 4CF47FFF2B631C0100F2B2C0 /* c */, + ); + path = bindings; + sourceTree = "<group>"; + }; + 4CF47FF82B631C0100F2B2C0 /* rust */ = { + isa = PBXGroup; + children = ( + 4CF47FF92B631C0100F2B2C0 /* .dir */, + 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */, + 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */, + ); + path = rust; + sourceTree = "<group>"; + }; + 4CF47FFC2B631C0100F2B2C0 /* swift */ = { + isa = PBXGroup; + children = ( + 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */, + 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */, + ); + path = swift; + sourceTree = "<group>"; + }; + 4CF47FFF2B631C0100F2B2C0 /* c */ = { + isa = PBXGroup; + children = ( + 4CF480002B631C0100F2B2C0 /* profile_json_parser.h */, + 4CF480012B631C0100F2B2C0 /* profile_reader.h */, + 4CF480022B631C0100F2B2C0 /* meta_json_parser.h */, + 4CF480032B631C0100F2B2C0 /* profile_builder.h */, + 4CF480042B631C0100F2B2C0 /* meta_builder.h */, + 4CF480052B631C0100F2B2C0 /* profile_verifier.h */, + 4CF480062B631C0100F2B2C0 /* .dir */, + 4CF480072B631C0100F2B2C0 /* meta_reader.h */, + 4CF480082B631C0100F2B2C0 /* flatbuffers_common_reader.h */, + 4CF480092B631C0100F2B2C0 /* meta_verifier.h */, + 4CF4800A2B631C0100F2B2C0 /* flatbuffers_common_builder.h */, + ); + path = c; + sourceTree = "<group>"; + }; + 4CF4800B2B631C0100F2B2C0 /* bolt11 */ = { + isa = PBXGroup; + children = ( + 4CF4800C2B631C0100F2B2C0 /* amount.h */, + 4CF4800D2B631C0100F2B2C0 /* cppmagic.h */, + 4CF4800E2B631C0100F2B2C0 /* error.h */, + 4CF4800F2B631C0100F2B2C0 /* take.h */, + 4CF480102B631C0100F2B2C0 /* bolt11.c */, + 4CF480112B631C0100F2B2C0 /* structeq.h */, + 4CF480122B631C0100F2B2C0 /* list.c */, + 4CF480132B631C0100F2B2C0 /* debug.h */, + 4CF480142B631C0100F2B2C0 /* bech32_util.h */, + 4CF480152B631C0100F2B2C0 /* alignof.h */, + 4CF480162B631C0100F2B2C0 /* typesafe_cb.h */, + 4CF480172B631C0100F2B2C0 /* overflows.h */, + 4CF480182B631C0100F2B2C0 /* mem.c */, + 4CF480192B631C0100F2B2C0 /* container_of.h */, + 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */, + 4CF4801B2B631C0100F2B2C0 /* node_id.h */, + 4CF4801C2B631C0100F2B2C0 /* talstr.c */, + 4CF4801D2B631C0100F2B2C0 /* utf8.c */, + 4CF4801E2B631C0100F2B2C0 /* bech32.c */, + 4CF4801F2B631C0100F2B2C0 /* tal.c */, + 4CF480202B631C0100F2B2C0 /* list.h */, + 4CF480212B631C0100F2B2C0 /* str_debug.h */, + 4CF480222B631C0100F2B2C0 /* bolt11.h */, + 4CF480232B631C0100F2B2C0 /* take.c */, + 4CF480242B631C0100F2B2C0 /* likely.h */, + 4CF480252B631C0100F2B2C0 /* amount.c */, + 4CF480262B631C0100F2B2C0 /* error.c */, + 4CF480272B631C0100F2B2C0 /* array_size.h */, + 4CF480282B631C0100F2B2C0 /* bech32_util.c */, + 4CF480292B631C0100F2B2C0 /* str.h */, + 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */, + 4CF4802B2B631C0100F2B2C0 /* hash_u5.h */, + 4CF4802C2B631C0100F2B2C0 /* mem.h */, + 4CF4802D2B631C0100F2B2C0 /* build_assert.h */, + 4CF4802E2B631C0100F2B2C0 /* short_types.h */, + 4CF4802F2B631C0100F2B2C0 /* tal.h */, + 4CF480302B631C0100F2B2C0 /* bech32.h */, + 4CF480312B631C0100F2B2C0 /* check_type.h */, + 4CF480322B631C0100F2B2C0 /* utf8.h */, + 4CF480332B631C0100F2B2C0 /* talstr.h */, + 4CF480342B631C0100F2B2C0 /* node_id.c */, + ); + path = bolt11; + sourceTree = "<group>"; + }; 4CFF8F5729C9FD07008DB934 /* Purple */ = { isa = PBXGroup; children = ( @@ -5015,13 +5085,17 @@ 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 */, 4CE6DEEE27F7A08200C66700 /* Preview Assets.xcassets in Resources */, 3ACB685C297633BC00C46468 /* InfoPlist.strings in Resources */, 50DA11262A16A23F00236234 /* Launch.storyboard in Resources */, 4CE6DEEB27F7A08200C66700 /* Assets.xcassets in Resources */, 4C198DF129F88C6B004C165C /* License.txt in Resources */, + 4CF4803E2B631C0100F2B2C0 /* .dir in Resources */, 4C198DF029F88C6B004C165C /* Readme.md in Resources */, + 4CF4803F2B631C0100F2B2C0 /* ndb_profile.rs in Resources */, + 4CF480402B631C0100F2B2C0 /* ndb_meta.rs in Resources */, 3A4325A82961E11400BFCD9D /* Localizable.stringsdict in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -5105,7 +5179,6 @@ files = ( 4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */, 4CEF958D2A9CE650000F901B /* verifier.c in Sources */, - 4C32B9342A9AD01A00DC3548 /* NdbProfile.swift in Sources */, D73BDB0E2D6FF5F600D69970 /* NostrNetworkManager.swift in Sources */, 4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */, D7ADD3E22B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift in Sources */, @@ -5117,7 +5190,6 @@ 4C4793042A993DC000489948 /* midl.c in Sources */, 0E8A4BB72AE4359200065E81 /* NostrFilter+Hashable.swift in Sources */, 4C4793012A993CDA00489948 /* mdb.c in Sources */, - 4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */, ADFE73552AD4793100EC7326 /* QRScanNSECView.swift in Sources */, 4C3AC79D2833036D00E1F516 /* FollowingView.swift in Sources */, 5CF72FC229B9142F00124A13 /* ShareAction.swift in Sources */, @@ -5131,8 +5203,8 @@ D7CB5D512B1174D100AD4105 /* FriendFilter.swift in Sources */, D7CBD1D42B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift in Sources */, 4C32B9572A9AD44700DC3548 /* Root.swift in Sources */, - 4C3EA64428FF558100C48A62 /* sha256.c in Sources */, 5C8498032D5D150000F74FEB /* ZapExplainer.swift in Sources */, + 4CF4804B2B631C0100F2B2C0 /* tal.c in Sources */, 504323A72A34915F006AE6DC /* RelayModel.swift in Sources */, 3A2BAC5C2DD7E4C400EBB4CC /* NIP05DomainTimelineHeaderView.swift in Sources */, 4CF0ABF62985CD5500D66079 /* UserSearch.swift in Sources */, @@ -5157,7 +5229,6 @@ B57B4C662B312C3700A232C0 /* NostrAuth.swift in Sources */, D7DB930B2D69486700DA1EE5 /* NIP65.swift in Sources */, 4CB8838D296F710400DC99E7 /* Reposted.swift in Sources */, - 4C3EA67728FF7A9800C48A62 /* talstr.c in Sources */, 4CE6DEE927F7A08100C66700 /* ContentView.swift in Sources */, 4CEE2AF5280B29E600AB5EEF /* TimeAgo.swift in Sources */, 4CC14FF12A73FCDB007AEB17 /* Pubkey.swift in Sources */, @@ -5182,6 +5253,7 @@ 4C285C8A2838B985008A31F1 /* ProfilePictureSelector.swift in Sources */, 4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */, D7373BA62B688EA300F7783D /* DamusPurpleTranslationSetupView.swift in Sources */, + 4CF480482B631C0100F2B2C0 /* talstr.c in Sources */, 4C9F18E429ABDE6D008C55EC /* MaybeAnonPfpView.swift in Sources */, 4CA5588329F33F5B00DC6A45 /* StringCodable.swift in Sources */, 4C75EFB92804A2740006080F /* EventView.swift in Sources */, @@ -5191,10 +5263,13 @@ 4C687C272A6039500092C550 /* TestData.swift in Sources */, 50C3E08A2AA8E3F7006A4BC0 /* AVPlayer+Additions.swift in Sources */, 4C198DF229F88C6B004C165C /* BlurHashDecode.swift in Sources */, + 4CF480492B631C0100F2B2C0 /* utf8.c in Sources */, F75BA12F29A18EF500E10810 /* BookmarksView.swift in Sources */, 5C0567552C8B60C20073F23A /* OffsetExtension.swift in Sources */, 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 */, @@ -5204,6 +5279,7 @@ 3AB72AB9298ECF30004BB58C /* Translator.swift in Sources */, 4C363A9028247A1D006E126D /* NostrLink.swift in Sources */, 4C3D52B6298DB4E6001C5831 /* ZapEvent.swift in Sources */, + 4CF4804D2B631C0100F2B2C0 /* amount.c in Sources */, 647D9A8D2968520300A295DE /* SideMenuView.swift in Sources */, D7AAD0012E0387B800FB7699 /* LnurlAmountView.swift in Sources */, F7F0BA272978E54D009531F3 /* ParticipantsView.swift in Sources */, @@ -5246,6 +5322,7 @@ D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */, 4CA2EFA0280E37AC0044ACD8 /* TimelineView.swift in Sources */, D73BDB1A2D71311900D69970 /* UserRelayListErrors.swift in Sources */, + 4CF480512B631C0100F2B2C0 /* node_id.c in Sources */, 4C30AC7629A5770900E2BD5A /* NotificationItemView.swift in Sources */, 4C86F7C42A76C44C00EC0817 /* ZappingNotify.swift in Sources */, 4C363A8428233689006E126D /* Parser.swift in Sources */, @@ -5262,6 +5339,7 @@ 4CA3FA1029F593D000FDB3C3 /* ZapTypePicker.swift in Sources */, 4C32B95D2A9AD44700DC3548 /* Documentation.docc in Sources */, 4C3EA66828FF5F9900C48A62 /* hex.c in Sources */, + E9E4ED0B295867B900DD7078 /* ThreadView.swift in Sources */, 4CD348EF29C3659D00497EB2 /* ImageUploadModel.swift in Sources */, 4C3BEFDC281DCE6100B3DE84 /* Liked.swift in Sources */, 4CF0ABE7298444FD00D66079 /* EventMutingContainerView.swift in Sources */, @@ -5273,6 +5351,7 @@ 4C45E5022BED4D000025A428 /* ThreadReply.swift in Sources */, D74AAFD42B155ECB006CF0F4 /* Zaps+.swift in Sources */, 4C75EFB128049D510006080F /* NostrResponse.swift in Sources */, + 4CF480472B631C0100F2B2C0 /* hash_u5.c in Sources */, 4C7D09592A05BEAD00943473 /* KeyboardVisible.swift in Sources */, 4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */, 4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */, @@ -5293,6 +5372,7 @@ D71AC4CC2BA8E3480076268E /* VisibilityTracker.swift in Sources */, 4CE8794829941DA700F758CC /* RelayFilters.swift in Sources */, 4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */, + 4CF480522B631C0100F2B2C0 /* invoice.c in Sources */, 4C3BEFE0281DE1ED00B3DE84 /* DamusState.swift in Sources */, D7DB93062D66A44100DA1EE5 /* Undistractor.swift in Sources */, D72E12782BEED22500F4F781 /* Array.swift in Sources */, @@ -5302,6 +5382,7 @@ BA3759932ABCCEBA0018D73B /* CameraModel.swift in Sources */, D7FA46E72DBDAA7E002C9BB0 /* ImageCacheMigrations.swift in Sources */, D7100C5A2B76FD5100C59298 /* LogoView.swift in Sources */, + 4CF480442B631C0100F2B2C0 /* bolt11.c in Sources */, 4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */, 4C3AC79F2833115300E1F516 /* FollowButtonView.swift in Sources */, 3A515C502DF4E100002D3B34 /* TrustedNetworkRepliesTip.swift in Sources */, @@ -5314,18 +5395,22 @@ 4CA352AA2A76BF3A003BB08B /* LocalNotificationNotify.swift in Sources */, D7315A2A2ACDF3B70036E30A /* DamusCacheManager.swift in Sources */, D7373BA82B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift in Sources */, + 4CF4804E2B631C0100F2B2C0 /* error.c in Sources */, 4C7D09682A0AE9B200943473 /* NWCScannerView.swift in Sources */, D74E64152DC95CC7004C7892 /* HumanReadableErrors.swift in Sources */, 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 */, 4C7D09722A0AEF5E00943473 /* DamusGradient.swift in Sources */, 4C463CBF2B960B96008A8C36 /* PurpleBackdrop.swift in Sources */, BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */, + 4CF4804C2B631C0100F2B2C0 /* take.c in Sources */, 3169CAE6294E69C000EE4006 /* EmptyTimelineView.swift in Sources */, + 4CF4803A2B631C0100F2B2C0 /* nostr_bech32.c in Sources */, 4C32B9602A9AD44700DC3548 /* Struct.swift in Sources */, 4CC7AAF0297F11C700430951 /* SelectedEventView.swift in Sources */, 4CC7AAF8297F1CEE00430951 /* EventProfile.swift in Sources */, @@ -5335,13 +5420,11 @@ D7D2A3812BF815D000E4B42B /* PushNotificationClient.swift in Sources */, 4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */, 4CA352AC2A76C07F003BB08B /* NewUnmutesNotify.swift in Sources */, - 4C3EA64928FF597700C48A62 /* bech32.c in Sources */, D7870BC32AC47EBC0080BA88 /* EventLoaderView.swift in Sources */, 4CE879522996B68900F758CC /* RelayType.swift in Sources */, 4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */, 4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */, D78F08142D7F78F900FC6C75 /* Response.swift in Sources */, - 4C3EA67528FF7A5A00C48A62 /* take.c in Sources */, 4C3AC7A12835A81400E1F516 /* SetupView.swift in Sources */, 4C06670128FC7C5900038D2A /* RelayView.swift in Sources */, 4C285C8C28398BC7008A31F1 /* Keys.swift in Sources */, @@ -5367,7 +5450,6 @@ 4C54AA0A29A55429003E4487 /* EventGroup.swift in Sources */, D73B74E12D8365BA0067BDBC /* ExtraFonts.swift in Sources */, 4C7D09622A098D0E00943473 /* WalletConnect.swift in Sources */, - 4C3EA67928FF7ABF00C48A62 /* list.c in Sources */, 4C64987E286D082C00EAE2B3 /* DirectMessagesModel.swift in Sources */, 4C12535E2A76CA870004F4B8 /* SwitchedTimelineNotify.swift in Sources */, D74F430A2B23F0BE00425B75 /* DamusPurple.swift in Sources */, @@ -5386,6 +5468,7 @@ F71694F82A6983AF001F4053 /* GrayGradient.swift in Sources */, 4C1D4FB12A7958E60024F453 /* VersionInfo.swift in Sources */, D7FF94002AC7AC5300FD969D /* RelayURL.swift in Sources */, + 4CF480412B631C0100F2B2C0 /* NdbMeta.swift in Sources */, 4C64305C2A945AFF00B0C0E9 /* MusicController.swift in Sources */, 5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */, F79C7FAD29D5E9620000F946 /* EditPictureControl.swift in Sources */, @@ -5402,7 +5485,7 @@ 5CC8529D2BD741CD0039FFC5 /* HighlightEvent.swift in Sources */, 4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */, 4C75EFAF28049D350006080F /* NostrFilter.swift in Sources */, - 4C3EA64C28FF59AC00C48A62 /* bech32_util.c in Sources */, + 4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */, 4CA9276C2A2910D10098A105 /* ReplyPart.swift in Sources */, D7C6787E2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift in Sources */, 5CB017252D42C5C400A9ED05 /* TransactionsView.swift in Sources */, @@ -5414,7 +5497,6 @@ 3AA24802297E3DC20090C62D /* RepostView.swift in Sources */, 5C6E1DAF2A194075008FC15A /* PinkGradient.swift in Sources */, 4CD7641B28A1641400B6928F /* EndBlock.swift in Sources */, - 4C3EA66528FF5F6800C48A62 /* mem.c in Sources */, 4C198DEF29F88C6B004C165C /* BlurHashEncode.swift in Sources */, 4CF0ABE52981EE0C00D66079 /* EULAView.swift in Sources */, 4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */, @@ -5429,10 +5511,12 @@ 4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */, D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */, D73FA9E12DDC12AA00C706E1 /* OnboardingContentSettings.swift in Sources */, - 4C3EA64F28FF59F200C48A62 /* tal.c in Sources */, + 4CB88393296F798300DC99E7 /* ReactionsModel.swift in Sources */, 5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */, 4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */, 50A16FFD2AA7525700DFEC1F /* DamusVideoPlayer.swift in Sources */, + 4CF480552B631C4F00F2B2C0 /* wasm.c in Sources */, + 50A16FFD2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift in Sources */, 4CFF8F6B29CD0079008DB934 /* RepostedEvent.swift in Sources */, D78CD5982B8990300014D539 /* DamusAppNotificationView.swift in Sources */, D724D8272B64B40B00ABE789 /* DamusPurpleAccountView.swift in Sources */, @@ -5483,20 +5567,21 @@ 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 */, - 4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */, D7CB5D5C2B1176B200AD4105 /* MediaUploader.swift in Sources */, 5C4FA7FD2DC29C3800CE658C /* FollowPackView.swift in Sources */, 4C1253562A76C8C60004F4B8 /* BroadcastNotify.swift in Sources */, + 4CF480392B631C0100F2B2C0 /* block.c in Sources */, 4C3BEFD42819DE8F00B3DE84 /* NostrKind.swift in Sources */, B533694E2B66D791008A805E /* MutelistManager.swift in Sources */, 4C32B9532A9AD44700DC3548 /* Verifier.swift in Sources */, 5C14C29D2BBBA40B00079FD2 /* RelayAdminDetail.swift in Sources */, - 4C3EA66028FF5E7700C48A62 /* node_id.c in Sources */, 4C687C212A5F7ED00092C550 /* DamusBackground.swift in Sources */, 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 */, @@ -5504,8 +5589,6 @@ 4C5F9116283D855D0052CD1C /* EventsModel.swift in Sources */, 4C32B94F2A9AD44700DC3548 /* Int+extension.swift in Sources */, 4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */, - 4C06670E28FDEAA000038D2A /* utf8.c in Sources */, - 4C3EA66D28FF782800C48A62 /* amount.c in Sources */, 4C32B9562A9AD44700DC3548 /* TableVerifier.swift in Sources */, 5CF2DCCE2AABE1A500984B8D /* DamusLightGradient.swift in Sources */, 4C5E54062A9671F800FF6E60 /* UserStatusSheet.swift in Sources */, @@ -5557,18 +5640,17 @@ E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */, 4CB8FC232A41ABA800763C51 /* AboutView.swift in Sources */, D74AAFCC2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */, + 4CF480382B631C0100F2B2C0 /* nostrdb.c in Sources */, 5C513FBA297F72980072348F /* CustomPicker.swift in Sources */, 4C1253622A76D00B0004F4B8 /* PostNotify.swift in Sources */, 4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */, 5CB017232D2D985E00A9ED05 /* CoinosButton.swift in Sources */, F7908E92298B0F0700AB113A /* RelayDetailView.swift in Sources */, - 4C9147002A2A891E00DDEA40 /* error.c in Sources */, 4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */, 5CB0172F2D42C76A00A9ED05 /* BalanceView.swift in Sources */, 4C1253602A76CF890004F4B8 /* ScrollToTopNotify.swift in Sources */, 4CA3529E2A76AE67003BB08B /* FollowNotify.swift in Sources */, 4CF0ABD42980996B00D66079 /* Report.swift in Sources */, - 4C06670B28FDE64700038D2A /* damus.c in Sources */, 4C1253642A76D08F0004F4B8 /* ReportNotify.swift in Sources */, 4C1A9A2529DDDF2600516EAC /* ZapSettingsView.swift in Sources */, 4C2CDDF7299D4A5E00879FD5 /* Debouncer.swift in Sources */, @@ -5581,6 +5663,7 @@ 4CE879502996B2BD00F758CC /* RelayStatusView.swift in Sources */, 4CC7AAF4297F18B400430951 /* ReplyDescription.swift in Sources */, 4C75EFA427FA577B0006080F /* PostView.swift in Sources */, + 4CF4804A2B631C0100F2B2C0 /* bech32.c in Sources */, 4C30AC7229A5677A00E2BD5A /* NotificationsView.swift in Sources */, 4C1A9A2129DDD3E100516EAC /* KeySettingsView.swift in Sources */, D723C38E2AB8D83400065664 /* ContentFilters.swift in Sources */, @@ -5606,6 +5689,7 @@ 4C1A9A1F29DDD24B00516EAC /* AppearanceSettingsView.swift in Sources */, 3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */, 3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */, + 4CF4804F2B631C0100F2B2C0 /* bech32_util.c in Sources */, 4C9AA14A2A4587A6003F49FD /* NotificationStatusModel.swift in Sources */, D7100C5C2B77016700C59298 /* IAPProductStateView.swift in Sources */, 4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */, @@ -6731,7 +6815,6 @@ D7CE1B1D2B0BE14A002EDAD4 /* verifier.c in Sources */, D7CB5D4F2B11728000AD4105 /* NewEventsBits.swift in Sources */, D7CB5D412B116F0900AD4105 /* StringCodable.swift in Sources */, - D7CE1B1F2B0BE1B8002EDAD4 /* damus.c in Sources */, D7CE1B1B2B0BE144002EDAD4 /* emitter.c in Sources */, D7EDED342B12ACAE0018B19C /* DamusUserDefaults.swift in Sources */, D74AAFC72B155BD0006CF0F4 /* Zap.swift in Sources */, @@ -6750,13 +6833,11 @@ D7CB5D402B116E8A00AD4105 /* UserSettingsStore.swift in Sources */, D7CE1B1C2B0BE147002EDAD4 /* refmap.c in Sources */, D74AAFC92B155CA5006CF0F4 /* UpdateStatsNotify.swift in Sources */, - D7CE1B242B0BE1F1002EDAD4 /* hash_u5.c in Sources */, D79C4C172AFEB061003A41B4 /* NotificationService.swift in Sources */, D7CB5D522B1174D100AD4105 /* FriendFilter.swift in Sources */, D7CE1B362B0BE702002EDAD4 /* FbConstants.swift in Sources */, D74AAFD12B155DA4006CF0F4 /* RelayURL.swift in Sources */, D7EDED272B117FF10018B19C /* CompatibleAttribute.swift in Sources */, - D7CE1B222B0BE1EB002EDAD4 /* utf8.c in Sources */, D74AAFCD2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */, D7CCFC072B05833200323D86 /* NdbNote.swift in Sources */, D7CE1B3F2B0BE719002EDAD4 /* Enum.swift in Sources */, @@ -6765,12 +6846,9 @@ D7EDED222B117DCA0018B19C /* SequenceUtils.swift in Sources */, D7CE1B422B0BE719002EDAD4 /* Offset.swift in Sources */, D7FB10A72B0C371A00FA8D42 /* Log.swift in Sources */, - D7CE1B232B0BE1EE002EDAD4 /* bolt11.c in Sources */, D7CE1B182B0BDFDD002EDAD4 /* mdb.c in Sources */, D7CCFC162B05894300323D86 /* Pubkey.swift in Sources */, - D7CE1B292B0BE239002EDAD4 /* node_id.c in Sources */, D7EDED2C2B128CFA0018B19C /* DamusColors.swift in Sources */, - D7CE1B2E2B0BE25C002EDAD4 /* talstr.c in Sources */, D74AAFC52B1538DF006CF0F4 /* NotificationExtensionState.swift in Sources */, D798D2292B08686C00234419 /* ContentParsing.swift in Sources */, D798D2242B0859C900234419 /* LocalizationUtil.swift in Sources */, @@ -6780,20 +6858,13 @@ D723411A2B6864F200E1E135 /* DamusPurpleEnvironment.swift in Sources */, D7EDED292B1182060018B19C /* AttachMediaUtility.swift in Sources */, D798D21A2B0856CC00234419 /* Mentions.swift in Sources */, - D7CE1B212B0BE1CB002EDAD4 /* wasm.c in Sources */, D7CE1B3B2B0BE719002EDAD4 /* Int+extension.swift in Sources */, D74AAFC62B155B8B006CF0F4 /* Zaps.swift in Sources */, - D7CCFC0B2B0585EA00323D86 /* nostrdb.c in Sources */, - D7CE1B252B0BE1F4002EDAD4 /* sha256.c in Sources */, - D773BC612C6D58A700349F0A /* CommentItem.swift in Sources */, - D7CE1B262B0BE1F8002EDAD4 /* bech32.c in Sources */, D7EDED232B117DFB0018B19C /* NoteContent.swift in Sources */, D798D21B2B0856F200234419 /* NdbTagsIterator.swift in Sources */, D7CE1B352B0BE6FA002EDAD4 /* ByteBuffer.swift in Sources */, - D7CE1B2F2B0BE260002EDAD4 /* list.c in Sources */, D7CB5D422B116F8900AD4105 /* Contacts.swift in Sources */, D7CB5D5D2B1176B200AD4105 /* MediaUploader.swift in Sources */, - D7CE1B342B0BE6EE002EDAD4 /* NdbProfile.swift in Sources */, D7DBD41F2B02F15E002A6197 /* NostrKind.swift in Sources */, D7CE1B3C2B0BE719002EDAD4 /* TableVerifier.swift in Sources */, D7EDED2F2B128E8A0018B19C /* CollectionExtension.swift in Sources */, @@ -6807,12 +6878,10 @@ D7CB5D542B1174F700AD4105 /* NIP05.swift in Sources */, D798D2232B0859B700234419 /* KeychainStorage.swift in Sources */, D74AAFC32B153395006CF0F4 /* HeadlessDamusState.swift in Sources */, - D7CE1B272B0BE224002EDAD4 /* bech32_util.c in Sources */, D78F08122D7F78F900FC6C75 /* Response.swift in Sources */, D7CCFC102B05880F00323D86 /* Id.swift in Sources */, D7CB5D532B1174E900AD4105 /* DeepLPlan.swift in Sources */, D7EDED282B1180940018B19C /* ImageUploadModel.swift in Sources */, - D7CE1B2A2B0BE23E002EDAD4 /* mem.c in Sources */, D7CB5D4C2B11721600AD4105 /* ZapType.swift in Sources */, D7EDED2B2B128CDB0018B19C /* Hashtags.swift in Sources */, D7CE1B332B0BE6DE002EDAD4 /* Nostr.swift in Sources */, @@ -6820,28 +6889,23 @@ D7CE1B382B0BE719002EDAD4 /* VeriferOptions.swift in Sources */, D78F080F2D7F78EF00FC6C75 /* Request.swift in Sources */, D7CCFC152B05891000323D86 /* Referenced.swift in Sources */, - D7CE1B2B2B0BE243002EDAD4 /* hex.c in Sources */, D798D2222B08598A00234419 /* ReferencedId.swift in Sources */, D78F081A2D7F803100FC6C75 /* NIP04.swift in Sources */, D7B76C912C82507F003A16CB /* NIP98AuthenticatedRequest.swift in Sources */, D7CE1B492B0BE729002EDAD4 /* DisplayName.swift in Sources */, D7CE1B192B0BE132002EDAD4 /* builder.c in Sources */, D7EDED1F2B11797D0018B19C /* LongformEvent.swift in Sources */, - D7CE1B282B0BE226002EDAD4 /* tal.c in Sources */, D7CCFC122B05886D00323D86 /* IdType.swift in Sources */, D7CE1B312B0BE69D002EDAD4 /* Ndb.swift in Sources */, D7CE1B3A2B0BE719002EDAD4 /* Struct.swift in Sources */, D70A3B172B02DCE5008BD568 /* NotificationFormatter.swift in Sources */, D7CE1B462B0BE719002EDAD4 /* FlatBufferBuilder.swift in Sources */, D7CE1B3E2B0BE719002EDAD4 /* FlatbuffersErrors.swift in Sources */, - D7CE1B2C2B0BE24B002EDAD4 /* amount.c in Sources */, D7EDED152B11776B0018B19C /* LibreTranslateServer.swift in Sources */, - D7CE1B202B0BE1C8002EDAD4 /* error.c in Sources */, D7CB5D582B11763C00AD4105 /* NewMutesNotify.swift in Sources */, D798D22D2B086DC400234419 /* NostrEvent.swift in Sources */, D798D22E2B086E4800234419 /* NostrResponse.swift in Sources */, D7EDED162B1177840018B19C /* LNUrls.swift in Sources */, - D7CE1B302B0BE263002EDAD4 /* nostr_bech32.c in Sources */, D7CCFC132B05887C00323D86 /* ProofOfWork.swift in Sources */, D7CE1B392B0BE719002EDAD4 /* Table.swift in Sources */, D7CE1B452B0BE719002EDAD4 /* Root.swift in Sources */, @@ -7188,6 +7252,7 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", + "$(PROJECT_DIR)/nostrdb/src/bolt11", ); PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -7240,6 +7305,7 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", + "$(PROJECT_DIR)/nostrdb/src/bolt11", ); PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/nostrdb/damus-Bridging-Header.h b/nostrdb/damus-Bridging-Header.h @@ -1,13 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// - -#include "damus.h" -#include "bolt11.h" -#include "amount.h" -#include "nostr_bech32.h" -#include "wasm.h" -#include "nostrscript.h" -#include "nostrdb.h" -#include "lmdb.h" - diff --git a/nostrdb/damus.c b/nostrdb/damus.c @@ -1,393 +0,0 @@ -// -// damus.c -// damus -// -// Created by William Casarin on 2022-10-17. -// - -#include "damus.h" -#include "cursor.h" -#include "bolt11.h" -#include "bech32.h" -#include <stdlib.h> -#include <string.h> - -static int parse_digit(struct cursor *cur, int *digit) { - int c; - if ((c = peek_char(cur, 0)) == -1) - return 0; - - c -= '0'; - - if (c >= 0 && c <= 9) { - *digit = c; - cur->p++; - return 1; - } - return 0; -} - - -static int parse_mention_index(struct cursor *cur, struct note_block *block) { - int d1, d2, d3, ind; - u8 *start = cur->p; - - if (!parse_str(cur, "#[")) - return 0; - - if (!parse_digit(cur, &d1)) { - cur->p = start; - return 0; - } - - ind = d1; - - if (parse_digit(cur, &d2)) - ind = (d1 * 10) + d2; - - if (parse_digit(cur, &d3)) - ind = (d1 * 100) + (d2 * 10) + d3; - - if (!parse_char(cur, ']')) { - cur->p = start; - return 0; - } - - block->type = BLOCK_MENTION_INDEX; - block->block.mention_index = ind; - - return 1; -} - -static int parse_hashtag(struct cursor *cur, struct note_block *block) { - int c; - u8 *start = cur->p; - - if (!parse_char(cur, '#')) - return 0; - - c = peek_char(cur, 0); - if (c == -1 || is_whitespace(c) || c == '#') { - cur->p = start; - return 0; - } - - consume_until_boundary(cur); - - block->type = BLOCK_HASHTAG; - block->block.str.start = (const char*)(start + 1); - block->block.str.end = (const char*)cur->p; - - return 1; -} - -static int add_block(struct note_blocks *blocks, struct note_block block) -{ - if (blocks->num_blocks + 1 >= MAX_BLOCKS) - return 0; - - blocks->blocks[blocks->num_blocks++] = block; - return 1; -} - -static int add_text_block(struct note_blocks *blocks, const u8 *start, const u8 *end) -{ - struct note_block b; - - if (start == end) - return 1; - - b.type = BLOCK_TEXT; - b.block.str.start = (const char*)start; - b.block.str.end = (const char*)end; - - return add_block(blocks, b); -} - -static int consume_url_fragment(struct cursor *cur) -{ - int c; - - if ((c = peek_char(cur, 0)) < 0) - return 1; - - if (c != '#' && c != '?') { - return 1; - } - - cur->p++; - - return consume_until_end_url(cur, 1); -} - -static int consume_url_path(struct cursor *cur) -{ - int c; - - if ((c = peek_char(cur, 0)) < 0) - return 1; - - if (c != '/') { - return 1; - } - - while (cur->p < cur->end) { - c = *cur->p; - - if (c == '?' || c == '#' || is_final_url_char(cur->p, cur->end)) { - return 1; - } - - cur->p++; - } - - return 1; -} - -static int consume_url_host(struct cursor *cur) -{ - char c; - int count = 0; - - while (cur->p < cur->end) { - c = *cur->p; - // TODO: handle IDNs - if ((is_alphanumeric(c) || c == '.' || c == '-') && !is_final_url_char(cur->p, cur->end)) - { - count++; - cur->p++; - continue; - } - - return count != 0; - } - - - // this means the end of the URL hostname is the end of the buffer and we finished - return count != 0; -} - -static int parse_url(struct cursor *cur, struct note_block *block) { - u8 *start = cur->p; - u8 *host; - int host_len; - struct cursor path_cur; - - if (!parse_str(cur, "http")) - return 0; - - if (parse_char(cur, 's') || parse_char(cur, 'S')) { - if (!parse_str(cur, "://")) { - cur->p = start; - return 0; - } - } else { - if (!parse_str(cur, "://")) { - cur->p = start; - return 0; - } - } - - // make sure to save the hostname. We will use this to detect damus.io links - host = cur->p; - - if (!consume_url_host(cur)) { - cur->p = start; - return 0; - } - - // get the length of the host string - host_len = (int)(cur->p - host); - - // save the current parse state so that we can continue from here when - // parsing the bech32 in the damus.io link if we have it - copy_cursor(cur, &path_cur); - - // skip leading / - cursor_skip(&path_cur, 1); - - if (!consume_url_path(cur)) { - cur->p = start; - return 0; - } - - if (!consume_url_fragment(cur)) { - cur->p = start; - return 0; - } - - // smart parens - if (start - 1 >= 0 && - start < cur->end && - *(start - 1) == '(' && - (cur->p - 1) < cur->end && - *(cur->p - 1) == ')') - { - cur->p--; - } - - // save the bech32 string pos in case we hit a damus.io link - block->block.str.start = (const char *)path_cur.p; - - // if we have a damus link, make it a mention - if (host_len == 8 - && !strncmp((const char *)host, "damus.io", 8) - && parse_nostr_bech32(&path_cur, &block->block.mention_bech32.bech32)) - { - block->block.str.end = (const char *)path_cur.p; - block->type = BLOCK_MENTION_BECH32; - return 1; - } - - block->type = BLOCK_URL; - block->block.str.start = (const char *)start; - block->block.str.end = (const char *)cur->p; - - return 1; -} - -static int parse_invoice(struct cursor *cur, struct note_block *block) { - u8 *start, *end; - char *fail; - struct bolt11 *bolt11; - // optional - parse_str(cur, "lightning:"); - - start = cur->p; - - if (!parse_str(cur, "lnbc")) - return 0; - - if (!consume_until_whitespace(cur, 1)) { - cur->p = start; - return 0; - } - - end = cur->p; - - char str[end - start + 1]; - str[end - start] = 0; - memcpy(str, start, end - start); - - if (!(bolt11 = bolt11_decode(NULL, str, &fail))) { - cur->p = start; - return 0; - } - - block->type = BLOCK_INVOICE; - - block->block.invoice.invstr.start = (const char*)start; - block->block.invoice.invstr.end = (const char*)end; - block->block.invoice.bolt11 = bolt11; - - cur->p = end; - - return 1; -} - - -static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { - u8 *start = cur->p; - - parse_char(cur, '@'); - parse_str(cur, "nostr:"); - - block->block.str.start = (const char *)cur->p; - - if (!parse_nostr_bech32(cur, &block->block.mention_bech32.bech32)) { - cur->p = start; - return 0; - } - - block->block.str.end = (const char *)cur->p; - - block->type = BLOCK_MENTION_BECH32; - - return 1; -} - -static int add_text_then_block(struct cursor *cur, struct note_blocks *blocks, struct note_block block, u8 **start, const u8 *pre_mention) -{ - if (!add_text_block(blocks, *start, pre_mention)) - return 0; - - *start = (u8*)cur->p; - - if (!add_block(blocks, block)) - return 0; - - return 1; -} - -int damus_parse_content(struct note_blocks *blocks, const char *content) { - int cp, c; - struct cursor cur; - struct note_block block; - u8 *start, *pre_mention; - - blocks->words = 0; - blocks->num_blocks = 0; - make_cursor((u8*)content, (u8*)content + strlen(content), &cur); - - start = cur.p; - while (cur.p < cur.end && blocks->num_blocks < MAX_BLOCKS) { - cp = peek_char(&cur, -1); - c = peek_char(&cur, 0); - - // new word - if (is_whitespace(cp) && !is_whitespace(c)) { - blocks->words++; - } - - pre_mention = cur.p; - if (cp == -1 || is_left_boundary(cp) || c == '#') { - if (c == '#' && (parse_mention_index(&cur, &block) || parse_hashtag(&cur, &block))) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } else if ((c == 'h' || c == 'H') && parse_url(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } else if ((c == 'l' || c == 'L') && parse_invoice(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } else if ((c == 'n' || c == '@') && parse_mention_bech32(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } - } - - cur.p++; - } - - if (cur.p - start > 0) { - if (!add_text_block(blocks, start, cur.p)) - return 0; - } - - return 1; -} - -void blocks_init(struct note_blocks *blocks) { - blocks->blocks = malloc(sizeof(struct note_block) * MAX_BLOCKS); - blocks->num_blocks = 0; -} - -void blocks_free(struct note_blocks *blocks) { - if (!blocks->blocks) { - return; - } - - for (int i = 0; i < blocks->num_blocks; ++i) { - if (blocks->blocks[i].type == BLOCK_MENTION_BECH32) { - free(blocks->blocks[i].block.mention_bech32.bech32.buffer); - blocks->blocks[i].block.mention_bech32.bech32.buffer = NULL; - } - } - - free(blocks->blocks); - blocks->num_blocks = 0; -} diff --git a/nostrdb/damus.h b/nostrdb/damus.h @@ -1,18 +0,0 @@ -// -// damus.h -// damus -// -// Created by William Casarin on 2022-10-17. -// - -#ifndef damus_h -#define damus_h - -#include <stdio.h> -#include "block.h" - -typedef unsigned char u8; - -int damus_parse_content(struct note_blocks *blocks, const char *content); - -#endif /* damus_h */