2022-04-02 23:57:42 +00:00
|
|
|
// !$*UTF8*$!
|
|
|
|
{
|
|
|
|
archiveVersion = 1;
|
|
|
|
classes = {
|
|
|
|
};
|
|
|
|
objectVersion = 55;
|
|
|
|
objects = {
|
|
|
|
|
|
|
|
/* Begin PBXBuildFile section */
|
2023-10-21 17:25:21 +00:00
|
|
|
0E8A4BB72AE4359200065E81 /* NostrFilter+Hashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8A4BB62AE4359200065E81 /* NostrFilter+Hashable.swift */; };
|
2022-12-27 19:38:52 +00:00
|
|
|
3165648B295B70D500C64604 /* LinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3165648A295B70D500C64604 /* LinkView.swift */; };
|
2022-12-20 16:20:37 +00:00
|
|
|
3169CAE6294E69C000EE4006 /* EmptyTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3169CAE5294E69C000EE4006 /* EmptyTimelineView.swift */; };
|
2022-12-18 23:37:53 +00:00
|
|
|
3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3169CAEC294FCCFC00EE4006 /* Constants.swift */; };
|
2022-12-20 16:39:29 +00:00
|
|
|
31D2E847295218AF006D67F8 /* Shimmer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D2E846295218AF006D67F8 /* Shimmer.swift */; };
|
2023-06-02 00:51:50 +00:00
|
|
|
3A23838E2A297DD200E5AA2E /* ZapButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A23838D2A297DD200E5AA2E /* ZapButtonModel.swift */; };
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040ED29A5CB86008A0F29 /* ReplyDescriptionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3040EC29A5CB86008A0F29 /* ReplyDescriptionTests.swift */; };
|
|
|
|
3A3040F129A8FF97008A0F29 /* LocalizationUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3040F029A8FF97008A0F29 /* LocalizationUtil.swift */; };
|
|
|
|
3A3040F329A91366008A0F29 /* ProfileViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3040F229A91366008A0F29 /* ProfileViewTests.swift */; };
|
2023-02-26 18:01:23 +00:00
|
|
|
3A30410129AB12AA008A0F29 /* EventGroupViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A30410029AB12AA008A0F29 /* EventGroupViewTests.swift */; };
|
2022-12-31 21:27:17 +00:00
|
|
|
3A4325A82961E11400BFCD9D /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 3A4325AA2961E11400BFCD9D /* Localizable.stringsdict */; };
|
2023-06-20 04:54:26 +00:00
|
|
|
3A4647CF2A413ADC00386AD8 /* CondensedProfilePicturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A4647CE2A413ADC00386AD8 /* CondensedProfilePicturesView.swift */; };
|
2023-04-08 18:44:50 +00:00
|
|
|
3A48E7B029DFBE9D006E787E /* MutedThreadsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A48E7AF29DFBE9D006E787E /* MutedThreadsManager.swift */; };
|
2023-07-01 18:42:36 +00:00
|
|
|
3A5E47C52A4A6CF400C0D090 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A5E47C42A4A6CF400C0D090 /* Trie.swift */; };
|
|
|
|
3A5E47C72A4A76C800C0D090 /* TrieTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A5E47C62A4A76C800C0D090 /* TrieTests.swift */; };
|
2023-06-04 21:49:37 +00:00
|
|
|
3A8CC6CC2A2CFEF900940F5F /* StringUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8CC6CB2A2CFEF900940F5F /* StringUtil.swift */; };
|
2023-07-01 18:42:36 +00:00
|
|
|
3A90B1812A4EA3AF00000D94 /* UserSearchCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A90B1802A4EA3AF00000D94 /* UserSearchCache.swift */; };
|
|
|
|
3A90B1832A4EA3C600000D94 /* UserSearchCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A90B1822A4EA3C600000D94 /* UserSearchCacheTests.swift */; };
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA247FF297E3D900090C62D /* RepostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA247FE297E3D900090C62D /* RepostsView.swift */; };
|
|
|
|
3AA24802297E3DC20090C62D /* RepostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA24801297E3DC20090C62D /* RepostView.swift */; };
|
2023-03-31 17:01:31 +00:00
|
|
|
3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA59D1C2999B0400061C48E /* DraftsModel.swift */; };
|
2023-02-04 17:07:27 +00:00
|
|
|
3AAA95CA298DF87B00F3D526 /* TranslationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA95C9298DF87B00F3D526 /* TranslationService.swift */; };
|
|
|
|
3AAA95CC298E07E900F3D526 /* DeepLPlan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */; };
|
2023-07-14 04:21:08 +00:00
|
|
|
3AAC7A022A60FE72002B50DF /* LocalizationUtilTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAC7A012A60FE72002B50DF /* LocalizationUtilTests.swift */; };
|
2023-02-04 17:07:27 +00:00
|
|
|
3AB72AB9298ECF30004BB58C /* Translator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB72AB8298ECF30004BB58C /* Translator.swift */; };
|
2023-01-17 01:44:41 +00:00
|
|
|
3ACB685C297633BC00C46468 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3ACB685A297633BC00C46468 /* InfoPlist.strings */; };
|
|
|
|
3ACB685F297633BC00C46468 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3ACB685D297633BC00C46468 /* Localizable.strings */; };
|
2022-12-31 04:32:33 +00:00
|
|
|
3ACBCB78295FE5C70037388A /* TimeAgoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ACBCB77295FE5C70037388A /* TimeAgoTests.swift */; };
|
2023-01-20 02:59:37 +00:00
|
|
|
3AE45AF6297BB2E700C1D842 /* LibreTranslateServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE45AF5297BB2E700C1D842 /* LibreTranslateServer.swift */; };
|
2024-04-20 18:27:24 +00:00
|
|
|
3AFE89C32BD4156F00AD31EF /* MCEmojiPicker in Frameworks */ = {isa = PBXBuildFile; productRef = 3AFE89C22BD4156F00AD31EF /* MCEmojiPicker */; };
|
2023-08-20 01:09:30 +00:00
|
|
|
3CCD1E6A2A874C4E0099A953 /* Nip98HTTPAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CCD1E692A874C4E0099A953 /* Nip98HTTPAuth.swift */; };
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670128FC7C5900038D2A /* RelayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670028FC7C5900038D2A /* RelayView.swift */; };
|
|
|
|
4C06670428FC7EC500038D2A /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 4C06670328FC7EC500038D2A /* Kingfisher */; };
|
2022-10-16 23:11:27 +00:00
|
|
|
4C06670628FCB08600038D2A /* ImageCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670528FCB08600038D2A /* ImageCarousel.swift */; };
|
2022-10-17 22:20:38 +00:00
|
|
|
4C06670B28FDE64700038D2A /* damus.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670A28FDE64700038D2A /* damus.c */; };
|
|
|
|
4C06670E28FDEAA000038D2A /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670D28FDEAA000038D2A /* utf8.c */; };
|
2022-04-20 02:46:30 +00:00
|
|
|
4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F8E280F640A000448DE /* ThreadModel.swift */; };
|
|
|
|
4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F92280F66F5000448DE /* ReplyMap.swift */; };
|
2023-07-14 20:07:39 +00:00
|
|
|
4C0C03992A61E27B0098B3B8 /* primal.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 4C0C03972A61E27B0098B3B8 /* primal.wasm */; };
|
|
|
|
4C0C039A2A61E27B0098B3B8 /* bool_setting.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 4C0C03982A61E27B0098B3B8 /* bool_setting.wasm */; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253502A76C5B20004F4B8 /* UnfollowedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C12534F2A76C5B20004F4B8 /* UnfollowedNotify.swift */; };
|
|
|
|
4C1253522A76C6130004F4B8 /* ComposeNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253512A76C6130004F4B8 /* ComposeNotify.swift */; };
|
|
|
|
4C1253542A76C7D60004F4B8 /* LogoutNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253532A76C7D60004F4B8 /* LogoutNotify.swift */; };
|
|
|
|
4C1253562A76C8C60004F4B8 /* BroadcastNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253552A76C8C60004F4B8 /* BroadcastNotify.swift */; };
|
|
|
|
4C1253582A76C9060004F4B8 /* PresentSheetNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253572A76C9060004F4B8 /* PresentSheetNotify.swift */; };
|
|
|
|
4C12535A2A76C9960004F4B8 /* UnfollowNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253592A76C9960004F4B8 /* UnfollowNotify.swift */; };
|
|
|
|
4C12535C2A76CA540004F4B8 /* LoginNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C12535B2A76CA540004F4B8 /* LoginNotify.swift */; };
|
|
|
|
4C12535E2A76CA870004F4B8 /* SwitchedTimelineNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C12535D2A76CA870004F4B8 /* SwitchedTimelineNotify.swift */; };
|
|
|
|
4C1253602A76CF890004F4B8 /* ScrollToTopNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C12535F2A76CF890004F4B8 /* ScrollToTopNotify.swift */; };
|
|
|
|
4C1253622A76D00B0004F4B8 /* PostNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253612A76D00B0004F4B8 /* PostNotify.swift */; };
|
|
|
|
4C1253642A76D08F0004F4B8 /* ReportNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253632A76D08F0004F4B8 /* ReportNotify.swift */; };
|
|
|
|
4C1253662A76D0FF0004F4B8 /* OnlyZapsNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253652A76D0FF0004F4B8 /* OnlyZapsNotify.swift */; };
|
|
|
|
4C1253682A76D2470004F4B8 /* MuteNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253672A76D2470004F4B8 /* MuteNotify.swift */; };
|
|
|
|
4C12536A2A76D3850004F4B8 /* RelaysChangedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */; };
|
2023-07-29 16:42:59 +00:00
|
|
|
4C15C7152A55DE7A00D0A0DB /* ReactionsSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C15C7142A55DE7A00D0A0DB /* ReactionsSettingsView.swift */; };
|
2023-06-03 01:51:49 +00:00
|
|
|
4C190F202A535FC200027FD5 /* CustomizeZapModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C190F1F2A535FC200027FD5 /* CustomizeZapModel.swift */; };
|
2023-07-04 18:42:16 +00:00
|
|
|
4C190F252A547D2000027FD5 /* LoadScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C190F242A547D2000027FD5 /* LoadScript.swift */; };
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DEF29F88C6B004C165C /* BlurHashEncode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C198DEB29F88C6B004C165C /* BlurHashEncode.swift */; };
|
|
|
|
4C198DF029F88C6B004C165C /* Readme.md in Resources */ = {isa = PBXBuildFile; fileRef = 4C198DEC29F88C6B004C165C /* Readme.md */; };
|
|
|
|
4C198DF129F88C6B004C165C /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4C198DED29F88C6B004C165C /* License.txt */; };
|
|
|
|
4C198DF229F88C6B004C165C /* BlurHashDecode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C198DEE29F88C6B004C165C /* BlurHashDecode.swift */; };
|
|
|
|
4C198DF529F88D2E004C165C /* ImageMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C198DF429F88D2E004C165C /* ImageMetadata.swift */; };
|
2023-07-11 01:59:50 +00:00
|
|
|
4C19AE512A5CEF7C00C90DB7 /* NostrScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C19AE4C2A5CEF7C00C90DB7 /* NostrScript.swift */; };
|
2023-07-11 14:21:16 +00:00
|
|
|
4C19AE552A5D977400C90DB7 /* HashtagTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C19AE542A5D977400C90DB7 /* HashtagTests.swift */; };
|
2023-04-04 19:03:31 +00:00
|
|
|
4C1A9A1A29DCA17E00516EAC /* ReplyCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A1929DCA17E00516EAC /* ReplyCounter.swift */; };
|
2023-04-05 15:49:15 +00:00
|
|
|
4C1A9A1D29DDCF9B00516EAC /* NotificationSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A1C29DDCF9B00516EAC /* NotificationSettingsView.swift */; };
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A1F29DDD24B00516EAC /* AppearanceSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A1E29DDD24B00516EAC /* AppearanceSettingsView.swift */; };
|
|
|
|
4C1A9A2129DDD3E100516EAC /* KeySettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A2029DDD3E100516EAC /* KeySettingsView.swift */; };
|
|
|
|
4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A2229DDDB8100516EAC /* IconLabel.swift */; };
|
|
|
|
4C1A9A2529DDDF2600516EAC /* ZapSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A2429DDDF2600516EAC /* ZapSettingsView.swift */; };
|
|
|
|
4C1A9A2729DDE31900516EAC /* TranslationSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A2629DDE31900516EAC /* TranslationSettingsView.swift */; };
|
2023-05-26 17:13:58 +00:00
|
|
|
4C1A9A2A29DDF54400516EAC /* DamusVideoPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9A2929DDF54400516EAC /* DamusVideoPlayer.swift */; };
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB12A7958E60024F453 /* VersionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1D4FB02A7958E60024F453 /* VersionInfo.swift */; };
|
|
|
|
4C1D4FB42A7967990024F453 /* build-git-hash.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4C1D4FB32A7967990024F453 /* build-git-hash.txt */; };
|
2022-06-30 14:16:48 +00:00
|
|
|
4C216F32286E388800040376 /* DMChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F31286E388800040376 /* DMChatView.swift */; };
|
|
|
|
4C216F34286F5ACD00040376 /* DMView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F33286F5ACD00040376 /* DMView.swift */; };
|
|
|
|
4C216F362870A9A700040376 /* InputDismissKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F352870A9A700040376 /* InputDismissKeyboard.swift */; };
|
2022-07-03 16:23:08 +00:00
|
|
|
4C216F382871EDE300040376 /* DirectMessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C216F372871EDE300040376 /* DirectMessageModel.swift */; };
|
2023-07-16 21:35:06 +00:00
|
|
|
4C27C9322A64766F007DBC75 /* MarkdownUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4C27C9312A64766F007DBC75 /* MarkdownUI */; };
|
2023-05-15 18:57:37 +00:00
|
|
|
4C2859602A12A2BE004746F7 /* SupporterBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C28595F2A12A2BE004746F7 /* SupporterBadge.swift */; };
|
|
|
|
4C2859622A12A7F0004746F7 /* GoldSupportGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2859612A12A7F0004746F7 /* GoldSupportGradient.swift */; };
|
2022-05-20 23:06:13 +00:00
|
|
|
4C285C8228385570008A31F1 /* CarouselView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8128385570008A31F1 /* CarouselView.swift */; };
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8428385690008A31F1 /* CreateAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8328385690008A31F1 /* CreateAccountView.swift */; };
|
|
|
|
4C285C86283892E7008A31F1 /* CreateAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C85283892E7008A31F1 /* CreateAccountModel.swift */; };
|
|
|
|
4C285C8A2838B985008A31F1 /* ProfilePictureSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C892838B985008A31F1 /* ProfilePictureSelector.swift */; };
|
|
|
|
4C285C8C28398BC7008A31F1 /* Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8B28398BC6008A31F1 /* Keys.swift */; };
|
|
|
|
4C285C8E28399BFE008A31F1 /* SaveKeysView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8D28399BFD008A31F1 /* SaveKeysView.swift */; };
|
2023-07-23 18:55:36 +00:00
|
|
|
4C28A4122A6D03D200C1A7A5 /* ReferencedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C28A4112A6D03D200C1A7A5 /* ReferencedId.swift */; };
|
2023-08-03 00:07:55 +00:00
|
|
|
4C2B10282A7B0F5C008AA43E /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B10272A7B0F5C008AA43E /* Log.swift */; };
|
2023-07-26 15:46:44 +00:00
|
|
|
4C2B7BF22A71B6540049DEE7 /* Id.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B7BF12A71B6540049DEE7 /* Id.swift */; };
|
2023-02-15 17:35:47 +00:00
|
|
|
4C2CDDF7299D4A5E00879FD5 /* Debouncer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2CDDF6299D4A5E00879FD5 /* Debouncer.swift */; };
|
2024-04-25 21:03:34 +00:00
|
|
|
4C2D34412BDAF1B300F9FB44 /* NIP10Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2D34402BDAF1B300F9FB44 /* NIP10Tests.swift */; };
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7229A5677A00E2BD5A /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7129A5677A00E2BD5A /* NotificationsView.swift */; };
|
|
|
|
4C30AC7429A5680900E2BD5A /* EventGroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7329A5680900E2BD5A /* EventGroupView.swift */; };
|
|
|
|
4C30AC7629A5770900E2BD5A /* NotificationItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7529A5770900E2BD5A /* NotificationItemView.swift */; };
|
|
|
|
4C30AC7829A577AB00E2BD5A /* EventCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7729A577AB00E2BD5A /* EventCache.swift */; };
|
|
|
|
4C30AC8029A6A53F00E2BD5A /* ProfilePicturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7F29A6A53F00E2BD5A /* ProfilePicturesView.swift */; };
|
2023-08-26 01:13:42 +00:00
|
|
|
4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E242A9932C100489948 /* Ndb.swift */; };
|
2023-08-27 03:43:54 +00:00
|
|
|
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 */; };
|
|
|
|
4C32B94F2A9AD44700DC3548 /* Int+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93A2A9AD44700DC3548 /* Int+extension.swift */; };
|
|
|
|
4C32B9502A9AD44700DC3548 /* FlatBufferBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93B2A9AD44700DC3548 /* FlatBufferBuilder.swift */; };
|
|
|
|
4C32B9512A9AD44700DC3548 /* FlatbuffersErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93C2A9AD44700DC3548 /* FlatbuffersErrors.swift */; };
|
|
|
|
4C32B9522A9AD44700DC3548 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93D2A9AD44700DC3548 /* Message.swift */; };
|
|
|
|
4C32B9532A9AD44700DC3548 /* Verifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93E2A9AD44700DC3548 /* Verifier.swift */; };
|
|
|
|
4C32B9542A9AD44700DC3548 /* FlatBuffersUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93F2A9AD44700DC3548 /* FlatBuffersUtils.swift */; };
|
|
|
|
4C32B9552A9AD44700DC3548 /* ByteBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9402A9AD44700DC3548 /* ByteBuffer.swift */; };
|
|
|
|
4C32B9562A9AD44700DC3548 /* TableVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9412A9AD44700DC3548 /* TableVerifier.swift */; };
|
|
|
|
4C32B9572A9AD44700DC3548 /* Root.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9422A9AD44700DC3548 /* Root.swift */; };
|
|
|
|
4C32B9582A9AD44700DC3548 /* VeriferOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9432A9AD44700DC3548 /* VeriferOptions.swift */; };
|
|
|
|
4C32B9592A9AD44700DC3548 /* Table.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9442A9AD44700DC3548 /* Table.swift */; };
|
|
|
|
4C32B95A2A9AD44700DC3548 /* Verifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9452A9AD44700DC3548 /* Verifiable.swift */; };
|
|
|
|
4C32B95B2A9AD44700DC3548 /* NativeObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9462A9AD44700DC3548 /* NativeObject.swift */; };
|
|
|
|
4C32B95C2A9AD44700DC3548 /* String+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9472A9AD44700DC3548 /* String+extension.swift */; };
|
|
|
|
4C32B95D2A9AD44700DC3548 /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9482A9AD44700DC3548 /* Documentation.docc */; };
|
|
|
|
4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9492A9AD44700DC3548 /* FlatBufferObject.swift */; };
|
|
|
|
4C32B95F2A9AD44700DC3548 /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B94A2A9AD44700DC3548 /* Enum.swift */; };
|
|
|
|
4C32B9602A9AD44700DC3548 /* Struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B94B2A9AD44700DC3548 /* Struct.swift */; };
|
2022-05-04 23:26:10 +00:00
|
|
|
4C363A8428233689006E126D /* Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A8328233689006E126D /* Parser.swift */; };
|
2022-05-05 04:33:08 +00:00
|
|
|
4C363A8828236948006E126D /* BlocksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A8728236948006E126D /* BlocksView.swift */; };
|
|
|
|
4C363A8C28236B92006E126D /* PubkeyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A8B28236B92006E126D /* PubkeyView.swift */; };
|
|
|
|
4C363A8E28236FE4006E126D /* NoteContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A8D28236FE4006E126D /* NoteContentView.swift */; };
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A9028247A1D006E126D /* NostrLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A8F28247A1D006E126D /* NostrLink.swift */; };
|
|
|
|
4C363A922825FCF2006E126D /* ProfileUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A912825FCF2006E126D /* ProfileUpdate.swift */; };
|
|
|
|
4C363A94282704FA006E126D /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A93282704FA006E126D /* Post.swift */; };
|
|
|
|
4C363A962827096D006E126D /* PostBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A952827096D006E126D /* PostBlock.swift */; };
|
2022-05-08 17:45:24 +00:00
|
|
|
4C363A9A28283854006E126D /* Reply.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A9928283854006E126D /* Reply.swift */; };
|
|
|
|
4C363A9C282838B9006E126D /* EventRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A9B282838B9006E126D /* EventRef.swift */; };
|
2022-05-09 02:01:42 +00:00
|
|
|
4C363A9E2828A822006E126D /* ReplyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A9D2828A822006E126D /* ReplyTests.swift */; };
|
|
|
|
4C363AA02828A8DD006E126D /* LikeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A9F2828A8DD006E126D /* LikeTests.swift */; };
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA228296A7E006E126D /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363AA128296A7E006E126D /* SearchView.swift */; };
|
|
|
|
4C363AA428296DEE006E126D /* SearchModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363AA328296DEE006E126D /* SearchModel.swift */; };
|
|
|
|
4C363AA828297703006E126D /* InsertSort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363AA728297703006E126D /* InsertSort.swift */; };
|
2023-01-02 23:18:42 +00:00
|
|
|
4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3A1D3629637E0500558C0F /* PreviewCache.swift */; };
|
2022-05-15 18:08:36 +00:00
|
|
|
4C3AC79B28306D7B00E1F516 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC79A28306D7B00E1F516 /* Contacts.swift */; };
|
2022-05-16 23:23:34 +00:00
|
|
|
4C3AC79D2833036D00E1F516 /* FollowingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC79C2833036D00E1F516 /* FollowingView.swift */; };
|
|
|
|
4C3AC79F2833115300E1F516 /* FollowButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC79E2833115300E1F516 /* FollowButtonView.swift */; };
|
2022-05-19 15:33:37 +00:00
|
|
|
4C3AC7A12835A81400E1F516 /* SetupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC7A02835A81400E1F516 /* SetupView.swift */; };
|
|
|
|
4C3AC7A52836987600E1F516 /* MainTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC7A42836987600E1F516 /* MainTabView.swift */; };
|
2022-05-19 21:38:25 +00:00
|
|
|
4C3AC7A728369BA200E1F516 /* SearchHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC7A628369BA200E1F516 /* SearchHomeView.swift */; };
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD22819DB9B00B3DE84 /* ProfileModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFD12819DB9B00B3DE84 /* ProfileModel.swift */; };
|
|
|
|
4C3BEFD42819DE8F00B3DE84 /* NostrKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFD32819DE8F00B3DE84 /* NostrKind.swift */; };
|
|
|
|
4C3BEFD6281D995700B3DE84 /* ActionBarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFD5281D995700B3DE84 /* ActionBarModel.swift */; };
|
2022-05-04 23:26:10 +00:00
|
|
|
4C3BEFDA281DCA1400B3DE84 /* LikeCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFD9281DCA1400B3DE84 /* LikeCounter.swift */; };
|
|
|
|
4C3BEFDC281DCE6100B3DE84 /* Liked.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFDB281DCE6100B3DE84 /* Liked.swift */; };
|
|
|
|
4C3BEFE0281DE1ED00B3DE84 /* DamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFDF281DE1ED00B3DE84 /* DamusState.swift */; };
|
2023-02-04 17:55:16 +00:00
|
|
|
4C3D52B6298DB4E6001C5831 /* ZapEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D52B5298DB4E6001C5831 /* ZapEvent.swift */; };
|
|
|
|
4C3D52B8298DB5C6001C5831 /* TextEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D52B7298DB5C6001C5831 /* TextEvent.swift */; };
|
2023-09-10 17:16:50 +00:00
|
|
|
4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */; };
|
2022-10-19 14:46:05 +00:00
|
|
|
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 */; };
|
2023-02-03 17:25:07 +00:00
|
|
|
4C42812C298C848200DBF26F /* TranslateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C42812B298C848200DBF26F /* TranslateView.swift */; };
|
2024-03-04 14:03:53 +00:00
|
|
|
4C463CBF2B960B96008A8C36 /* PurpleBackdrop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C463CBE2B960B96008A8C36 /* PurpleBackdrop.swift */; };
|
2023-08-27 03:45:42 +00:00
|
|
|
4C4793012A993CDA00489948 /* mdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793002A993B9A00489948 /* mdb.c */; settings = {COMPILER_FLAGS = "-w"; }; };
|
|
|
|
4C4793042A993DC000489948 /* midl.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793032A993DB900489948 /* midl.c */; settings = {COMPILER_FLAGS = "-w"; }; };
|
2023-08-25 19:32:30 +00:00
|
|
|
4C4793052A993E3200489948 /* builder.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792942A9939BD00489948 /* builder.c */; };
|
|
|
|
4C4793062A993E5300489948 /* json_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792C82A9939BD00489948 /* json_parser.c */; };
|
|
|
|
4C4793072A993E6200489948 /* emitter.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792CF2A9939BD00489948 /* emitter.c */; };
|
|
|
|
4C4793082A993E8900489948 /* refmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792D12A9939BD00489948 /* refmap.c */; };
|
2023-07-23 00:15:36 +00:00
|
|
|
4C4DD3DB2A6CA7E8005B4E85 /* ContentParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4DD3DA2A6CA7E8005B4E85 /* ContentParsing.swift */; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C4E137B2A76D5FB00BDD832 /* MuteThreadNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */; };
|
|
|
|
4C4E137D2A76D63600BDD832 /* UnmuteThreadNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */; };
|
2023-06-03 01:51:49 +00:00
|
|
|
4C4F14A72A2A61A30045A0B9 /* NostrScriptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F14A62A2A61A30045A0B9 /* NostrScriptTests.swift */; };
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0729A540BA003E4487 /* NotificationsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C54AA0629A540BA003E4487 /* NotificationsModel.swift */; };
|
|
|
|
4C54AA0A29A55429003E4487 /* EventGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C54AA0929A55429003E4487 /* EventGroup.swift */; };
|
|
|
|
4C54AA0C29A5543C003E4487 /* ZapGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C54AA0B29A5543C003E4487 /* ZapGroup.swift */; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C59B98C2A76C2550032FFEB /* ProfileUpdatedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C59B98B2A76C2550032FFEB /* ProfileUpdatedNotify.swift */; };
|
2022-06-07 02:26:44 +00:00
|
|
|
4C5C7E68284ED36500A22DF5 /* SearchHomeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5C7E67284ED36500A22DF5 /* SearchHomeModel.swift */; };
|
|
|
|
4C5C7E6A284EDE2E00A22DF5 /* SearchResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5C7E69284EDE2E00A22DF5 /* SearchResultsView.swift */; };
|
2023-07-21 21:54:03 +00:00
|
|
|
4C5D5C992A6AF8F80024563C /* NdbNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90548A2A6AEDEE00811EEC /* NdbNote.swift */; };
|
|
|
|
4C5D5C9A2A6AF8F80024563C /* NdbTagIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9054882A6AED4700811EEC /* NdbTagIterator.swift */; };
|
|
|
|
4C5D5C9D2A6B2CB40024563C /* AsciiCharacter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5D5C9C2A6B2CB40024563C /* AsciiCharacter.swift */; };
|
2023-08-22 05:12:01 +00:00
|
|
|
4C5E54032A9522F600FF6E60 /* UserStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5E54022A9522F600FF6E60 /* UserStatus.swift */; };
|
|
|
|
4C5E54062A9671F800FF6E60 /* UserStatusSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5E54052A9671F800FF6E60 /* UserStatusSheet.swift */; };
|
2022-05-24 19:57:40 +00:00
|
|
|
4C5F9114283D694D0052CD1C /* FollowTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5F9113283D694D0052CD1C /* FollowTarget.swift */; };
|
2022-05-24 21:34:21 +00:00
|
|
|
4C5F9116283D855D0052CD1C /* EventsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5F9115283D855D0052CD1C /* EventsModel.swift */; };
|
2022-05-24 22:29:28 +00:00
|
|
|
4C5F9118283D88E40052CD1C /* FollowingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5F9117283D88E40052CD1C /* FollowingModel.swift */; };
|
2022-05-24 19:57:40 +00:00
|
|
|
4C633350283D40E500B1C9C3 /* HomeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C63334F283D40E500B1C9C3 /* HomeModel.swift */; };
|
|
|
|
4C633352283D419F00B1C9C3 /* SignalModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C633351283D419F00B1C9C3 /* SignalModel.swift */; };
|
2023-08-22 05:12:01 +00:00
|
|
|
4C64305C2A945AFF00B0C0E9 /* MusicController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C64305B2A945AFF00B0C0E9 /* MusicController.swift */; };
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987C286D03E000EAE2B3 /* DirectMessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C64987B286D03E000EAE2B3 /* DirectMessagesView.swift */; };
|
|
|
|
4C64987E286D082C00EAE2B3 /* DirectMessagesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C64987D286D082C00EAE2B3 /* DirectMessagesModel.swift */; };
|
|
|
|
4C649881286E0EE300EAE2B3 /* secp256k1 in Frameworks */ = {isa = PBXBuildFile; productRef = 4C649880286E0EE300EAE2B3 /* secp256k1 */; };
|
2023-08-06 01:33:01 +00:00
|
|
|
4C684A552A7E91FE005E6031 /* LongPostTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C684A542A7E91FE005E6031 /* LongPostTests.swift */; };
|
2023-08-06 16:02:18 +00:00
|
|
|
4C684A572A7FFAE6005E6031 /* UrlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C684A562A7FFAE6005E6031 /* UrlTests.swift */; };
|
2023-07-13 01:19:13 +00:00
|
|
|
4C687C212A5F7ED00092C550 /* DamusBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C687C202A5F7ED00092C550 /* DamusBackground.swift */; };
|
2023-07-13 14:05:53 +00:00
|
|
|
4C687C242A5FA86D0092C550 /* SearchHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C687C232A5FA86D0092C550 /* SearchHeaderView.swift */; };
|
2023-07-13 14:01:51 +00:00
|
|
|
4C687C272A6039500092C550 /* TestData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C687C262A6039500092C550 /* TestData.swift */; };
|
2023-06-22 08:15:28 +00:00
|
|
|
4C73C5142A4437C10062CAC0 /* ZapUserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C73C5132A4437C10062CAC0 /* ZapUserView.swift */; };
|
2022-04-03 22:40:18 +00:00
|
|
|
4C75EFA427FA577B0006080F /* PostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFA327FA577B0006080F /* PostView.swift */; };
|
2022-04-09 15:03:50 +00:00
|
|
|
4C75EFA627FF87A20006080F /* Nostr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFA527FF87A20006080F /* Nostr.swift */; };
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFAD28049CFB0006080F /* PostButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFAC28049CFB0006080F /* PostButton.swift */; };
|
|
|
|
4C75EFAF28049D350006080F /* NostrFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFAE28049D340006080F /* NostrFilter.swift */; };
|
|
|
|
4C75EFB128049D510006080F /* NostrResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB028049D510006080F /* NostrResponse.swift */; };
|
|
|
|
4C75EFB328049D640006080F /* NostrEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB228049D640006080F /* NostrEvent.swift */; };
|
|
|
|
4C75EFB528049D790006080F /* Relay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB428049D790006080F /* Relay.swift */; };
|
|
|
|
4C75EFB728049D990006080F /* RelayPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB628049D990006080F /* RelayPool.swift */; };
|
2022-04-11 17:53:43 +00:00
|
|
|
4C75EFB92804A2740006080F /* EventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB82804A2740006080F /* EventView.swift */; };
|
2022-04-11 18:32:30 +00:00
|
|
|
4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFBA2804A34C0006080F /* ProofOfWork.swift */; };
|
2023-05-05 23:12:03 +00:00
|
|
|
4C7D09592A05BEAD00943473 /* KeyboardVisible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09582A05BEAD00943473 /* KeyboardVisible.swift */; };
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D095F2A098C5D00943473 /* ConnectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D095C2A098C5D00943473 /* ConnectWalletView.swift */; };
|
|
|
|
4C7D09602A098C5D00943473 /* WalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D095D2A098C5D00943473 /* WalletView.swift */; };
|
|
|
|
4C7D09622A098D0E00943473 /* WalletConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09612A098D0E00943473 /* WalletConnect.swift */; };
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09662A0AE62100943473 /* AlbyButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09652A0AE62100943473 /* AlbyButton.swift */; };
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D09682A0AE9B200943473 /* NWCScannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09672A0AE9B200943473 /* NWCScannerView.swift */; };
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D096D2A0AEA0400943473 /* CodeScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D096A2A0AEA0400943473 /* CodeScanner.swift */; };
|
|
|
|
4C7D096E2A0AEA0400943473 /* ScannerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D096B2A0AEA0400943473 /* ScannerCoordinator.swift */; };
|
|
|
|
4C7D096F2A0AEA0400943473 /* ScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D096C2A0AEA0400943473 /* ScannerViewController.swift */; };
|
2023-05-10 01:13:33 +00:00
|
|
|
4C7D09722A0AEF5E00943473 /* DamusGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09712A0AEF5E00943473 /* DamusGradient.swift */; };
|
|
|
|
4C7D09742A0AEF9000943473 /* AlbyGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09732A0AEF9000943473 /* AlbyGradient.swift */; };
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09762A0AF19E00943473 /* FillAndStroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09752A0AF19E00943473 /* FillAndStroke.swift */; };
|
2023-05-10 01:26:12 +00:00
|
|
|
4C7D09782A0B0CC900943473 /* WalletModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09772A0B0CC900943473 /* WalletModel.swift */; };
|
2023-05-10 23:23:54 +00:00
|
|
|
4C7D097E2A0C58B900943473 /* WalletConnectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D097D2A0C58B900943473 /* WalletConnectTests.swift */; };
|
2022-05-04 23:26:10 +00:00
|
|
|
4C7FF7D52823313F009601DB /* Mentions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7FF7D42823313F009601DB /* Mentions.swift */; };
|
2022-04-25 15:28:07 +00:00
|
|
|
4C8682872814DE470026224F /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8682862814DE470026224F /* ProfileView.swift */; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C86F7C42A76C44C00EC0817 /* ZappingNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C86F7C32A76C44C00EC0817 /* ZappingNotify.swift */; };
|
|
|
|
4C86F7C62A76C51100EC0817 /* AttachedWalletNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C86F7C52A76C51100EC0817 /* AttachedWalletNotify.swift */; };
|
2023-04-06 23:04:16 +00:00
|
|
|
4C8D00C829DF791C0036AF10 /* CompatibleAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */; };
|
|
|
|
4C8D00CA29DF80350036AF10 /* TruncatedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C929DF80350036AF10 /* TruncatedText.swift */; };
|
2023-04-07 00:09:50 +00:00
|
|
|
4C8D00CC29DF92DF0036AF10 /* Hashtags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */; };
|
2023-04-10 05:02:55 +00:00
|
|
|
4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; };
|
|
|
|
4C8D00D429E3C5D40036AF10 /* NIP19Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */; };
|
2023-04-20 21:30:27 +00:00
|
|
|
4C8D1A6C29F1DFC200ACDF75 /* FriendIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */; };
|
2023-04-21 21:17:37 +00:00
|
|
|
4C8D1A6F29F31E5000ACDF75 /* FriendsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D1A6E29F31E5000ACDF75 /* FriendsButton.swift */; };
|
2023-03-27 16:26:30 +00:00
|
|
|
4C8EC52529D1FA6C0085D9A8 /* DamusColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */; };
|
2023-07-21 21:54:03 +00:00
|
|
|
4C9054852A6AEAA000811EEC /* NdbTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9054842A6AEAA000811EEC /* NdbTests.swift */; };
|
2022-05-24 19:57:40 +00:00
|
|
|
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 */; };
|
2023-06-03 01:51:49 +00:00
|
|
|
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 */; };
|
2024-03-16 12:20:59 +00:00
|
|
|
4C94D6432BA5AEFE00C26EFF /* QuoteRepostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */; };
|
2022-05-26 15:35:19 +00:00
|
|
|
4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C987B56283FD07F0042CE38 /* FollowersModel.swift */; };
|
2023-06-23 08:01:30 +00:00
|
|
|
4C9AA14A2A4587A6003F49FD /* NotificationStatusModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */; };
|
2023-07-17 17:15:26 +00:00
|
|
|
4C9B0DEE2A65A75F00CBDA21 /* AttrStringTestExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9B0DED2A65A75F00CBDA21 /* AttrStringTestExtensions.swift */; };
|
2023-07-17 20:25:17 +00:00
|
|
|
4C9B0DF32A65C46800CBDA21 /* ProfileEditButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9B0DF22A65C46800CBDA21 /* ProfileEditButton.swift */; };
|
2023-03-14 22:26:52 +00:00
|
|
|
4C9BB83129C0ED4F00FC4E37 /* DisplayName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BB83029C0ED4F00FC4E37 /* DisplayName.swift */; };
|
|
|
|
4C9BB83429C12D9900FC4E37 /* EventProfileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BB83329C12D9900FC4E37 /* EventProfileName.swift */; };
|
2023-03-22 13:24:34 +00:00
|
|
|
4C9D6D162B1AA9C6004E5CD9 /* DisplayTabBarNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9D6D152B1AA9C6004E5CD9 /* DisplayTabBarNotify.swift */; };
|
2024-01-13 19:19:44 +00:00
|
|
|
4C9D6D1B2B1D35D7004E5CD9 /* PullDownSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9D6D1A2B1D35D7004E5CD9 /* PullDownSearch.swift */; };
|
2023-02-25 20:10:37 +00:00
|
|
|
4C9F18E229AA9B6C008C55EC /* CustomizeZapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9F18E129AA9B6C008C55EC /* CustomizeZapView.swift */; };
|
|
|
|
4C9F18E429ABDE6D008C55EC /* MaybeAnonPfpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9F18E329ABDE6D008C55EC /* MaybeAnonPfpView.swift */; };
|
2022-04-19 00:33:15 +00:00
|
|
|
4CA2EFA0280E37AC0044ACD8 /* TimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA2EF9F280E37AC0044ACD8 /* TimelineView.swift */; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA3529E2A76AE67003BB08B /* FollowNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3529D2A76AE67003BB08B /* FollowNotify.swift */; };
|
2023-07-30 17:47:53 +00:00
|
|
|
4CA352A02A76AE80003BB08B /* Notify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3529F2A76AE80003BB08B /* Notify.swift */; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352A22A76AEC5003BB08B /* LikedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352A12A76AEC5003BB08B /* LikedNotify.swift */; };
|
|
|
|
4CA352A42A76AFF3003BB08B /* UpdateStatsNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352A32A76AFF3003BB08B /* UpdateStatsNotify.swift */; };
|
|
|
|
4CA352A82A76B37E003BB08B /* NewMutesNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352A72A76B37E003BB08B /* NewMutesNotify.swift */; };
|
|
|
|
4CA352AA2A76BF3A003BB08B /* LocalNotificationNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352A92A76BF3A003BB08B /* LocalNotificationNotify.swift */; };
|
|
|
|
4CA352AC2A76C07F003BB08B /* NewUnmutesNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352AB2A76C07F003BB08B /* NewUnmutesNotify.swift */; };
|
|
|
|
4CA352AE2A76C1AC003BB08B /* FollowedNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352AD2A76C1AC003BB08B /* FollowedNotify.swift */; };
|
2023-04-23 16:54:38 +00:00
|
|
|
4CA3FA1029F593D000FDB3C3 /* ZapTypePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3FA0F29F593D000FDB3C3 /* ZapTypePicker.swift */; };
|
2023-04-21 23:21:01 +00:00
|
|
|
4CA5588329F33F5B00DC6A45 /* StringCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA5588229F33F5B00DC6A45 /* StringCodable.swift */; };
|
2023-06-01 18:53:59 +00:00
|
|
|
4CA9275D2A28FF630098A105 /* LongformView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9275C2A28FF630098A105 /* LongformView.swift */; };
|
|
|
|
4CA9275F2A2902B20098A105 /* LongformPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9275E2A2902B20098A105 /* LongformPreview.swift */; };
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927612A290E340098A105 /* EventShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA927602A290E340098A105 /* EventShell.swift */; };
|
|
|
|
4CA927632A290EB10098A105 /* EventTop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA927622A290EB10098A105 /* EventTop.swift */; };
|
|
|
|
4CA927652A290F1A0098A105 /* TimeDot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA927642A290F1A0098A105 /* TimeDot.swift */; };
|
|
|
|
4CA927672A290F8B0098A105 /* RelativeTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA927662A290F8B0098A105 /* RelativeTime.swift */; };
|
|
|
|
4CA9276C2A2910D10098A105 /* ReplyPart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9276B2A2910D10098A105 /* ReplyPart.swift */; };
|
2023-01-30 21:26:04 +00:00
|
|
|
4CAAD8AD298851D000060CEA /* AccountDeletion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAAD8AC298851D000060CEA /* AccountDeletion.swift */; };
|
2023-01-30 23:49:03 +00:00
|
|
|
4CAAD8B029888AD200060CEA /* RelayConfigView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */; };
|
2022-04-17 15:49:02 +00:00
|
|
|
4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CACA9D4280C31E100D9BBE8 /* ReplyView.swift */; };
|
2022-04-17 12:31:38 +00:00
|
|
|
4CACA9DC280C38C000D9BBE8 /* Profiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CACA9DB280C38C000D9BBE8 /* Profiles.swift */; };
|
2022-12-30 00:55:36 +00:00
|
|
|
4CB55EF5295E679D007FD187 /* UserRelaysView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB55EF4295E679D007FD187 /* UserRelaysView.swift */; };
|
2023-01-04 09:30:37 +00:00
|
|
|
4CB8838629656C8B00DC99E7 /* NIP05.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838529656C8B00DC99E7 /* NIP05.swift */; };
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB88389296AF99A00DC99E7 /* EventDetailBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB88388296AF99A00DC99E7 /* EventDetailBar.swift */; };
|
2023-01-11 22:48:35 +00:00
|
|
|
4CB8838B296F6E1E00DC99E7 /* NIP05Badge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838A296F6E1E00DC99E7 /* NIP05Badge.swift */; };
|
2023-01-11 22:49:14 +00:00
|
|
|
4CB8838D296F710400DC99E7 /* Reposted.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838C296F710400DC99E7 /* Reposted.swift */; };
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB8838F296F781C00DC99E7 /* ReactionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838E296F781C00DC99E7 /* ReactionsView.swift */; };
|
|
|
|
4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB88395296F7F8B00DC99E7 /* ReactionView.swift */; };
|
2023-01-15 01:23:35 +00:00
|
|
|
4CB8839A297322D200DC99E7 /* DMTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB88399297322D200DC99E7 /* DMTests.swift */; };
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883A62975F83C00DC99E7 /* LNUrlPayRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A52975F83C00DC99E7 /* LNUrlPayRequest.swift */; };
|
|
|
|
4CB883A82975FC1800DC99E7 /* Zaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A72975FC1800DC99E7 /* Zaps.swift */; };
|
|
|
|
4CB883AA297612FF00DC99E7 /* ZapTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A9297612FF00DC99E7 /* ZapTests.swift */; };
|
|
|
|
4CB883AE2976FA9300DC99E7 /* FormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AD2976FA9300DC99E7 /* FormatTests.swift */; };
|
2023-10-23 23:32:43 +00:00
|
|
|
4CB883B0297705DD00DC99E7 /* NoteZapButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AF297705DD00DC99E7 /* NoteZapButton.swift */; };
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883B5297730E400DC99E7 /* LNUrls.swift */; };
|
2023-06-20 13:30:48 +00:00
|
|
|
4CB8FC232A41ABA800763C51 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8FC222A41ABA500763C51 /* AboutView.swift */; };
|
2023-02-07 18:51:08 +00:00
|
|
|
4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */; };
|
2023-01-22 18:25:12 +00:00
|
|
|
4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */; };
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FEF2A73FCCB007AEB17 /* IdType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FEE2A73FCCB007AEB17 /* IdType.swift */; };
|
|
|
|
4CC14FF12A73FCDB007AEB17 /* Pubkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF02A73FCDB007AEB17 /* Pubkey.swift */; };
|
|
|
|
4CC14FF52A740BB7007AEB17 /* NoteId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF42A740BB7007AEB17 /* NoteId.swift */; };
|
|
|
|
4CC14FF92A741939007AEB17 /* Referenced.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF82A741939007AEB17 /* Referenced.swift */; };
|
2023-04-04 17:12:29 +00:00
|
|
|
4CC6193A29DC777C006A86D1 /* RelayBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6193929DC777C006A86D1 /* RelayBootstrap.swift */; };
|
2023-02-03 17:25:07 +00:00
|
|
|
4CC7AAE7297EFA7B00430951 /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; };
|
2023-01-23 18:37:35 +00:00
|
|
|
4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */; };
|
2023-01-23 18:38:53 +00:00
|
|
|
4CC7AAED297F0B9E00430951 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEC297F0B9E00430951 /* Highlight.swift */; };
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAF0297F11C700430951 /* SelectedEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEF297F11C700430951 /* SelectedEventView.swift */; };
|
|
|
|
4CC7AAF4297F18B400430951 /* ReplyDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAF3297F18B400430951 /* ReplyDescription.swift */; };
|
|
|
|
4CC7AAF6297F1A6A00430951 /* EventBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAF5297F1A6A00430951 /* EventBody.swift */; };
|
|
|
|
4CC7AAF8297F1CEE00430951 /* EventProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAF7297F1CEE00430951 /* EventProfile.swift */; };
|
2023-01-25 16:11:21 +00:00
|
|
|
4CC7AAFA297F64AC00430951 /* EventMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAF9297F64AC00430951 /* EventMenu.swift */; };
|
2023-03-05 21:39:00 +00:00
|
|
|
4CCEB7AE29B53D260078AA28 /* SearchingEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEB7AD29B53D260078AA28 /* SearchingEventView.swift */; };
|
2023-03-16 15:13:03 +00:00
|
|
|
4CD348EF29C3659D00497EB2 /* ImageUploadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD348EE29C3659D00497EB2 /* ImageUploadModel.swift */; };
|
2022-08-09 16:32:22 +00:00
|
|
|
4CD7641B28A1641400B6928F /* EndBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7641A28A1641400B6928F /* EndBlock.swift */; };
|
2023-04-14 18:45:10 +00:00
|
|
|
4CDA128A29E9D10C0006FA5A /* SignalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDA128929E9D10C0006FA5A /* SignalView.swift */; };
|
2023-04-15 19:40:00 +00:00
|
|
|
4CDA128C29EB19C40006FA5A /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDA128B29EB19C40006FA5A /* LocalNotification.swift */; };
|
2023-07-21 21:54:03 +00:00
|
|
|
4CDD1AE02A6B305F001CD4DF /* NdbTagElem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD1ADF2A6B305F001CD4DF /* NdbTagElem.swift */; };
|
|
|
|
4CDD1AE22A6B3074001CD4DF /* NdbTagsIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */; };
|
2023-02-20 17:11:39 +00:00
|
|
|
4CE0E2AF29A2E82100DB4CA2 /* EventHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE0E2AE29A2E82100DB4CA2 /* EventHolder.swift */; };
|
|
|
|
4CE0E2B629A3ED5500DB4CA2 /* InnerTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE0E2B529A3ED5500DB4CA2 /* InnerTimelineView.swift */; };
|
2023-04-19 18:08:59 +00:00
|
|
|
4CE1399029F0661A00AC6A0B /* RepostAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE1398F29F0661A00AC6A0B /* RepostAction.swift */; };
|
|
|
|
4CE1399229F0666100AC6A0B /* ShareActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE1399129F0666100AC6A0B /* ShareActionButton.swift */; };
|
|
|
|
4CE1399429F0669900AC6A0B /* BigButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE1399329F0669900AC6A0B /* BigButton.swift */; };
|
2023-03-29 23:24:06 +00:00
|
|
|
4CE4F0F229D4FCFA005914DB /* DebouncedOnChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4F0F129D4FCFA005914DB /* DebouncedOnChange.swift */; };
|
2023-03-31 22:14:55 +00:00
|
|
|
4CE4F0F429D779B5005914DB /* PostBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4F0F329D779B5005914DB /* PostBox.swift */; };
|
2023-04-03 20:57:57 +00:00
|
|
|
4CE4F0F829DB7399005914DB /* ThiccDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4F0F729DB7399005914DB /* ThiccDivider.swift */; };
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9DE2852768D00C00DD9 /* ConfigView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4F9DD2852768D00C00DD9 /* ConfigView.swift */; };
|
|
|
|
4CE4F9E328528C5200C00DD9 /* AddRelayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE4F9E228528C5200C00DD9 /* AddRelayView.swift */; };
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE727F7A08100C66700 /* damusApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DEE627F7A08100C66700 /* damusApp.swift */; };
|
|
|
|
4CE6DEE927F7A08100C66700 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DEE827F7A08100C66700 /* ContentView.swift */; };
|
|
|
|
4CE6DEEB27F7A08200C66700 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4CE6DEEA27F7A08200C66700 /* Assets.xcassets */; };
|
|
|
|
4CE6DEEE27F7A08200C66700 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4CE6DEED27F7A08200C66700 /* Preview Assets.xcassets */; };
|
|
|
|
4CE6DEF827F7A08200C66700 /* damusTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DEF727F7A08200C66700 /* damusTests.swift */; };
|
|
|
|
4CE6DF0227F7A08200C66700 /* damusUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DF0127F7A08200C66700 /* damusUITests.swift */; };
|
|
|
|
4CE6DF0427F7A08200C66700 /* damusUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DF0327F7A08200C66700 /* damusUITestsLaunchTests.swift */; };
|
2022-04-09 15:03:50 +00:00
|
|
|
4CE6DF1627F8DEBF00C66700 /* RelayConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE6DF1527F8DEBF00C66700 /* RelayConnection.swift */; };
|
2023-02-08 19:07:58 +00:00
|
|
|
4CE8794829941DA700F758CC /* RelayFilters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794729941DA700F758CC /* RelayFilters.swift */; };
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE8794E2996B16A00F758CC /* RelayToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794D2996B16A00F758CC /* RelayToggle.swift */; };
|
2023-06-17 12:20:50 +00:00
|
|
|
4CE879502996B2BD00F758CC /* RelayStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8794F2996B2BD00F758CC /* RelayStatusView.swift */; };
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE879522996B68900F758CC /* RelayType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879512996B68900F758CC /* RelayType.swift */; };
|
2023-02-10 18:01:17 +00:00
|
|
|
4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879542996BAB900F758CC /* RelayPaidDetail.swift */; };
|
2023-02-10 18:50:49 +00:00
|
|
|
4CE879582996C45300F758CC /* ZapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879572996C45300F758CC /* ZapsView.swift */; };
|
|
|
|
4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8795A2996C47A00F758CC /* ZapsModel.swift */; };
|
2023-08-27 03:45:42 +00:00
|
|
|
4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; settings = {COMPILER_FLAGS = "-w"; }; };
|
2022-04-12 13:47:54 +00:00
|
|
|
4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */; };
|
2022-04-16 16:36:19 +00:00
|
|
|
4CEE2AF1280B216B00AB5EEF /* EventDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */; };
|
2022-04-16 16:33:33 +00:00
|
|
|
4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */; };
|
2022-04-16 16:53:34 +00:00
|
|
|
4CEE2AF5280B29E600AB5EEF /* TimeAgo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF4280B29E600AB5EEF /* TimeAgo.swift */; };
|
2022-04-16 18:32:42 +00:00
|
|
|
4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */; };
|
|
|
|
4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */; };
|
2023-08-28 14:52:59 +00:00
|
|
|
4CEF958D2A9CE650000F901B /* verifier.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792D42A9939BD00489948 /* verifier.c */; };
|
2023-01-25 16:11:21 +00:00
|
|
|
4CF0ABD42980996B00D66079 /* Report.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABD32980996B00D66079 /* Report.swift */; };
|
|
|
|
4CF0ABD629817F5B00D66079 /* ReportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABD529817F5B00D66079 /* ReportView.swift */; };
|
2023-01-25 17:53:41 +00:00
|
|
|
4CF0ABD82981980C00D66079 /* Lists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABD72981980C00D66079 /* Lists.swift */; };
|
|
|
|
4CF0ABDC2981A19E00D66079 /* ListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABDB2981A19E00D66079 /* ListTests.swift */; };
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABE12981A83900D66079 /* MutelistView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABE02981A83900D66079 /* MutelistView.swift */; };
|
|
|
|
4CF0ABE32981BC7D00D66079 /* UserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABE22981BC7D00D66079 /* UserView.swift */; };
|
2023-01-25 23:34:33 +00:00
|
|
|
4CF0ABE52981EE0C00D66079 /* EULAView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABE42981EE0C00D66079 /* EULAView.swift */; };
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
4CF0ABE7298444FD00D66079 /* EventMutingContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABE6298444FC00D66079 /* EventMutingContainerView.swift */; };
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABE929844AF100D66079 /* AnyCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABE829844AF100D66079 /* AnyCodable.swift */; };
|
|
|
|
4CF0ABEC29844B4700D66079 /* AnyDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABEB29844B4700D66079 /* AnyDecodable.swift */; };
|
|
|
|
4CF0ABEE29844B5500D66079 /* AnyEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABED29844B5500D66079 /* AnyEncodable.swift */; };
|
2023-01-28 16:30:06 +00:00
|
|
|
4CF0ABF029857E9200D66079 /* Bech32Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABEF29857E9200D66079 /* Bech32Object.swift */; };
|
2023-01-22 18:56:14 +00:00
|
|
|
4CF0ABF62985CD5500D66079 /* UserSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABF52985CD5500D66079 /* UserSearch.swift */; };
|
2023-08-22 05:12:01 +00:00
|
|
|
4CF38C882A9442DC00BE01B6 /* UserStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */; };
|
2023-06-04 22:42:32 +00:00
|
|
|
4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD502E2A2DA45800A229DB /* MediaView.swift */; };
|
2023-03-22 13:24:34 +00:00
|
|
|
4CFF8F5929C9FD1E008DB934 /* DamusPurpleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */; };
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */; };
|
2024-03-18 22:21:21 +00:00
|
|
|
4CFF8F6729CC9E3A008DB934 /* FullScreenCarouselView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6629CC9E3A008DB934 /* FullScreenCarouselView.swift */; };
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6929CC9ED1008DB934 /* ImageContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6829CC9ED1008DB934 /* ImageContainerView.swift */; };
|
2023-03-26 15:35:53 +00:00
|
|
|
4CFF8F6B29CD0079008DB934 /* RepostedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6A29CD0079008DB934 /* RepostedEvent.swift */; };
|
|
|
|
4CFF8F6D29CD022E008DB934 /* WideEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6C29CD022E008DB934 /* WideEventView.swift */; };
|
2022-12-30 07:39:16 +00:00
|
|
|
4FE60CDD295E1C5E00105A1F /* Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE60CDC295E1C5E00105A1F /* Wallet.swift */; };
|
2023-04-13 14:12:16 +00:00
|
|
|
50088DA129E8271A008A1FDF /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50088DA029E8271A008A1FDF /* WebSocket.swift */; };
|
2023-06-09 08:10:33 +00:00
|
|
|
501F8C802A0220E1001AFC1D /* KeychainStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F8C7F2A0220E1001AFC1D /* KeychainStorage.swift */; };
|
|
|
|
501F8C822A0224EB001AFC1D /* KeychainStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F8C812A0224EB001AFC1D /* KeychainStorageTests.swift */; };
|
2023-07-09 13:45:37 +00:00
|
|
|
504323A72A34915F006AE6DC /* RelayModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504323A62A34915F006AE6DC /* RelayModel.swift */; };
|
|
|
|
504323A92A3495B6006AE6DC /* RelayModelCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504323A82A3495B6006AE6DC /* RelayModelCache.swift */; };
|
2023-07-10 18:05:41 +00:00
|
|
|
5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */; };
|
2024-03-18 22:21:21 +00:00
|
|
|
50A16FFB2AA6C06600DFEC1F /* DamusAVPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A16FFA2AA6C06600DFEC1F /* DamusAVPlayerView.swift */; };
|
2023-09-06 16:25:07 +00:00
|
|
|
50A16FFD2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A16FFC2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift */; };
|
2023-09-06 16:23:33 +00:00
|
|
|
50A16FFF2AA76A0900DFEC1F /* VideoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A16FFE2AA76A0900DFEC1F /* VideoController.swift */; };
|
2023-02-18 06:27:15 +00:00
|
|
|
50A50A8D29A09E1C00C01BE7 /* RequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */; };
|
2023-07-09 13:45:33 +00:00
|
|
|
50A60D142A28BEEE00186190 /* RelayLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A60D132A28BEEE00186190 /* RelayLog.swift */; };
|
2023-04-28 19:24:34 +00:00
|
|
|
50B5685329F97CB400A23243 /* CredentialHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B5685229F97CB400A23243 /* CredentialHandler.swift */; };
|
2023-09-06 16:49:06 +00:00
|
|
|
50C3E08A2AA8E3F7006A4BC0 /* AVPlayer+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C3E0892AA8E3F7006A4BC0 /* AVPlayer+Additions.swift */; };
|
2023-05-20 17:38:06 +00:00
|
|
|
50DA11262A16A23F00236234 /* Launch.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50DA11252A16A23F00236234 /* Launch.storyboard */; };
|
2023-05-26 19:48:07 +00:00
|
|
|
5C0707D12A1ECB38004E7B51 /* DamusLogoGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C0707D02A1ECB38004E7B51 /* DamusLogoGradient.swift */; };
|
2024-04-04 02:03:46 +00:00
|
|
|
5C14C29B2BBBA29C00079FD2 /* RelaySoftwareDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C14C29A2BBBA29C00079FD2 /* RelaySoftwareDetail.swift */; };
|
|
|
|
5C14C29D2BBBA40B00079FD2 /* RelayAdminDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C14C29C2BBBA40B00079FD2 /* RelayAdminDetail.swift */; };
|
|
|
|
5C14C29F2BBBA5C600079FD2 /* RelayNipList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C14C29E2BBBA5C600079FD2 /* RelayNipList.swift */; };
|
2023-04-03 21:07:22 +00:00
|
|
|
5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C42E78B29DB76D90086AAC1 /* EmptyUserSearchView.swift */; };
|
2023-01-24 01:45:35 +00:00
|
|
|
5C513FBA297F72980072348F /* CustomPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C513FB9297F72980072348F /* CustomPicker.swift */; };
|
2023-01-30 23:49:03 +00:00
|
|
|
5C513FCC2984ACA60072348F /* QRCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C513FCB2984ACA60072348F /* QRCodeView.swift */; };
|
2023-05-26 19:56:54 +00:00
|
|
|
5C6E1DAD2A193EC2008FC15A /* GradientButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6E1DAC2A193EC2008FC15A /* GradientButtonStyle.swift */; };
|
2023-05-26 19:53:55 +00:00
|
|
|
5C6E1DAF2A194075008FC15A /* PinkGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6E1DAE2A194075008FC15A /* PinkGradient.swift */; };
|
2024-02-05 03:24:00 +00:00
|
|
|
5C7389B12B6EFA7100781E0A /* ProxyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7389B02B6EFA7100781E0A /* ProxyView.swift */; };
|
2024-03-10 22:37:13 +00:00
|
|
|
5C7389B72B9E692E00781E0A /* MutinyButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7389B62B9E692E00781E0A /* MutinyButton.swift */; };
|
|
|
|
5C7389B92B9E69ED00781E0A /* MutinyGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7389B82B9E69ED00781E0A /* MutinyGradient.swift */; };
|
2023-09-09 03:06:31 +00:00
|
|
|
5CC868DD2AA29B3200FB22BA /* NeutralButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC868DC2AA29B3200FB22BA /* NeutralButtonStyle.swift */; };
|
2023-09-09 03:11:13 +00:00
|
|
|
5CF2DCCC2AA3AF0B00984B8D /* RelayPicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF2DCCB2AA3AF0B00984B8D /* RelayPicView.swift */; };
|
2023-09-09 03:06:01 +00:00
|
|
|
5CF2DCCE2AABE1A500984B8D /* DamusLightGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF2DCCD2AABE1A500984B8D /* DamusLightGradient.swift */; };
|
2023-03-09 03:49:49 +00:00
|
|
|
5CF72FC229B9142F00124A13 /* ShareAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF72FC129B9142F00124A13 /* ShareAction.swift */; };
|
2023-03-29 22:57:50 +00:00
|
|
|
6439E014296790CF0020672B /* ProfilePicImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6439E013296790CF0020672B /* ProfilePicImageView.swift */; };
|
2023-02-08 19:07:58 +00:00
|
|
|
643EA5C8296B764E005081BB /* RelayFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643EA5C7296B764E005081BB /* RelayFilterView.swift */; };
|
2023-01-18 20:52:07 +00:00
|
|
|
647D9A8D2968520300A295DE /* SideMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 647D9A8C2968520300A295DE /* SideMenuView.swift */; };
|
2023-01-03 03:09:56 +00:00
|
|
|
64FBD06F296255C400D9D3B2 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64FBD06E296255C400D9D3B2 /* Theme.swift */; };
|
2023-08-21 21:17:21 +00:00
|
|
|
7527271E2A93FF0100214108 /* Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7527271D2A93FF0100214108 /* Block.swift */; };
|
2023-09-01 15:32:01 +00:00
|
|
|
75AD872B2AA23A460085EF2C /* Block+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75AD872A2AA23A460085EF2C /* Block+Tests.swift */; };
|
2023-01-27 21:03:17 +00:00
|
|
|
7C60CAEF298471A1009C80D6 /* CoreSVG.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C60CAEE298471A1009C80D6 /* CoreSVG.swift */; };
|
2023-01-25 21:25:55 +00:00
|
|
|
7C902AE32981D55B002AB16E /* ZoomableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C902AE22981D55B002AB16E /* ZoomableScrollView.swift */; };
|
2023-02-16 03:14:59 +00:00
|
|
|
7C95CAEE299DCEF1009DCB67 /* KFOptionSetter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C95CAED299DCEF1009DCB67 /* KFOptionSetter+.swift */; };
|
2023-02-17 17:34:41 +00:00
|
|
|
7CFF6317299FEFE5005D382A /* SelectableText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFF6316299FEFE5005D382A /* SelectableText.swift */; };
|
2023-01-10 23:12:34 +00:00
|
|
|
9609F058296E220800069BF3 /* BannerImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9609F057296E220800069BF3 /* BannerImageView.swift */; };
|
2023-02-24 18:28:47 +00:00
|
|
|
9C83F89329A937B900136C08 /* TextViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C83F89229A937B900136C08 /* TextViewWrapper.swift */; };
|
2023-03-16 15:13:03 +00:00
|
|
|
9CA876E229A00CEA0003B9A3 /* AttachMediaUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CA876E129A00CE90003B9A3 /* AttachMediaUtility.swift */; };
|
2023-10-11 12:17:28 +00:00
|
|
|
ADFE73552AD4793100EC7326 /* QRScanNSECView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADFE73542AD4793100EC7326 /* QRScanNSECView.swift */; };
|
2023-12-24 21:22:25 +00:00
|
|
|
B501062D2B363036003874F5 /* AuthIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B501062C2B363036003874F5 /* AuthIntegrationTests.swift */; };
|
2024-01-18 01:17:37 +00:00
|
|
|
B51C1CEA2B55A60A00E312A9 /* AddMuteItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51C1CE82B55A60A00E312A9 /* AddMuteItemView.swift */; };
|
|
|
|
B51C1CEB2B55A60A00E312A9 /* MuteDurationMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51C1CE92B55A60A00E312A9 /* MuteDurationMenu.swift */; };
|
2024-02-10 16:36:47 +00:00
|
|
|
B533694E2B66D791008A805E /* MutelistManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B533694D2B66D791008A805E /* MutelistManager.swift */; };
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C622B312BD700A232C0 /* ReconnectRelaysNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57B4C612B312BD700A232C0 /* ReconnectRelaysNotify.swift */; };
|
|
|
|
B57B4C642B312BFA00A232C0 /* RelayAuthenticationDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57B4C632B312BFA00A232C0 /* RelayAuthenticationDetail.swift */; };
|
|
|
|
B57B4C662B312C3700A232C0 /* NostrAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57B4C652B312C3700A232C0 /* NostrAuth.swift */; };
|
2024-02-10 16:36:47 +00:00
|
|
|
B59CAD4D2B688D1000677E8B /* MutelistManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B533694D2B66D791008A805E /* MutelistManager.swift */; };
|
2024-01-18 01:17:36 +00:00
|
|
|
B5A75C2A2B546D94007AFBC0 /* MuteItemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A75C292B546D94007AFBC0 /* MuteItemTests.swift */; };
|
2023-12-24 21:22:25 +00:00
|
|
|
B5B4D1432B37D47600844320 /* NdbExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B4D1422B37D47600844320 /* NdbExtensions.swift */; };
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C202B530D5100C5ECA7 /* MuteItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C60C1F2B530D5100C5ECA7 /* MuteItem.swift */; };
|
|
|
|
B5C60C212B530D5600C5ECA7 /* MuteItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C60C1F2B530D5100C5ECA7 /* MuteItem.swift */; };
|
|
|
|
B5C60C232B532A8700C5ECA7 /* DamusDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C60C222B532A8700C5ECA7 /* DamusDuration.swift */; };
|
2023-09-19 20:24:11 +00:00
|
|
|
BA37598A2ABCCDE40018D73B /* ImageResizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA3759892ABCCDE30018D73B /* ImageResizer.swift */; };
|
2023-09-19 20:29:40 +00:00
|
|
|
BA37598D2ABCCE500018D73B /* PhotoCaptureProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA37598B2ABCCE500018D73B /* PhotoCaptureProcessor.swift */; };
|
|
|
|
BA37598E2ABCCE500018D73B /* VideoCaptureProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA37598C2ABCCE500018D73B /* VideoCaptureProcessor.swift */; };
|
2023-10-20 18:15:58 +00:00
|
|
|
BA3759922ABCCEBA0018D73B /* CameraService+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA37598F2ABCCEBA0018D73B /* CameraService+Extensions.swift */; };
|
|
|
|
BA3759932ABCCEBA0018D73B /* CameraModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA3759902ABCCEBA0018D73B /* CameraModel.swift */; };
|
|
|
|
BA3759942ABCCEBA0018D73B /* CameraService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA3759912ABCCEBA0018D73B /* CameraService.swift */; };
|
2024-01-25 22:11:11 +00:00
|
|
|
BA3759972ABCCF360018D73B /* CameraPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA3759962ABCCF360018D73B /* CameraPreview.swift */; };
|
2022-12-30 07:39:16 +00:00
|
|
|
BA693074295D649800ADDB87 /* UserSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA693073295D649800ADDB87 /* UserSettingsStore.swift */; };
|
2022-12-28 21:10:36 +00:00
|
|
|
BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */; };
|
2023-04-29 18:38:28 +00:00
|
|
|
D2277EEA2A089BD5006C3807 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2277EE92A089BD5006C3807 /* Router.swift */; };
|
2023-11-14 07:21:39 +00:00
|
|
|
D70A3B172B02DCE5008BD568 /* NotificationFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */; };
|
2024-02-14 21:31:43 +00:00
|
|
|
D7100C562B76F8E600C59298 /* PurpleViewPrimitives.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7100C552B76F8E600C59298 /* PurpleViewPrimitives.swift */; };
|
2024-02-14 21:31:50 +00:00
|
|
|
D7100C582B76FC8400C59298 /* MarketingContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7100C572B76FC8400C59298 /* MarketingContentView.swift */; };
|
|
|
|
D7100C5A2B76FD5100C59298 /* LogoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7100C592B76FD5100C59298 /* LogoView.swift */; };
|
|
|
|
D7100C5C2B77016700C59298 /* IAPProductStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7100C5B2B77016700C59298 /* IAPProductStateView.swift */; };
|
2024-02-14 21:31:59 +00:00
|
|
|
D7100C5E2B7709ED00C59298 /* PurpleStoreKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7100C5D2B7709ED00C59298 /* PurpleStoreKitManager.swift */; };
|
2024-03-18 22:21:43 +00:00
|
|
|
D71AC4CC2BA8E3480076268E /* VisibilityTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71AC4CB2BA8E3480076268E /* VisibilityTracker.swift */; };
|
2023-08-19 19:04:18 +00:00
|
|
|
D71DC1EC2A9129C3006E207C /* PostViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71DC1EB2A9129C3006E207C /* PostViewTests.swift */; };
|
2024-01-30 07:41:38 +00:00
|
|
|
D72341192B6864F200E1E135 /* DamusPurpleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72341182B6864F200E1E135 /* DamusPurpleEnvironment.swift */; };
|
|
|
|
D723411A2B6864F200E1E135 /* DamusPurpleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72341182B6864F200E1E135 /* DamusPurpleEnvironment.swift */; };
|
2023-10-21 04:44:36 +00:00
|
|
|
D723C38E2AB8D83400065664 /* ContentFilters.swift in Sources */ = {isa = PBXBuildFile; fileRef = D723C38D2AB8D83400065664 /* ContentFilters.swift */; };
|
2024-01-30 07:41:49 +00:00
|
|
|
D724D8272B64B40B00ABE789 /* DamusPurpleAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D724D8262B64B40B00ABE789 /* DamusPurpleAccountView.swift */; };
|
2024-03-22 16:55:35 +00:00
|
|
|
D72927AD2BAB515C00F93E90 /* RelayURLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72927AC2BAB515C00F93E90 /* RelayURLTests.swift */; };
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D022AD9C136002AFF62 /* EventViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A2CFF2AD9B66B002AFF62 /* EventViewTests.swift */; };
|
|
|
|
D72A2D052AD9C1B5002AFF62 /* MockDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A2D042AD9C1B5002AFF62 /* MockDamusState.swift */; };
|
|
|
|
D72A2D072AD9C1FB002AFF62 /* MockProfiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A2D062AD9C1FB002AFF62 /* MockProfiles.swift */; };
|
storage: Improve clear cache functionality
This patch improves clear cache functionality by:
- Reducing kingfisher cache removal to one command (The two commands running async was leading to warning logs. One was a subset of the other)
- Removing all files under the cache folder where not currently used by other processes
Full Functionality test
-----------------------
PASS
Device: iPhone 13 mini (Physical device)
iOS: 17.0.3
Damus: This commit
Special remarks:
- I had to locally delete other unit tests to be able to build the test target
- Unit test run on an earlier version of the patch. Test coverage should still apply since this newer patch is a subset of the previous.
Setup: Run Damus with debugger connection to Xcode
Test steps:
1. Follow multiple active accounts (Skip if local Damus is already filled up with GBs of data)
2. Scroll down on the feed for a couple of minutes (or until you have seen at least a few images, a few videos, and link previews) (Skip if local Damus is filled up with GBs of data)
3. In Xcode, download a storage container (Window > Devices and Simulators > Select the device > Select Damus > click on (...) > Download container)
- Note: Even though you see the file, it does not download instantly. Monitor the file size until it roughly reaches the size reported in iOS storage settings, as the download may still be in progress. This may take a few minutes in some cases.
- Also take note of storage usage in iOS settings
4. Open the app data package using terminal
5. Run `du -h . | sort -hr`
6. Clear cache and check logs. Logs should indicate the caches being cleared, and there should be no storage-related warning/error logs. PASS
7. Download a new storage container. Remember to wait until it completes download.
8. Run `du -h . | sort -hr` on it.
9. Compare. There should be much less data. Also check iOS settings storage usage. PASS
10. Go back to the home feed and start scrolling, browsing, follow some other people, etc. Look at your own profile as well. Everything should appear to be working as expected with no crashes or important data loss
11. Check bookmarks are still present. PASS
12. Run `DamusCacheManagerTests`. Should pass. PASS* (*See special remarks)
Results:
- Storage usage goes from 3.9GB to 394.7MB
- Damus works as normal after clearing cache, and after restarting the app as well. It becomes slower for a moment, but after a bit it loads as normal again.
- No warning or error logs pertaining to clearing cache
- Unit test passes
My storage container disk usage stats after clearing cache:
```
% du -h | sort -hr
359M ./AppData
359M .
336M ./AppData/Documents
23M ./AppData/Library
20M ./AppData/Library/Caches
7.9M ./AppData/Library/Caches/com.jb55.damus2
2.4M ./AppData/Library/SplashBoard/Snapshots
2.4M ./AppData/Library/SplashBoard
1.8M ./AppData/Library/SplashBoard/Snapshots/com.jb55.damus2 - {DEFAULT GROUP}
1.6M ./AppData/Library/Caches/com.jb55.damus2/fsCachedData
636K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36
596K ./AppData/Library/Caches/com.apple.WebKit.GPU/com.apple.metal
596K ./AppData/Library/Caches/com.apple.WebKit.GPU
452K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal
296K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36/downscaled
224K ./AppData/Library/HTTPStorages/com.jb55.damus2
224K ./AppData/Library/HTTPStorages
164K ./AppData/Library/Caches/com.onevcat.Kingfisher.ImageCache.default
156K ./AppData/Library/Caches/RelayLogs
112K ./AppData/Library/Caches/com.apple.dyld
92K ./AppData/Library/Preferences
60K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal/archiveUsage.db
12K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState
12K ./AppData/Library/Saved Application State
8.0K ./AppData/StoreKit
8.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/ecc156b1-eb9c-4439-b219-e1eebf2b4c36
4.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/KnownSceneSessions
4.0K ./AppData/Library/LanguageModeling/en-dynamic.lm
4.0K ./AppData/Library/LanguageModeling
4.0K ./AppData/Library/Cookies
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit/WebsiteData
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit
0B ./AppData/SystemData/com.apple.SafariViewService/Library
0B ./AppData/SystemData/com.apple.SafariViewService
```
Biggest storage used remaining is in the Documents folder where NostrDB is stored. However, we do not want to clear NostrDB, so this is expected behavior.
Changelog-Changed: Improve clear cache functionality
Closes: https://github.com/damus-io/damus/issues/1472
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 17:44:00 +00:00
|
|
|
D7315A2A2ACDF3B70036E30A /* DamusCacheManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315A292ACDF3B70036E30A /* DamusCacheManager.swift */; };
|
|
|
|
D7315A2C2ACDF4DA0036E30A /* DamusCacheManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */; };
|
2024-01-30 07:42:04 +00:00
|
|
|
D7373BA62B688EA300F7783D /* DamusPurpleTranslationSetupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */; };
|
|
|
|
D7373BA82B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */; };
|
2024-01-30 07:42:18 +00:00
|
|
|
D7373BAA2B68A65A00F7783D /* PurpleAccountUpdateNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */; };
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */; };
|
|
|
|
D74AAFC32B153395006CF0F4 /* HeadlessDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */; };
|
|
|
|
D74AAFC52B1538DF006CF0F4 /* NotificationExtensionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */; };
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFC62B155B8B006CF0F4 /* Zaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A72975FC1800DC99E7 /* Zaps.swift */; };
|
|
|
|
D74AAFC72B155BD0006CF0F4 /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; };
|
|
|
|
D74AAFC82B155C9D006CF0F4 /* InsertSort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363AA728297703006E126D /* InsertSort.swift */; };
|
|
|
|
D74AAFC92B155CA5006CF0F4 /* UpdateStatsNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352A32A76AFF3003BB08B /* UpdateStatsNotify.swift */; };
|
|
|
|
D74AAFCC2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFCB2B155D07006CF0F4 /* MakeZapRequest.swift */; };
|
|
|
|
D74AAFCD2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFCB2B155D07006CF0F4 /* MakeZapRequest.swift */; };
|
|
|
|
D74AAFCF2B155D8C006CF0F4 /* ZapDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFCE2B155D8C006CF0F4 /* ZapDataModel.swift */; };
|
|
|
|
D74AAFD02B155D8C006CF0F4 /* ZapDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFCE2B155D8C006CF0F4 /* ZapDataModel.swift */; };
|
|
|
|
D74AAFD12B155DA4006CF0F4 /* RelayURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FF93FF2AC7AC5200FD969D /* RelayURL.swift */; };
|
|
|
|
D74AAFD22B155E78006CF0F4 /* WalletConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09612A098D0E00943473 /* WalletConnect.swift */; };
|
|
|
|
D74AAFD42B155ECB006CF0F4 /* Zaps+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFD32B155ECB006CF0F4 /* Zaps+.swift */; };
|
|
|
|
D74AAFD62B155F0C006CF0F4 /* WalletConnect+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFD52B155F0C006CF0F4 /* WalletConnect+.swift */; };
|
2024-01-14 21:55:04 +00:00
|
|
|
D74F430A2B23F0BE00425B75 /* DamusPurple.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74F43092B23F0BE00425B75 /* DamusPurple.swift */; };
|
|
|
|
D74F430C2B23FB9B00425B75 /* StoreObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74F430B2B23FB9B00425B75 /* StoreObserver.swift */; };
|
|
|
|
D76556D62B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76556D52B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift */; };
|
2023-10-23 23:32:43 +00:00
|
|
|
D76874F32AE3632B00FB0F68 /* ProfileZapLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76874F22AE3632B00FB0F68 /* ProfileZapLinkView.swift */; };
|
2023-10-21 04:44:36 +00:00
|
|
|
D77BFA0B2AE3051200621634 /* ProfileActionSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77BFA0A2AE3051200621634 /* ProfileActionSheetView.swift */; };
|
2023-10-23 23:32:43 +00:00
|
|
|
D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D783A63E2AD4E53D00658DDA /* SuggestedHashtagsView.swift */; };
|
2023-08-03 03:38:49 +00:00
|
|
|
D78525252A7B2EA4002FA637 /* NoteContentViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78525242A7B2EA4002FA637 /* NoteContentViewTests.swift */; };
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
D7870BC12AC4750B0080BA88 /* MentionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7870BC02AC4750B0080BA88 /* MentionView.swift */; };
|
|
|
|
D7870BC32AC47EBC0080BA88 /* EventLoaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7870BC22AC47EBC0080BA88 /* EventLoaderView.swift */; };
|
2023-11-14 07:21:39 +00:00
|
|
|
D789D1202AFEFBF20083A7AB /* secp256k1 in Frameworks */ = {isa = PBXBuildFile; productRef = D789D11F2AFEFBF20083A7AB /* secp256k1 */; };
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D78CD5982B8990300014D539 /* DamusAppNotificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78CD5972B8990300014D539 /* DamusAppNotificationView.swift */; };
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21A2B0856CC00234419 /* Mentions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7FF7D42823313F009601DB /* Mentions.swift */; };
|
|
|
|
D798D21B2B0856F200234419 /* NdbTagsIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */; };
|
|
|
|
D798D21C2B0857E400234419 /* Bech32Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABEF29857E9200D66079 /* Bech32Object.swift */; };
|
|
|
|
D798D21E2B0858BB00234419 /* MigratedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D798D21D2B0858BB00234419 /* MigratedTypes.swift */; };
|
|
|
|
D798D21F2B0858D600234419 /* MigratedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D798D21D2B0858BB00234419 /* MigratedTypes.swift */; };
|
|
|
|
D798D2202B08592000234419 /* NdbTagIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9054882A6AED4700811EEC /* NdbTagIterator.swift */; };
|
|
|
|
D798D2212B08594800234419 /* NdbTagElem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD1ADF2A6B305F001CD4DF /* NdbTagElem.swift */; };
|
|
|
|
D798D2222B08598A00234419 /* ReferencedId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C28A4112A6D03D200C1A7A5 /* ReferencedId.swift */; };
|
|
|
|
D798D2232B0859B700234419 /* KeychainStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F8C7F2A0220E1001AFC1D /* KeychainStorage.swift */; };
|
|
|
|
D798D2242B0859C900234419 /* LocalizationUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3040F029A8FF97008A0F29 /* LocalizationUtil.swift */; };
|
|
|
|
D798D2252B0859D700234419 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A93282704FA006E126D /* Post.swift */; };
|
|
|
|
D798D2262B085C4200234419 /* Bech32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD19283AA67F008EE7EF /* Bech32.swift */; };
|
|
|
|
D798D2282B085CDA00234419 /* NdbNote+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D798D2272B085CDA00234419 /* NdbNote+.swift */; };
|
|
|
|
D798D2292B08686C00234419 /* ContentParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4DD3DA2A6CA7E8005B4E85 /* ContentParsing.swift */; };
|
|
|
|
D798D22C2B086C7400234419 /* NostrEvent+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D798D22B2B086C7400234419 /* NostrEvent+.swift */; };
|
|
|
|
D798D22D2B086DC400234419 /* NostrEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB228049D640006080F /* NostrEvent.swift */; };
|
|
|
|
D798D22E2B086E4800234419 /* NostrResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB028049D510006080F /* NostrResponse.swift */; };
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C172AFEB061003A41B4 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79C4C162AFEB061003A41B4 /* NotificationService.swift */; };
|
|
|
|
D79C4C1B2AFEB061003A41B4 /* DamusNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D79C4C142AFEB061003A41B4 /* DamusNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
2023-10-07 01:21:53 +00:00
|
|
|
D7A343EE2AD0D77C00CED48B /* InlineSnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = D7A343ED2AD0D77C00CED48B /* InlineSnapshotTesting */; };
|
|
|
|
D7A343F02AD0D77C00CED48B /* SnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = D7A343EF2AD0D77C00CED48B /* SnapshotTesting */; };
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3DE2B53854300F104C4 /* DamusPurpleURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7ADD3DD2B53854300F104C4 /* DamusPurpleURL.swift */; };
|
|
|
|
D7ADD3E02B538D4200F104C4 /* DamusPurpleURLSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7ADD3DF2B538D4200F104C4 /* DamusPurpleURLSheetView.swift */; };
|
|
|
|
D7ADD3E22B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7ADD3E12B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift */; };
|
2023-12-16 08:28:54 +00:00
|
|
|
D7C6787E2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C6787D2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift */; };
|
2023-12-01 21:25:49 +00:00
|
|
|
D7CB5D3B2B112FBB00AD4105 /* NotificationFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */; };
|
|
|
|
D7CB5D3C2B1130C600AD4105 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDA128B29EB19C40006FA5A /* LocalNotification.swift */; };
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D3E2B116DAD00AD4105 /* NotificationsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D3D2B116DAD00AD4105 /* NotificationsManager.swift */; };
|
|
|
|
D7CB5D3F2B116DAD00AD4105 /* NotificationsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D3D2B116DAD00AD4105 /* NotificationsManager.swift */; };
|
|
|
|
D7CB5D402B116E8A00AD4105 /* UserSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA693073295D649800ADDB87 /* UserSettingsStore.swift */; };
|
|
|
|
D7CB5D412B116F0900AD4105 /* StringCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA5588229F33F5B00DC6A45 /* StringCodable.swift */; };
|
|
|
|
D7CB5D422B116F8900AD4105 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3AC79A28306D7B00E1F516 /* Contacts.swift */; };
|
|
|
|
D7CB5D452B116FE800AD4105 /* Contacts+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D442B116FE800AD4105 /* Contacts+.swift */; };
|
|
|
|
D7CB5D462B11703D00AD4105 /* Notify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3529F2A76AE80003BB08B /* Notify.swift */; };
|
|
|
|
D7CB5D472B11718700AD4105 /* Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE60CDC295E1C5E00105A1F /* Wallet.swift */; };
|
|
|
|
D7CB5D482B11719300AD4105 /* Profiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CACA9DB280C38C000D9BBE8 /* Profiles.swift */; };
|
|
|
|
D7CB5D4B2B11721600AD4105 /* ZapType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D4A2B11721600AD4105 /* ZapType.swift */; };
|
|
|
|
D7CB5D4C2B11721600AD4105 /* ZapType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D4A2B11721600AD4105 /* ZapType.swift */; };
|
|
|
|
D7CB5D4E2B11728000AD4105 /* NewEventsBits.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D4D2B11728000AD4105 /* NewEventsBits.swift */; };
|
|
|
|
D7CB5D4F2B11728000AD4105 /* NewEventsBits.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D4D2B11728000AD4105 /* NewEventsBits.swift */; };
|
|
|
|
D7CB5D512B1174D100AD4105 /* FriendFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D502B1174D100AD4105 /* FriendFilter.swift */; };
|
|
|
|
D7CB5D522B1174D100AD4105 /* FriendFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D502B1174D100AD4105 /* FriendFilter.swift */; };
|
|
|
|
D7CB5D532B1174E900AD4105 /* DeepLPlan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */; };
|
|
|
|
D7CB5D542B1174F700AD4105 /* NIP05.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8838529656C8B00DC99E7 /* NIP05.swift */; };
|
|
|
|
D7CB5D552B11758A00AD4105 /* UnmuteThreadNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */; };
|
|
|
|
D7CB5D562B11759900AD4105 /* MuteThreadNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */; };
|
|
|
|
D7CB5D572B11762900AD4105 /* UserStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5E54022A9522F600FF6E60 /* UserStatus.swift */; };
|
|
|
|
D7CB5D582B11763C00AD4105 /* NewMutesNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352A72A76B37E003BB08B /* NewMutesNotify.swift */; };
|
|
|
|
D7CB5D592B11764000AD4105 /* NewUnmutesNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA352AB2A76C07F003BB08B /* NewUnmutesNotify.swift */; };
|
|
|
|
D7CB5D5C2B1176B200AD4105 /* MediaUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D5B2B1176B200AD4105 /* MediaUploader.swift */; };
|
|
|
|
D7CB5D5D2B1176B200AD4105 /* MediaUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D5B2B1176B200AD4105 /* MediaUploader.swift */; };
|
|
|
|
D7CB5D5F2B11770C00AD4105 /* FollowState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D5E2B11770C00AD4105 /* FollowState.swift */; };
|
|
|
|
D7CB5D602B11770C00AD4105 /* FollowState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB5D5E2B11770C00AD4105 /* FollowState.swift */; };
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D7CBD1D42B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBD1D32B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift */; };
|
|
|
|
D7CBD1D62B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBD1D52B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift */; };
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CCFC072B05833200323D86 /* NdbNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90548A2A6AEDEE00811EEC /* NdbNote.swift */; };
|
|
|
|
D7CCFC082B05834500323D86 /* NoteId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF42A740BB7007AEB17 /* NoteId.swift */; };
|
|
|
|
D7CCFC0B2B0585EA00323D86 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; settings = {COMPILER_FLAGS = "-w"; }; };
|
|
|
|
D7CCFC0E2B0587C300323D86 /* EventRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C363A9B282838B9006E126D /* EventRef.swift */; };
|
|
|
|
D7CCFC0F2B0587F600323D86 /* Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8B28398BC6008A31F1 /* Keys.swift */; };
|
|
|
|
D7CCFC102B05880F00323D86 /* Id.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B7BF12A71B6540049DEE7 /* Id.swift */; };
|
|
|
|
D7CCFC112B05884E00323D86 /* AsciiCharacter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5D5C9C2A6B2CB40024563C /* AsciiCharacter.swift */; };
|
|
|
|
D7CCFC122B05886D00323D86 /* IdType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FEE2A73FCCB007AEB17 /* IdType.swift */; };
|
|
|
|
D7CCFC132B05887C00323D86 /* ProofOfWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFBA2804A34C0006080F /* ProofOfWork.swift */; };
|
|
|
|
D7CCFC152B05891000323D86 /* Referenced.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF82A741939007AEB17 /* Referenced.swift */; };
|
|
|
|
D7CCFC162B05894300323D86 /* Pubkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF02A73FCDB007AEB17 /* Pubkey.swift */; };
|
|
|
|
D7CCFC192B058A3F00323D86 /* Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7527271D2A93FF0100214108 /* Block.swift */; };
|
2023-12-01 21:26:54 +00:00
|
|
|
D7CD35132B1A72B800D63139 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3169CAEC294FCCFC00EE4006 /* Constants.swift */; };
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B182B0BDFDD002EDAD4 /* mdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793002A993B9A00489948 /* mdb.c */; };
|
|
|
|
D7CE1B192B0BE132002EDAD4 /* builder.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792942A9939BD00489948 /* builder.c */; };
|
|
|
|
D7CE1B1A2B0BE135002EDAD4 /* json_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792C82A9939BD00489948 /* json_parser.c */; };
|
|
|
|
D7CE1B1B2B0BE144002EDAD4 /* emitter.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792CF2A9939BD00489948 /* emitter.c */; };
|
|
|
|
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 */; };
|
|
|
|
D7CE1B382B0BE719002EDAD4 /* VeriferOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9432A9AD44700DC3548 /* VeriferOptions.swift */; };
|
|
|
|
D7CE1B392B0BE719002EDAD4 /* Table.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9442A9AD44700DC3548 /* Table.swift */; };
|
|
|
|
D7CE1B3A2B0BE719002EDAD4 /* Struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B94B2A9AD44700DC3548 /* Struct.swift */; };
|
|
|
|
D7CE1B3B2B0BE719002EDAD4 /* Int+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93A2A9AD44700DC3548 /* Int+extension.swift */; };
|
|
|
|
D7CE1B3C2B0BE719002EDAD4 /* TableVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9412A9AD44700DC3548 /* TableVerifier.swift */; };
|
|
|
|
D7CE1B3D2B0BE719002EDAD4 /* Verifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9452A9AD44700DC3548 /* Verifiable.swift */; };
|
|
|
|
D7CE1B3E2B0BE719002EDAD4 /* FlatbuffersErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93C2A9AD44700DC3548 /* FlatbuffersErrors.swift */; };
|
|
|
|
D7CE1B3F2B0BE719002EDAD4 /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B94A2A9AD44700DC3548 /* Enum.swift */; };
|
|
|
|
D7CE1B402B0BE719002EDAD4 /* FlatBufferObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9492A9AD44700DC3548 /* FlatBufferObject.swift */; };
|
|
|
|
D7CE1B412B0BE719002EDAD4 /* FlatBuffersUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93F2A9AD44700DC3548 /* FlatBuffersUtils.swift */; };
|
|
|
|
D7CE1B422B0BE719002EDAD4 /* Offset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9382A9AD44700DC3548 /* Offset.swift */; };
|
|
|
|
D7CE1B432B0BE719002EDAD4 /* String+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9472A9AD44700DC3548 /* String+extension.swift */; };
|
|
|
|
D7CE1B442B0BE719002EDAD4 /* Mutable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9392A9AD44700DC3548 /* Mutable.swift */; };
|
|
|
|
D7CE1B452B0BE719002EDAD4 /* Root.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9422A9AD44700DC3548 /* Root.swift */; };
|
|
|
|
D7CE1B462B0BE719002EDAD4 /* FlatBufferBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93B2A9AD44700DC3548 /* FlatBufferBuilder.swift */; };
|
|
|
|
D7CE1B472B0BE719002EDAD4 /* NativeObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9462A9AD44700DC3548 /* NativeObject.swift */; };
|
|
|
|
D7CE1B482B0BE719002EDAD4 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93D2A9AD44700DC3548 /* Message.swift */; };
|
|
|
|
D7CE1B492B0BE729002EDAD4 /* DisplayName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BB83029C0ED4F00FC4E37 /* DisplayName.swift */; };
|
2023-11-14 07:21:39 +00:00
|
|
|
D7DBD41F2B02F15E002A6197 /* NostrKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BEFD32819DE8F00B3DE84 /* NostrKind.swift */; };
|
2023-08-15 21:33:47 +00:00
|
|
|
D7DEEF2F2A8C021E00E0C99F /* NostrEventTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DEEF2E2A8C021E00E0C99F /* NostrEventTests.swift */; };
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED152B11776B0018B19C /* LibreTranslateServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE45AF5297BB2E700C1D842 /* LibreTranslateServer.swift */; };
|
|
|
|
D7EDED162B1177840018B19C /* LNUrls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883B5297730E400DC99E7 /* LNUrls.swift */; };
|
|
|
|
D7EDED172B1177960018B19C /* TranslationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA95C9298DF87B00F3D526 /* TranslationService.swift */; };
|
|
|
|
D7EDED182B1177A00018B19C /* LNUrlPayRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883A52975F83C00DC99E7 /* LNUrlPayRequest.swift */; };
|
|
|
|
D7EDED1C2B1178FE0018B19C /* NoteContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED1B2B1178FE0018B19C /* NoteContent.swift */; };
|
|
|
|
D7EDED1E2B11797D0018B19C /* LongformEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED1D2B11797D0018B19C /* LongformEvent.swift */; };
|
|
|
|
D7EDED1F2B11797D0018B19C /* LongformEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED1D2B11797D0018B19C /* LongformEvent.swift */; };
|
|
|
|
D7EDED212B117DCA0018B19C /* SequenceUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED202B117DCA0018B19C /* SequenceUtils.swift */; };
|
|
|
|
D7EDED222B117DCA0018B19C /* SequenceUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED202B117DCA0018B19C /* SequenceUtils.swift */; };
|
|
|
|
D7EDED232B117DFB0018B19C /* NoteContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED1B2B1178FE0018B19C /* NoteContent.swift */; };
|
|
|
|
D7EDED262B117FC80018B19C /* StringUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8CC6CB2A2CFEF900940F5F /* StringUtil.swift */; };
|
|
|
|
D7EDED272B117FF10018B19C /* CompatibleAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */; };
|
|
|
|
D7EDED282B1180940018B19C /* ImageUploadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD348EE29C3659D00497EB2 /* ImageUploadModel.swift */; };
|
|
|
|
D7EDED292B1182060018B19C /* AttachMediaUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CA876E129A00CE90003B9A3 /* AttachMediaUtility.swift */; };
|
|
|
|
D7EDED2A2B128CB40018B19C /* Nip98HTTPAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CCD1E692A874C4E0099A953 /* Nip98HTTPAuth.swift */; };
|
|
|
|
D7EDED2B2B128CDB0018B19C /* Hashtags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */; };
|
|
|
|
D7EDED2C2B128CFA0018B19C /* DamusColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */; };
|
|
|
|
D7EDED2E2B128E8A0018B19C /* CollectionExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED2D2B128E8A0018B19C /* CollectionExtension.swift */; };
|
|
|
|
D7EDED2F2B128E8A0018B19C /* CollectionExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED2D2B128E8A0018B19C /* CollectionExtension.swift */; };
|
|
|
|
D7EDED312B1290B80018B19C /* MarkdownUI in Frameworks */ = {isa = PBXBuildFile; productRef = D7EDED302B1290B80018B19C /* MarkdownUI */; };
|
2023-12-01 21:26:14 +00:00
|
|
|
D7EDED332B12ACAE0018B19C /* DamusUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED322B12ACAE0018B19C /* DamusUserDefaults.swift */; };
|
|
|
|
D7EDED342B12ACAE0018B19C /* DamusUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDED322B12ACAE0018B19C /* DamusUserDefaults.swift */; };
|
Migrate NostrDB files to shared app group file container
This change was made so that NostrDB data can be accessed from different build targets such as the notification service extension.
Upon initialization of NostrDB, it will check both DB file locations (the old documents directory, and the new shared app group container). If it sees the DB is present on the old location, and not on the new location, it will move the files to the new location. In any other condition it will keep the files intact to prevent data loss.
In order to avoid any conflicts between the damusApp's Ndb instance and the extension's Ndb instance when writing or moving the file, a new parameter called "owns_db_file" was added, and set to "false" for the extension. This ensures that the extension will not attempt to move DB files or create a new DB file on its own. Only the main app can move or create the DB file.
Testing
-------
PASS
Device: iPhone 15 Pro simulator
iOS: 17.0.1
Damus: This commit
Steps:
1. Run with the debugger attached to the extension target.
2. Using Apple's push notification testing dashboard, send a test push notification with a real payload (that includes the nostr event under `nostr_event`. Payload generated by strfry-push-notify).
3. Watch logs. It should show a message like "Got push notification from <DISPLAY_NAME>", where `DISPLAY_NAME` is the correct profile name of the user who generated the event. PASS
Regression testing
------------------
Device: iPhone 13 Mini (Real device)
iOS: 17.1.1
Damus: This commit
Other preconditions:
- Damus is at 1.6 (29) at the start of the test
- NostrDB filled with real data on the old location
Steps:
1. Flash (upgrade) the new Damus version (this commit) (This will be the first time upgrading, shared file container is empty)
2. Try to use the app normally. Scroll and navigate to several locations. Interact with some notes. App should be stable, work, and appear to have profile names already (i.e. It shouldn't start with a bunch of npubs in the place of profile names on known contacts). PASS
3. Downgrade back to the App store version (v1.6 (29))
4. Try to use the app normally. Scroll and navigate, interact, etc. App should work and be stable, but profile name cache is expected to be lost (i.e. shows npubs for a bit until profile is reloaded into NostrDB). PASS
5. Upgrade app again to the version in this commit.
6. Repeat step 2. Everything should work as normal and all profiles should be preloaded from the start. PASS
Closes: https://github.com/damus-io/damus/issues/1744
2023-11-21 01:31:35 +00:00
|
|
|
D7FB10A72B0C371A00FA8D42 /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B10272A7B0F5C008AA43E /* Log.swift */; };
|
2024-05-04 01:15:52 +00:00
|
|
|
D7FB14222BE5970000398331 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = D7FB14212BE5970000398331 /* PrivacyInfo.xcprivacy */; };
|
|
|
|
D7FB14252BE5A9A800398331 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = D7FB14242BE5A9A800398331 /* PrivacyInfo.xcprivacy */; };
|
2024-04-22 23:09:37 +00:00
|
|
|
D7FD12262BD345A700CF195B /* FirstAidSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FD12252BD345A700CF195B /* FirstAidSettingsView.swift */; };
|
2023-09-30 02:04:04 +00:00
|
|
|
D7FF94002AC7AC5300FD969D /* RelayURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FF93FF2AC7AC5200FD969D /* RelayURL.swift */; };
|
2024-02-19 20:53:55 +00:00
|
|
|
E02429952B7E97740088B16C /* CameraController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E02429942B7E97740088B16C /* CameraController.swift */; };
|
2024-01-13 19:19:44 +00:00
|
|
|
E02B54182B4DFADA0077FF42 /* Bech32ObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E02B54172B4DFADA0077FF42 /* Bech32ObjectTests.swift */; };
|
2024-01-18 19:59:30 +00:00
|
|
|
E04A37C62B544F090029650D /* URIParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04A37C52B544F090029650D /* URIParsing.swift */; };
|
2024-02-19 20:53:54 +00:00
|
|
|
E06336AA2B75832100A88E6B /* ImageMetadataTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E06336A92B75832100A88E6B /* ImageMetadataTest.swift */; };
|
|
|
|
E06336AB2B75850100A88E6B /* img_with_location.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = E06336A82B7582E000A88E6B /* img_with_location.jpeg */; };
|
2024-02-28 03:32:34 +00:00
|
|
|
E0E024112B7C19C20075735D /* TranslationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0E024102B7C19C20075735D /* TranslationTests.swift */; };
|
|
|
|
E0EE9DD42B8E5FEA00F3002D /* ImageProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0EE9DD32B8E5FEA00F3002D /* ImageProcessing.swift */; };
|
2023-05-29 12:02:12 +00:00
|
|
|
E4FA1C032A24BB7F00482697 /* SearchSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4FA1C022A24BB7F00482697 /* SearchSettingsView.swift */; };
|
2022-12-26 16:17:54 +00:00
|
|
|
E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E990020E2955F837003BBC5A /* EditMetadataView.swift */; };
|
2023-03-04 19:33:01 +00:00
|
|
|
E9E4ED0B295867B900DD7078 /* ThreadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E4ED0A295867B900DD7078 /* ThreadView.swift */; };
|
2023-10-20 18:15:58 +00:00
|
|
|
F71694EA2A662232001F4053 /* OnboardingSuggestionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71694E92A662232001F4053 /* OnboardingSuggestionsView.swift */; };
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694EC2A662292001F4053 /* SuggestedUsersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71694EB2A662292001F4053 /* SuggestedUsersViewModel.swift */; };
|
|
|
|
F71694EE2A6624F9001F4053 /* suggested_users.json in Resources */ = {isa = PBXBuildFile; fileRef = F71694ED2A6624F9001F4053 /* suggested_users.json */; };
|
|
|
|
F71694F22A67314D001F4053 /* SuggestedUserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71694F12A67314D001F4053 /* SuggestedUserView.swift */; };
|
|
|
|
F71694F42A6732B7001F4053 /* GradientFollowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71694F32A6732B7001F4053 /* GradientFollowButton.swift */; };
|
|
|
|
F71694F82A6983AF001F4053 /* GrayGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71694F72A6983AF001F4053 /* GrayGradient.swift */; };
|
2024-02-19 20:53:57 +00:00
|
|
|
F757933A29D7AECD007DEAC1 /* MediaPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = F757933929D7AECD007DEAC1 /* MediaPicker.swift */; };
|
2023-02-18 23:41:39 +00:00
|
|
|
F75BA12D29A1855400E10810 /* BookmarksManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75BA12C29A1855400E10810 /* BookmarksManager.swift */; };
|
|
|
|
F75BA12F29A18EF500E10810 /* BookmarksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75BA12E29A18EF500E10810 /* BookmarksView.swift */; };
|
2023-02-01 21:49:32 +00:00
|
|
|
F7908E92298B0F0700AB113A /* RelayDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7908E91298B0F0700AB113A /* RelayDetailView.swift */; };
|
|
|
|
F7908E97298B1FDF00AB113A /* NIPURLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7908E96298B1FDF00AB113A /* NIPURLBuilder.swift */; };
|
2023-04-03 17:57:07 +00:00
|
|
|
F79C7FAD29D5E9620000F946 /* EditPictureControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79C7FAC29D5E9620000F946 /* EditPictureControl.swift */; };
|
2023-01-18 20:52:07 +00:00
|
|
|
F7F0BA25297892BD009531F3 /* SwipeToDismiss.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F0BA24297892BD009531F3 /* SwipeToDismiss.swift */; };
|
2023-04-17 01:18:49 +00:00
|
|
|
F7F0BA272978E54D009531F3 /* ParticipantsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F0BA262978E54D009531F3 /* ParticipantsView.swift */; };
|
2023-04-15 09:40:56 +00:00
|
|
|
F944F56E29EA9CCC0067B3BF /* DamusParseContentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F944F56D29EA9CCC0067B3BF /* DamusParseContentTests.swift */; };
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXBuildFile section */
|
|
|
|
|
|
|
|
/* Begin PBXContainerItemProxy section */
|
|
|
|
4CE6DEF427F7A08200C66700 /* PBXContainerItemProxy */ = {
|
|
|
|
isa = PBXContainerItemProxy;
|
|
|
|
containerPortal = 4CE6DEDB27F7A08100C66700 /* Project object */;
|
|
|
|
proxyType = 1;
|
|
|
|
remoteGlobalIDString = 4CE6DEE227F7A08100C66700;
|
|
|
|
remoteInfo = damus;
|
|
|
|
};
|
|
|
|
4CE6DEFE27F7A08200C66700 /* PBXContainerItemProxy */ = {
|
|
|
|
isa = PBXContainerItemProxy;
|
|
|
|
containerPortal = 4CE6DEDB27F7A08100C66700 /* Project object */;
|
|
|
|
proxyType = 1;
|
|
|
|
remoteGlobalIDString = 4CE6DEE227F7A08100C66700;
|
|
|
|
remoteInfo = damus;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C192AFEB061003A41B4 /* PBXContainerItemProxy */ = {
|
|
|
|
isa = PBXContainerItemProxy;
|
|
|
|
containerPortal = 4CE6DEDB27F7A08100C66700 /* Project object */;
|
|
|
|
proxyType = 1;
|
|
|
|
remoteGlobalIDString = D79C4C132AFEB061003A41B4;
|
|
|
|
remoteInfo = DamusNotificationService;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXContainerItemProxy section */
|
|
|
|
|
2023-11-14 07:21:39 +00:00
|
|
|
/* Begin PBXCopyFilesBuildPhase section */
|
|
|
|
D79C4C1D2AFEB061003A41B4 /* Embed Foundation Extensions */ = {
|
|
|
|
isa = PBXCopyFilesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
dstPath = "";
|
|
|
|
dstSubfolderSpec = 13;
|
|
|
|
files = (
|
|
|
|
D79C4C1B2AFEB061003A41B4 /* DamusNotificationService.appex in Embed Foundation Extensions */,
|
|
|
|
);
|
|
|
|
name = "Embed Foundation Extensions";
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
/* End PBXCopyFilesBuildPhase section */
|
|
|
|
|
2022-04-02 23:57:42 +00:00
|
|
|
/* Begin PBXFileReference section */
|
2023-10-21 17:25:21 +00:00
|
|
|
0E8A4BB62AE4359200065E81 /* NostrFilter+Hashable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NostrFilter+Hashable.swift"; sourceTree = "<group>"; };
|
2022-12-27 19:38:52 +00:00
|
|
|
3165648A295B70D500C64604 /* LinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkView.swift; sourceTree = "<group>"; };
|
2022-12-17 22:26:03 +00:00
|
|
|
3169CAE5294E69C000EE4006 /* EmptyTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyTimelineView.swift; sourceTree = "<group>"; };
|
2022-12-20 16:20:37 +00:00
|
|
|
3169CAEC294FCCFC00EE4006 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = damus/Util/Constants.swift; sourceTree = SOURCE_ROOT; };
|
2022-12-20 16:39:29 +00:00
|
|
|
31D2E846295218AF006D67F8 /* Shimmer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shimmer.swift; sourceTree = "<group>"; };
|
2023-01-23 20:58:07 +00:00
|
|
|
3A185A04297F2C3800F4BDC0 /* lv-LV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "lv-LV"; path = "lv-LV.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A185A05297F2C3800F4BDC0 /* lv-LV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "lv-LV"; path = "lv-LV.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A185A06297F2C3800F4BDC0 /* lv-LV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "lv-LV"; path = "lv-LV.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-06-02 00:51:50 +00:00
|
|
|
3A23838D2A297DD200E5AA2E /* ZapButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapButtonModel.swift; sourceTree = "<group>"; };
|
2023-02-07 19:16:10 +00:00
|
|
|
3A25EF132992DA5D008ABE69 /* el-GR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "el-GR"; path = "el-GR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A25EF142992DA5D008ABE69 /* el-GR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "el-GR"; path = "el-GR.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A25EF152992DA5D008ABE69 /* el-GR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "el-GR"; path = "el-GR.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-01-08 05:24:35 +00:00
|
|
|
3A2B8B0A296A8982009CC16D /* en-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "en-US"; path = "en-US.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040EC29A5CB86008A0F29 /* ReplyDescriptionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyDescriptionTests.swift; sourceTree = "<group>"; };
|
|
|
|
3A3040F029A8FF97008A0F29 /* LocalizationUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationUtil.swift; sourceTree = "<group>"; };
|
|
|
|
3A3040F229A91366008A0F29 /* ProfileViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewTests.swift; sourceTree = "<group>"; };
|
|
|
|
3A3040F929A91ED6008A0F29 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A3040FA29A91EFC008A0F29 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A3040FB29A91F03008A0F29 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-HK"; path = "zh-HK.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
|
|
|
3A3040FC29A91F31008A0F29 /* zh-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-TW"; path = "zh-TW.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A3040FD29A91F31008A0F29 /* zh-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-TW"; path = "zh-TW.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
|
|
|
3A3040FE29A91F31008A0F29 /* zh-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-TW"; path = "zh-TW.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
2023-02-26 18:01:23 +00:00
|
|
|
3A3040FF29AB02D1008A0F29 /* en-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-US"; path = "en-US.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A30410029AB12AA008A0F29 /* EventGroupViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventGroupViewTests.swift; sourceTree = "<group>"; };
|
2023-03-21 12:53:57 +00:00
|
|
|
3A325AC429C9E0B8002BE7ED /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A325AC529C9E0B8002BE7ED /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A325AC629C9E0B8002BE7ED /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = vi; path = vi.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
|
|
|
3A325AC729C9E0CF002BE7ED /* es-ES */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-ES"; path = "es-ES.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A325AC829C9E0CF002BE7ED /* es-ES */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-ES"; path = "es-ES.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A325AC929C9E0CF002BE7ED /* es-ES */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "es-ES"; path = "es-ES.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-02-15 15:54:45 +00:00
|
|
|
3A41E559299D52BE001FA465 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A41E55A299D52BE001FA465 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A41E55B299D52BE001FA465 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = id; path = id.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-06-20 04:54:26 +00:00
|
|
|
3A4647CE2A413ADC00386AD8 /* CondensedProfilePicturesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CondensedProfilePicturesView.swift; sourceTree = "<group>"; };
|
2024-04-25 03:30:28 +00:00
|
|
|
3A47CB772BDA05A200728A7C /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A47CB782BDA05A200728A7C /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A47CB792BDA05A200728A7C /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fi; path = fi.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-04-08 18:44:50 +00:00
|
|
|
3A48E7AF29DFBE9D006E787E /* MutedThreadsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutedThreadsManager.swift; sourceTree = "<group>"; };
|
2023-01-08 05:24:35 +00:00
|
|
|
3A5C4575296A879E0032D398 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "es-419"; path = "es-419.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-02-03 20:56:54 +00:00
|
|
|
3A5CAE1D298DC0DB00B5334F /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-CN"; path = "zh-CN.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A5CAE1E298DC0DB00B5334F /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-CN"; path = "zh-CN.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A5CAE1F298DC0DB00B5334F /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-CN"; path = "zh-CN.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-07-01 18:42:36 +00:00
|
|
|
3A5E47C42A4A6CF400C0D090 /* Trie.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Trie.swift; sourceTree = "<group>"; };
|
|
|
|
3A5E47C62A4A76C800C0D090 /* TrieTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrieTests.swift; sourceTree = "<group>"; };
|
2023-02-09 00:17:24 +00:00
|
|
|
3A66D927299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A66D928299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A66D929299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ja; path = ja.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-04-13 11:09:15 +00:00
|
|
|
3A821C3E29E819D500B4BCA7 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A821C3F29E819D500B4BCA7 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A821C4029E819D500B4BCA7 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fr; path = fr.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-02-17 05:47:14 +00:00
|
|
|
3A827A18299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A827A19299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A827A1A299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-02-16 15:17:09 +00:00
|
|
|
3A8624D9299E82BE00BD8BE9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A8624DA299E82BE00BD8BE9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A8624DB299E82BE00BD8BE9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-06-04 21:49:37 +00:00
|
|
|
3A8CC6CB2A2CFEF900940F5F /* StringUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringUtil.swift; sourceTree = "<group>"; };
|
2023-07-01 18:42:36 +00:00
|
|
|
3A90B1802A4EA3AF00000D94 /* UserSearchCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserSearchCache.swift; sourceTree = "<group>"; };
|
|
|
|
3A90B1822A4EA3C600000D94 /* UserSearchCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSearchCacheTests.swift; sourceTree = "<group>"; };
|
2023-01-23 21:00:57 +00:00
|
|
|
3A929C20297F2CF80090925E /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A929C21297F2CF80090925E /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A929C22297F2CF80090925E /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "it-IT"; path = "it-IT.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-01-30 19:06:30 +00:00
|
|
|
3A93342929884CA600D6A8F3 /* pl-PL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pl-PL"; path = "pl-PL.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3A93342A29884CA600D6A8F3 /* pl-PL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pl-PL"; path = "pl-PL.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3A93342B29884CA600D6A8F3 /* pl-PL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pl-PL"; path = "pl-PL.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-02-03 20:56:54 +00:00
|
|
|
3A96D41A298DA94500388A2A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A96D41B298DA94500388A2A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3A96D41C298DA94500388A2A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = nl; path = nl.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2024-05-04 01:02:47 +00:00
|
|
|
3A994C4C2BE5B9370019F632 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = th; path = th.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
|
|
|
3A994C4D2BE5B9370019F632 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3A994C4E2BE5B9370019F632 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Localizable.strings; sourceTree = "<group>"; };
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA247FE297E3D900090C62D /* RepostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostsView.swift; sourceTree = "<group>"; };
|
|
|
|
3AA24801297E3DC20090C62D /* RepostView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostView.swift; sourceTree = "<group>"; };
|
2023-03-31 17:01:31 +00:00
|
|
|
3AA59D1C2999B0400061C48E /* DraftsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraftsModel.swift; sourceTree = "<group>"; };
|
2023-03-11 22:06:34 +00:00
|
|
|
3AA5E70229B682A5002701ED /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3AA5E70329B682AD002701ED /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3AA5E70429B682B3002701ED /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = uk; path = uk.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
|
|
|
3AA5E70529B9E83E002701ED /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3AA5E70629B9E844002701ED /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3AA5E70729B9E84A002701ED /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-02-04 17:07:27 +00:00
|
|
|
3AAA95C9298DF87B00F3D526 /* TranslationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslationService.swift; sourceTree = "<group>"; };
|
|
|
|
3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLPlan.swift; sourceTree = "<group>"; };
|
2023-07-14 04:21:08 +00:00
|
|
|
3AAC7A012A60FE72002B50DF /* LocalizationUtilTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationUtilTests.swift; sourceTree = "<group>"; };
|
2023-01-29 16:41:12 +00:00
|
|
|
3AB5B86A2986D8A3006599D2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3AB5B86B2986D8A3006599D2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3AB5B86C2986D8A3006599D2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = de; path = de.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-02-04 17:07:27 +00:00
|
|
|
3AB72AB8298ECF30004BB58C /* Translator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Translator.swift; sourceTree = "<group>"; };
|
2023-07-09 19:18:50 +00:00
|
|
|
3ABACEBF2A5B3ED10037A847 /* sw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sw; path = sw.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3ABACEC02A5B3ED10037A847 /* sw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sw; path = sw.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
|
|
|
3ABACEC12A5B3ED10037A847 /* sw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sw; path = sw.lproj/Localizable.strings; sourceTree = "<group>"; };
|
2023-02-02 14:28:41 +00:00
|
|
|
3AC524EE298C000B00693EBF /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3AC524EF298C000B00693EBF /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3AC524F0298C000B00693EBF /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ar; path = ar.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
2023-03-21 12:53:57 +00:00
|
|
|
3AC59CA729CDDB78007E04A6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3AC59CA829CDDB78007E04A6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3AC59CA929CDDB78007E04A6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-BR"; path = "pt-BR.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-01-17 01:44:41 +00:00
|
|
|
3ACB685B297633BC00C46468 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3ACB685E297633BC00C46468 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
2022-12-31 04:32:33 +00:00
|
|
|
3ACBCB77295FE5C70037388A /* TimeAgoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeAgoTests.swift; sourceTree = "<group>"; };
|
2023-03-17 02:55:54 +00:00
|
|
|
3AD14EB529C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "hu-HU"; path = "hu-HU.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
|
|
|
3AD14EB629C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hu-HU"; path = "hu-HU.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3AD14EB729C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hu-HU"; path = "hu-HU.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3AD14EB829C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "sv-SE"; path = "sv-SE.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
|
|
|
3AD14EB929C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3AD14EBA29C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
2023-03-11 22:06:34 +00:00
|
|
|
3AD5662B29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
|
|
|
3AD5662C29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fa; path = fa.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
|
|
|
3AD5662D29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/Localizable.strings; sourceTree = "<group>"; };
|
2023-03-14 16:38:36 +00:00
|
|
|
3AD5663129C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
|
|
|
|
3AD5663229C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
|
|
|
3AD5663329C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
2023-01-20 02:59:37 +00:00
|
|
|
3AE45AF5297BB2E700C1D842 /* LibreTranslateServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibreTranslateServer.swift; sourceTree = "<group>"; };
|
2023-01-22 01:54:33 +00:00
|
|
|
3AEB8003297CCEA800713A25 /* tr-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "tr-TR"; path = "tr-TR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3AEB8004297CCEA800713A25 /* tr-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "tr-TR"; path = "tr-TR.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3AEB8005297CCEA900713A25 /* tr-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "tr-TR"; path = "tr-TR.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-01-30 19:05:32 +00:00
|
|
|
3AF6336829884C6B0005672A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
|
|
|
3AF6336929884C6B0005672A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
|
|
|
3AF6336A29884C6B0005672A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
2023-08-20 01:09:30 +00:00
|
|
|
3CCD1E692A874C4E0099A953 /* Nip98HTTPAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Nip98HTTPAuth.swift; sourceTree = "<group>"; };
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670028FC7C5900038D2A /* RelayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayView.swift; sourceTree = "<group>"; };
|
2022-10-16 23:11:27 +00:00
|
|
|
4C06670528FCB08600038D2A /* ImageCarousel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCarousel.swift; sourceTree = "<group>"; };
|
2022-10-17 22:20:38 +00:00
|
|
|
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>"; };
|
2022-04-20 02:46:30 +00:00
|
|
|
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>"; };
|
2023-07-14 20:07:39 +00:00
|
|
|
4C0C03972A61E27B0098B3B8 /* primal.wasm */ = {isa = PBXFileReference; lastKnownFileType = file; name = primal.wasm; path = nostrscript/primal.wasm; sourceTree = SOURCE_ROOT; };
|
|
|
|
4C0C03982A61E27B0098B3B8 /* bool_setting.wasm */ = {isa = PBXFileReference; lastKnownFileType = file; name = bool_setting.wasm; path = nostrscript/bool_setting.wasm; sourceTree = SOURCE_ROOT; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C12534F2A76C5B20004F4B8 /* UnfollowedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnfollowedNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253512A76C6130004F4B8 /* ComposeNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253532A76C7D60004F4B8 /* LogoutNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogoutNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253552A76C8C60004F4B8 /* BroadcastNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BroadcastNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253572A76C9060004F4B8 /* PresentSheetNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentSheetNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253592A76C9960004F4B8 /* UnfollowNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnfollowNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C12535B2A76CA540004F4B8 /* LoginNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C12535D2A76CA870004F4B8 /* SwitchedTimelineNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwitchedTimelineNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C12535F2A76CF890004F4B8 /* ScrollToTopNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollToTopNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253612A76D00B0004F4B8 /* PostNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253632A76D08F0004F4B8 /* ReportNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253652A76D0FF0004F4B8 /* OnlyZapsNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnlyZapsNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253672A76D2470004F4B8 /* MuteNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuteNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaysChangedNotify.swift; sourceTree = "<group>"; };
|
2023-07-29 16:42:59 +00:00
|
|
|
4C15C7142A55DE7A00D0A0DB /* ReactionsSettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReactionsSettingsView.swift; sourceTree = "<group>"; };
|
2023-06-03 01:51:49 +00:00
|
|
|
4C190F1F2A535FC200027FD5 /* CustomizeZapModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomizeZapModel.swift; sourceTree = "<group>"; };
|
2023-07-04 18:42:16 +00:00
|
|
|
4C190F242A547D2000027FD5 /* LoadScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadScript.swift; sourceTree = "<group>"; };
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DEB29F88C6B004C165C /* BlurHashEncode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlurHashEncode.swift; sourceTree = "<group>"; };
|
|
|
|
4C198DEC29F88C6B004C165C /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = Readme.md; sourceTree = "<group>"; };
|
|
|
|
4C198DED29F88C6B004C165C /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
|
|
|
|
4C198DEE29F88C6B004C165C /* BlurHashDecode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlurHashDecode.swift; sourceTree = "<group>"; };
|
|
|
|
4C198DF429F88D2E004C165C /* ImageMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageMetadata.swift; sourceTree = "<group>"; };
|
2023-07-11 01:59:50 +00:00
|
|
|
4C19AE4B2A5CEF7C00C90DB7 /* primal.ts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.typescript; path = primal.ts; sourceTree = "<group>"; };
|
|
|
|
4C19AE4C2A5CEF7C00C90DB7 /* NostrScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NostrScript.swift; sourceTree = "<group>"; };
|
|
|
|
4C19AE502A5CEF7C00C90DB7 /* nostr.ts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.typescript; path = nostr.ts; sourceTree = "<group>"; };
|
2023-07-11 14:21:16 +00:00
|
|
|
4C19AE542A5D977400C90DB7 /* HashtagTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTests.swift; sourceTree = "<group>"; };
|
2023-04-04 19:03:31 +00:00
|
|
|
4C1A9A1929DCA17E00516EAC /* ReplyCounter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyCounter.swift; sourceTree = "<group>"; };
|
2023-04-05 15:49:15 +00:00
|
|
|
4C1A9A1C29DDCF9B00516EAC /* NotificationSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsView.swift; sourceTree = "<group>"; };
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A1E29DDD24B00516EAC /* AppearanceSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceSettingsView.swift; sourceTree = "<group>"; };
|
|
|
|
4C1A9A2029DDD3E100516EAC /* KeySettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeySettingsView.swift; sourceTree = "<group>"; };
|
|
|
|
4C1A9A2229DDDB8100516EAC /* IconLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconLabel.swift; sourceTree = "<group>"; };
|
|
|
|
4C1A9A2429DDDF2600516EAC /* ZapSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapSettingsView.swift; sourceTree = "<group>"; };
|
|
|
|
4C1A9A2629DDE31900516EAC /* TranslationSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslationSettingsView.swift; sourceTree = "<group>"; };
|
2023-05-26 17:13:58 +00:00
|
|
|
4C1A9A2929DDF54400516EAC /* DamusVideoPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusVideoPlayer.swift; sourceTree = "<group>"; };
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB02A7958E60024F453 /* VersionInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionInfo.swift; sourceTree = "<group>"; };
|
|
|
|
4C1D4FB32A7967990024F453 /* build-git-hash.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "build-git-hash.txt"; sourceTree = SOURCE_ROOT; };
|
2022-06-30 14:16:48 +00:00
|
|
|
4C216F31286E388800040376 /* DMChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMChatView.swift; sourceTree = "<group>"; };
|
|
|
|
4C216F33286F5ACD00040376 /* DMView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMView.swift; sourceTree = "<group>"; };
|
|
|
|
4C216F352870A9A700040376 /* InputDismissKeyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputDismissKeyboard.swift; sourceTree = "<group>"; };
|
2022-07-03 16:23:08 +00:00
|
|
|
4C216F372871EDE300040376 /* DirectMessageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectMessageModel.swift; sourceTree = "<group>"; };
|
2023-05-15 18:57:37 +00:00
|
|
|
4C28595F2A12A2BE004746F7 /* SupporterBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupporterBadge.swift; sourceTree = "<group>"; };
|
|
|
|
4C2859612A12A7F0004746F7 /* GoldSupportGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoldSupportGradient.swift; sourceTree = "<group>"; };
|
2022-05-20 23:06:13 +00:00
|
|
|
4C285C8128385570008A31F1 /* CarouselView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselView.swift; sourceTree = "<group>"; };
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8328385690008A31F1 /* CreateAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateAccountView.swift; sourceTree = "<group>"; };
|
|
|
|
4C285C85283892E7008A31F1 /* CreateAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateAccountModel.swift; sourceTree = "<group>"; };
|
|
|
|
4C285C892838B985008A31F1 /* ProfilePictureSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilePictureSelector.swift; sourceTree = "<group>"; };
|
|
|
|
4C285C8B28398BC6008A31F1 /* Keys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Keys.swift; sourceTree = "<group>"; };
|
|
|
|
4C285C8D28399BFD008A31F1 /* SaveKeysView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveKeysView.swift; sourceTree = "<group>"; };
|
2023-07-23 18:55:36 +00:00
|
|
|
4C28A4112A6D03D200C1A7A5 /* ReferencedId.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReferencedId.swift; sourceTree = "<group>"; };
|
2023-08-03 00:07:55 +00:00
|
|
|
4C2B10272A7B0F5C008AA43E /* Log.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Log.swift; sourceTree = "<group>"; };
|
2023-07-26 15:46:44 +00:00
|
|
|
4C2B7BF12A71B6540049DEE7 /* Id.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Id.swift; sourceTree = "<group>"; };
|
2023-02-15 17:35:47 +00:00
|
|
|
4C2CDDF6299D4A5E00879FD5 /* Debouncer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Debouncer.swift; sourceTree = "<group>"; };
|
2024-04-25 21:03:34 +00:00
|
|
|
4C2D34402BDAF1B300F9FB44 /* NIP10Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP10Tests.swift; sourceTree = "<group>"; };
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7129A5677A00E2BD5A /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = "<group>"; };
|
|
|
|
4C30AC7329A5680900E2BD5A /* EventGroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventGroupView.swift; sourceTree = "<group>"; };
|
|
|
|
4C30AC7529A5770900E2BD5A /* NotificationItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationItemView.swift; sourceTree = "<group>"; };
|
|
|
|
4C30AC7729A577AB00E2BD5A /* EventCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventCache.swift; sourceTree = "<group>"; };
|
|
|
|
4C30AC7F29A6A53F00E2BD5A /* ProfilePicturesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilePicturesView.swift; sourceTree = "<group>"; };
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9372A9AD44700DC3548 /* FbConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FbConstants.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9382A9AD44700DC3548 /* Offset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Offset.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9392A9AD44700DC3548 /* Mutable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mutable.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B93A2A9AD44700DC3548 /* Int+extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Int+extension.swift"; sourceTree = "<group>"; };
|
|
|
|
4C32B93B2A9AD44700DC3548 /* FlatBufferBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlatBufferBuilder.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B93C2A9AD44700DC3548 /* FlatbuffersErrors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlatbuffersErrors.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B93D2A9AD44700DC3548 /* Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B93E2A9AD44700DC3548 /* Verifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Verifier.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B93F2A9AD44700DC3548 /* FlatBuffersUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlatBuffersUtils.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9402A9AD44700DC3548 /* ByteBuffer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ByteBuffer.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9412A9AD44700DC3548 /* TableVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableVerifier.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9422A9AD44700DC3548 /* Root.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Root.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9432A9AD44700DC3548 /* VeriferOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VeriferOptions.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9442A9AD44700DC3548 /* Table.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Table.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9452A9AD44700DC3548 /* Verifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Verifiable.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9462A9AD44700DC3548 /* NativeObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NativeObject.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B9472A9AD44700DC3548 /* String+extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+extension.swift"; sourceTree = "<group>"; };
|
|
|
|
4C32B9482A9AD44700DC3548 /* Documentation.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Documentation.docc; sourceTree = "<group>"; };
|
|
|
|
4C32B9492A9AD44700DC3548 /* FlatBufferObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FlatBufferObject.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B94A2A9AD44700DC3548 /* Enum.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Enum.swift; sourceTree = "<group>"; };
|
|
|
|
4C32B94B2A9AD44700DC3548 /* Struct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Struct.swift; sourceTree = "<group>"; };
|
2022-05-04 23:26:10 +00:00
|
|
|
4C363A8328233689006E126D /* Parser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Parser.swift; sourceTree = "<group>"; };
|
2022-05-05 04:33:08 +00:00
|
|
|
4C363A8728236948006E126D /* BlocksView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlocksView.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A8B28236B92006E126D /* PubkeyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PubkeyView.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A8D28236FE4006E126D /* NoteContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteContentView.swift; sourceTree = "<group>"; };
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A8F28247A1D006E126D /* NostrLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrLink.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A912825FCF2006E126D /* ProfileUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileUpdate.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A93282704FA006E126D /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A952827096D006E126D /* PostBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostBlock.swift; sourceTree = "<group>"; };
|
2022-05-08 17:45:24 +00:00
|
|
|
4C363A9928283854006E126D /* Reply.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reply.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A9B282838B9006E126D /* EventRef.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventRef.swift; sourceTree = "<group>"; };
|
2022-05-09 02:01:42 +00:00
|
|
|
4C363A9D2828A822006E126D /* ReplyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyTests.swift; sourceTree = "<group>"; };
|
|
|
|
4C363A9F2828A8DD006E126D /* LikeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LikeTests.swift; sourceTree = "<group>"; };
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA128296A7E006E126D /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
|
|
|
|
4C363AA328296DEE006E126D /* SearchModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchModel.swift; sourceTree = "<group>"; };
|
|
|
|
4C363AA728297703006E126D /* InsertSort.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertSort.swift; sourceTree = "<group>"; };
|
2023-01-02 23:18:42 +00:00
|
|
|
4C3A1D3629637E0500558C0F /* PreviewCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewCache.swift; sourceTree = "<group>"; };
|
2022-05-15 18:08:36 +00:00
|
|
|
4C3AC79A28306D7B00E1F516 /* Contacts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contacts.swift; sourceTree = "<group>"; };
|
2022-05-16 23:23:34 +00:00
|
|
|
4C3AC79C2833036D00E1F516 /* FollowingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowingView.swift; sourceTree = "<group>"; };
|
|
|
|
4C3AC79E2833115300E1F516 /* FollowButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowButtonView.swift; sourceTree = "<group>"; };
|
2022-05-19 15:33:37 +00:00
|
|
|
4C3AC7A02835A81400E1F516 /* SetupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupView.swift; sourceTree = "<group>"; };
|
|
|
|
4C3AC7A42836987600E1F516 /* MainTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabView.swift; sourceTree = "<group>"; };
|
2022-05-19 21:38:25 +00:00
|
|
|
4C3AC7A628369BA200E1F516 /* SearchHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchHomeView.swift; sourceTree = "<group>"; };
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD12819DB9B00B3DE84 /* ProfileModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileModel.swift; sourceTree = "<group>"; };
|
|
|
|
4C3BEFD32819DE8F00B3DE84 /* NostrKind.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrKind.swift; sourceTree = "<group>"; };
|
|
|
|
4C3BEFD5281D995700B3DE84 /* ActionBarModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionBarModel.swift; sourceTree = "<group>"; };
|
2022-05-04 23:26:10 +00:00
|
|
|
4C3BEFD9281DCA1400B3DE84 /* LikeCounter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LikeCounter.swift; sourceTree = "<group>"; };
|
|
|
|
4C3BEFDB281DCE6100B3DE84 /* Liked.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Liked.swift; sourceTree = "<group>"; };
|
|
|
|
4C3BEFDF281DE1ED00B3DE84 /* DamusState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusState.swift; sourceTree = "<group>"; };
|
2023-02-04 17:55:16 +00:00
|
|
|
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>"; };
|
2023-09-10 17:16:50 +00:00
|
|
|
4C3DCC752A9FC2030091E592 /* NdbTxn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTxn.swift; sourceTree = "<group>"; };
|
2022-10-19 14:46:05 +00:00
|
|
|
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>"; };
|
2023-02-03 17:25:07 +00:00
|
|
|
4C42812B298C848200DBF26F /* TranslateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslateView.swift; sourceTree = "<group>"; };
|
2024-03-04 14:03:53 +00:00
|
|
|
4C463CBE2B960B96008A8C36 /* PurpleBackdrop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleBackdrop.swift; sourceTree = "<group>"; };
|
2023-08-25 19:32:30 +00:00
|
|
|
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>"; };
|
|
|
|
4C4792912A9939BD00489948 /* flatcc_alloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_alloc.h; sourceTree = "<group>"; };
|
|
|
|
4C4792922A9939BD00489948 /* flatcc_json_printer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_json_printer.h; sourceTree = "<group>"; };
|
|
|
|
4C4792932A9939BD00489948 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
|
|
|
|
4C4792942A9939BD00489948 /* builder.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = builder.c; sourceTree = "<group>"; };
|
|
|
|
4C4792952A9939BD00489948 /* flatcc_verifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_verifier.h; sourceTree = "<group>"; };
|
|
|
|
4C4792962A9939BD00489948 /* flatcc_refmap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_refmap.h; sourceTree = "<group>"; };
|
|
|
|
4C4792972A9939BD00489948 /* flatcc_unaligned.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_unaligned.h; sourceTree = "<group>"; };
|
|
|
|
4C4792992A9939BD00489948 /* grisu3_print.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = grisu3_print.h; sourceTree = "<group>"; };
|
|
|
|
4C47929A2A9939BD00489948 /* pprintfp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pprintfp.h; sourceTree = "<group>"; };
|
|
|
|
4C47929B2A9939BD00489948 /* pbase64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pbase64.h; sourceTree = "<group>"; };
|
|
|
|
4C47929C2A9939BD00489948 /* punaligned.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = punaligned.h; sourceTree = "<group>"; };
|
|
|
|
4C47929D2A9939BD00489948 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
|
|
|
4C47929E2A9939BD00489948 /* pdiagnostic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pdiagnostic.h; sourceTree = "<group>"; };
|
|
|
|
4C47929F2A9939BD00489948 /* pinttypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pinttypes.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A02A9939BD00489948 /* pinline.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pinline.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A12A9939BD00489948 /* pprintint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pprintint.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A22A9939BD00489948 /* pdiagnostic_pop.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pdiagnostic_pop.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A52A9939BD00489948 /* stdalign.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = stdalign.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A62A9939BD00489948 /* inttypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = inttypes.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A72A9939BD00489948 /* stdbool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = stdbool.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A82A9939BD00489948 /* stdint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = stdint.h; sourceTree = "<group>"; };
|
|
|
|
4C4792A92A9939BD00489948 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
|
|
|
4C4792AB2A9939BD00489948 /* endian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = "<group>"; };
|
|
|
|
4C4792AC2A9939BD00489948 /* pversion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pversion.h; sourceTree = "<group>"; };
|
|
|
|
4C4792AD2A9939BD00489948 /* pstdalign.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pstdalign.h; sourceTree = "<group>"; };
|
|
|
|
4C4792AE2A9939BD00489948 /* pdiagnostic_push.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pdiagnostic_push.h; sourceTree = "<group>"; };
|
|
|
|
4C4792AF2A9939BD00489948 /* pendian_detect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pendian_detect.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B02A9939BD00489948 /* paligned_alloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = paligned_alloc.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B12A9939BD00489948 /* pendian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pendian.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B22A9939BD00489948 /* pstatic_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pstatic_assert.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B32A9939BD00489948 /* pwarnings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pwarnings.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B42A9939BD00489948 /* pparsefp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pparsefp.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B52A9939BD00489948 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
|
|
|
4C4792B62A9939BD00489948 /* portable_basic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = portable_basic.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B72A9939BD00489948 /* portable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = portable.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B82A9939BD00489948 /* grisu3_math.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = grisu3_math.h; sourceTree = "<group>"; };
|
|
|
|
4C4792B92A9939BD00489948 /* pattributes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pattributes.h; sourceTree = "<group>"; };
|
|
|
|
4C4792BA2A9939BD00489948 /* pstdint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pstdint.h; sourceTree = "<group>"; };
|
|
|
|
4C4792BB2A9939BD00489948 /* pstdbool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pstdbool.h; sourceTree = "<group>"; };
|
|
|
|
4C4792BC2A9939BD00489948 /* pcrt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pcrt.h; sourceTree = "<group>"; };
|
|
|
|
4C4792BD2A9939BD00489948 /* pstatic_assert_scope.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pstatic_assert_scope.h; sourceTree = "<group>"; };
|
|
|
|
4C4792BE2A9939BD00489948 /* grisu3_parse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = grisu3_parse.h; sourceTree = "<group>"; };
|
|
|
|
4C4792BF2A9939BD00489948 /* pparseint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pparseint.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C02A9939BD00489948 /* flatcc_endian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_endian.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C12A9939BD00489948 /* flatcc_iov.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_iov.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C22A9939BD00489948 /* flatcc_rtconfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_rtconfig.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C32A9939BD00489948 /* flatcc_accessors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_accessors.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C42A9939BD00489948 /* flatcc_epilogue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_epilogue.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C52A9939BD00489948 /* flatcc_identifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_identifier.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C62A9939BD00489948 /* flatcc_prologue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_prologue.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C72A9939BD00489948 /* flatcc_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_builder.h; sourceTree = "<group>"; };
|
|
|
|
4C4792C82A9939BD00489948 /* json_parser.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = json_parser.c; sourceTree = "<group>"; };
|
|
|
|
4C4792CA2A9939BD00489948 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
|
|
|
4C4792CB2A9939BD00489948 /* readfile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = readfile.h; sourceTree = "<group>"; };
|
|
|
|
4C4792CC2A9939BD00489948 /* cdump.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cdump.h; sourceTree = "<group>"; };
|
|
|
|
4C4792CD2A9939BD00489948 /* elapsed.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = elapsed.h; sourceTree = "<group>"; };
|
|
|
|
4C4792CE2A9939BD00489948 /* hexdump.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hexdump.h; sourceTree = "<group>"; };
|
|
|
|
4C4792CF2A9939BD00489948 /* emitter.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = emitter.c; sourceTree = "<group>"; };
|
|
|
|
4C4792D02A9939BD00489948 /* flatcc_json_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_json_parser.h; sourceTree = "<group>"; };
|
|
|
|
4C4792D12A9939BD00489948 /* refmap.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = refmap.c; sourceTree = "<group>"; };
|
|
|
|
4C4792D22A9939BD00489948 /* flatcc_flatbuffers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_flatbuffers.h; sourceTree = "<group>"; };
|
|
|
|
4C4792D32A9939BD00489948 /* flatcc_portable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_portable.h; sourceTree = "<group>"; };
|
|
|
|
4C4792D42A9939BD00489948 /* verifier.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = verifier.c; sourceTree = "<group>"; };
|
|
|
|
4C4792D52A9939BD00489948 /* flatcc_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_types.h; sourceTree = "<group>"; };
|
|
|
|
4C4792D62A9939BD00489948 /* json_printer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = json_printer.c; sourceTree = "<group>"; };
|
|
|
|
4C4792D72A9939BD00489948 /* flatcc_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_assert.h; sourceTree = "<group>"; };
|
|
|
|
4C4792D92A9939BD00489948 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
|
|
|
4C4792DA2A9939BD00489948 /* reflection_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = reflection_reader.h; sourceTree = "<group>"; };
|
|
|
|
4C4792DB2A9939BD00489948 /* flatbuffers_common_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_reader.h; sourceTree = "<group>"; };
|
|
|
|
4C4792DC2A9939BD00489948 /* reflection_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = reflection_builder.h; sourceTree = "<group>"; };
|
|
|
|
4C4792DD2A9939BD00489948 /* reflection_verifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = reflection_verifier.h; sourceTree = "<group>"; };
|
|
|
|
4C4792DE2A9939BD00489948 /* flatbuffers_common_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_builder.h; sourceTree = "<group>"; };
|
|
|
|
4C4792FF2A993B9A00489948 /* lmdb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lmdb.h; sourceTree = "<group>"; };
|
|
|
|
4C4793002A993B9A00489948 /* mdb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mdb.c; sourceTree = "<group>"; };
|
|
|
|
4C4793022A993D9300489948 /* midl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = midl.h; sourceTree = "<group>"; };
|
|
|
|
4C4793032A993DB900489948 /* midl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = midl.c; sourceTree = "<group>"; };
|
2022-07-22 00:54:11 +00:00
|
|
|
4C4A3A5A288A1B2200453788 /* damus.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = damus.entitlements; sourceTree = "<group>"; };
|
2023-07-23 00:15:36 +00:00
|
|
|
4C4DD3DA2A6CA7E8005B4E85 /* ContentParsing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentParsing.swift; sourceTree = "<group>"; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuteThreadNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnmuteThreadNotify.swift; sourceTree = "<group>"; };
|
2023-06-03 01:51:49 +00:00
|
|
|
4C4F14A62A2A61A30045A0B9 /* NostrScriptTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrScriptTests.swift; sourceTree = "<group>"; };
|
|
|
|
4C4F14A82A2A71AB0045A0B9 /* nostrscript.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nostrscript.h; sourceTree = "<group>"; };
|
|
|
|
4C4F14A92A2A71AB0045A0B9 /* nostrscript.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nostrscript.c; sourceTree = "<group>"; };
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0629A540BA003E4487 /* NotificationsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsModel.swift; sourceTree = "<group>"; };
|
|
|
|
4C54AA0929A55429003E4487 /* EventGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventGroup.swift; sourceTree = "<group>"; };
|
|
|
|
4C54AA0B29A5543C003E4487 /* ZapGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapGroup.swift; sourceTree = "<group>"; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C59B98B2A76C2550032FFEB /* ProfileUpdatedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileUpdatedNotify.swift; sourceTree = "<group>"; };
|
2022-06-07 02:26:44 +00:00
|
|
|
4C5C7E67284ED36500A22DF5 /* SearchHomeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchHomeModel.swift; sourceTree = "<group>"; };
|
|
|
|
4C5C7E69284EDE2E00A22DF5 /* SearchResultsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultsView.swift; sourceTree = "<group>"; };
|
2023-07-21 21:54:03 +00:00
|
|
|
4C5D5C9C2A6B2CB40024563C /* AsciiCharacter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsciiCharacter.swift; sourceTree = "<group>"; };
|
2023-08-22 05:12:01 +00:00
|
|
|
4C5E54022A9522F600FF6E60 /* UserStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatus.swift; sourceTree = "<group>"; };
|
|
|
|
4C5E54052A9671F800FF6E60 /* UserStatusSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatusSheet.swift; sourceTree = "<group>"; };
|
2022-05-24 19:57:40 +00:00
|
|
|
4C5F9113283D694D0052CD1C /* FollowTarget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowTarget.swift; sourceTree = "<group>"; };
|
2022-05-24 21:34:21 +00:00
|
|
|
4C5F9115283D855D0052CD1C /* EventsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventsModel.swift; sourceTree = "<group>"; };
|
2022-05-24 22:29:28 +00:00
|
|
|
4C5F9117283D88E40052CD1C /* FollowingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowingModel.swift; sourceTree = "<group>"; };
|
2022-05-24 19:57:40 +00:00
|
|
|
4C63334F283D40E500B1C9C3 /* HomeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeModel.swift; sourceTree = "<group>"; };
|
|
|
|
4C633351283D419F00B1C9C3 /* SignalModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalModel.swift; sourceTree = "<group>"; };
|
2023-08-22 05:12:01 +00:00
|
|
|
4C64305B2A945AFF00B0C0E9 /* MusicController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicController.swift; sourceTree = "<group>"; };
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987B286D03E000EAE2B3 /* DirectMessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectMessagesView.swift; sourceTree = "<group>"; };
|
|
|
|
4C64987D286D082C00EAE2B3 /* DirectMessagesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectMessagesModel.swift; sourceTree = "<group>"; };
|
2023-08-06 01:33:01 +00:00
|
|
|
4C684A542A7E91FE005E6031 /* LongPostTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LongPostTests.swift; sourceTree = "<group>"; };
|
2023-08-06 16:02:18 +00:00
|
|
|
4C684A562A7FFAE6005E6031 /* UrlTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UrlTests.swift; sourceTree = "<group>"; };
|
2023-07-13 01:19:13 +00:00
|
|
|
4C687C202A5F7ED00092C550 /* DamusBackground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusBackground.swift; sourceTree = "<group>"; };
|
2023-07-13 14:05:53 +00:00
|
|
|
4C687C232A5FA86D0092C550 /* SearchHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchHeaderView.swift; sourceTree = "<group>"; };
|
2023-07-13 14:01:51 +00:00
|
|
|
4C687C262A6039500092C550 /* TestData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = "<group>"; };
|
2023-06-22 08:15:28 +00:00
|
|
|
4C73C5132A4437C10062CAC0 /* ZapUserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapUserView.swift; sourceTree = "<group>"; };
|
2022-04-03 22:40:18 +00:00
|
|
|
4C75EFA327FA577B0006080F /* PostView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostView.swift; sourceTree = "<group>"; };
|
2022-04-09 15:03:50 +00:00
|
|
|
4C75EFA527FF87A20006080F /* Nostr.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Nostr.swift; sourceTree = "<group>"; };
|
2022-04-11 16:29:30 +00:00
|
|
|
4C75EFA72804823E0006080F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFAC28049CFB0006080F /* PostButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostButton.swift; sourceTree = "<group>"; };
|
|
|
|
4C75EFAE28049D340006080F /* NostrFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrFilter.swift; sourceTree = "<group>"; };
|
|
|
|
4C75EFB028049D510006080F /* NostrResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrResponse.swift; sourceTree = "<group>"; };
|
|
|
|
4C75EFB228049D640006080F /* NostrEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrEvent.swift; sourceTree = "<group>"; };
|
|
|
|
4C75EFB428049D790006080F /* Relay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Relay.swift; sourceTree = "<group>"; };
|
|
|
|
4C75EFB628049D990006080F /* RelayPool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPool.swift; sourceTree = "<group>"; };
|
2022-04-11 17:53:43 +00:00
|
|
|
4C75EFB82804A2740006080F /* EventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventView.swift; sourceTree = "<group>"; };
|
2022-04-11 18:32:30 +00:00
|
|
|
4C75EFBA2804A34C0006080F /* ProofOfWork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProofOfWork.swift; sourceTree = "<group>"; };
|
2023-07-25 15:58:06 +00:00
|
|
|
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>"; };
|
|
|
|
4C78EFDA2A707C67007E8197 /* secp256k1_extrakeys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_extrakeys.h; sourceTree = "<group>"; };
|
2023-05-05 23:12:03 +00:00
|
|
|
4C7D09582A05BEAD00943473 /* KeyboardVisible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardVisible.swift; sourceTree = "<group>"; };
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D095C2A098C5D00943473 /* ConnectWalletView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectWalletView.swift; sourceTree = "<group>"; };
|
|
|
|
4C7D095D2A098C5D00943473 /* WalletView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletView.swift; sourceTree = "<group>"; };
|
|
|
|
4C7D09612A098D0E00943473 /* WalletConnect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnect.swift; sourceTree = "<group>"; };
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09652A0AE62100943473 /* AlbyButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbyButton.swift; sourceTree = "<group>"; };
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D09672A0AE9B200943473 /* NWCScannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWCScannerView.swift; sourceTree = "<group>"; };
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D096A2A0AEA0400943473 /* CodeScanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodeScanner.swift; sourceTree = "<group>"; };
|
|
|
|
4C7D096B2A0AEA0400943473 /* ScannerCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerCoordinator.swift; sourceTree = "<group>"; };
|
|
|
|
4C7D096C2A0AEA0400943473 /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = "<group>"; };
|
2023-05-10 01:13:33 +00:00
|
|
|
4C7D09712A0AEF5E00943473 /* DamusGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusGradient.swift; sourceTree = "<group>"; };
|
|
|
|
4C7D09732A0AEF9000943473 /* AlbyGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbyGradient.swift; sourceTree = "<group>"; };
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09752A0AF19E00943473 /* FillAndStroke.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FillAndStroke.swift; sourceTree = "<group>"; };
|
2023-05-10 01:26:12 +00:00
|
|
|
4C7D09772A0B0CC900943473 /* WalletModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletModel.swift; sourceTree = "<group>"; };
|
2023-05-10 23:23:54 +00:00
|
|
|
4C7D097D2A0C58B900943473 /* WalletConnectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectTests.swift; sourceTree = "<group>"; };
|
2022-05-04 23:26:10 +00:00
|
|
|
4C7FF7D42823313F009601DB /* Mentions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mentions.swift; sourceTree = "<group>"; };
|
2022-04-25 15:28:07 +00:00
|
|
|
4C8682862814DE470026224F /* ProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = "<group>"; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4C86F7C32A76C44C00EC0817 /* ZappingNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZappingNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4C86F7C52A76C51100EC0817 /* AttachedWalletNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachedWalletNotify.swift; sourceTree = "<group>"; };
|
2023-03-22 13:24:34 +00:00
|
|
|
4C8AE1182A0320BE00B944E6 /* Purple.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Purple.storekit; sourceTree = "<group>"; };
|
2023-04-06 23:04:16 +00:00
|
|
|
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>"; };
|
2023-04-07 00:09:50 +00:00
|
|
|
4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hashtags.swift; sourceTree = "<group>"; };
|
2023-04-10 05:02:55 +00:00
|
|
|
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>"; };
|
2023-04-20 21:30:27 +00:00
|
|
|
4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendIcon.swift; sourceTree = "<group>"; };
|
2023-04-21 21:17:37 +00:00
|
|
|
4C8D1A6E29F31E5000ACDF75 /* FriendsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendsButton.swift; sourceTree = "<group>"; };
|
2023-03-27 16:26:30 +00:00
|
|
|
4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusColors.swift; sourceTree = "<group>"; };
|
2023-07-21 21:54:03 +00:00
|
|
|
4C9054842A6AEAA000811EEC /* NdbTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTests.swift; sourceTree = "<group>"; };
|
|
|
|
4C9054882A6AED4700811EEC /* NdbTagIterator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTagIterator.swift; sourceTree = "<group>"; };
|
|
|
|
4C90548A2A6AEDEE00811EEC /* NdbNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbNote.swift; sourceTree = "<group>"; };
|
2022-05-24 19:57:40 +00:00
|
|
|
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>"; };
|
2023-06-03 01:51:49 +00:00
|
|
|
4C9146FF2A2A891E00DDEA40 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = "<group>"; };
|
2024-03-16 12:20:59 +00:00
|
|
|
4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteRepostsView.swift; sourceTree = "<group>"; };
|
2022-05-26 15:35:19 +00:00
|
|
|
4C987B56283FD07F0042CE38 /* FollowersModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowersModel.swift; sourceTree = "<group>"; };
|
2023-06-23 08:01:30 +00:00
|
|
|
4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationStatusModel.swift; sourceTree = "<group>"; };
|
2023-07-17 17:15:26 +00:00
|
|
|
4C9B0DED2A65A75F00CBDA21 /* AttrStringTestExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttrStringTestExtensions.swift; sourceTree = "<group>"; };
|
2023-07-17 20:25:17 +00:00
|
|
|
4C9B0DF22A65C46800CBDA21 /* ProfileEditButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileEditButton.swift; sourceTree = "<group>"; };
|
2023-03-14 22:26:52 +00:00
|
|
|
4C9BB83029C0ED4F00FC4E37 /* DisplayName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayName.swift; sourceTree = "<group>"; };
|
|
|
|
4C9BB83329C12D9900FC4E37 /* EventProfileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventProfileName.swift; sourceTree = "<group>"; };
|
2023-03-22 13:24:34 +00:00
|
|
|
4C9D6D152B1AA9C6004E5CD9 /* DisplayTabBarNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayTabBarNotify.swift; sourceTree = "<group>"; };
|
2024-01-13 19:19:44 +00:00
|
|
|
4C9D6D1A2B1D35D7004E5CD9 /* PullDownSearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PullDownSearch.swift; sourceTree = "<group>"; };
|
2023-02-25 20:10:37 +00:00
|
|
|
4C9F18E129AA9B6C008C55EC /* CustomizeZapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomizeZapView.swift; sourceTree = "<group>"; };
|
|
|
|
4C9F18E329ABDE6D008C55EC /* MaybeAnonPfpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaybeAnonPfpView.swift; sourceTree = "<group>"; };
|
2022-04-19 00:33:15 +00:00
|
|
|
4CA2EF9F280E37AC0044ACD8 /* TimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineView.swift; sourceTree = "<group>"; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA3529D2A76AE67003BB08B /* FollowNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowNotify.swift; sourceTree = "<group>"; };
|
2023-07-30 17:47:53 +00:00
|
|
|
4CA3529F2A76AE80003BB08B /* Notify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notify.swift; sourceTree = "<group>"; };
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352A12A76AEC5003BB08B /* LikedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LikedNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4CA352A32A76AFF3003BB08B /* UpdateStatsNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateStatsNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4CA352A72A76B37E003BB08B /* NewMutesNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewMutesNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4CA352A92A76BF3A003BB08B /* LocalNotificationNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotificationNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4CA352AB2A76C07F003BB08B /* NewUnmutesNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewUnmutesNotify.swift; sourceTree = "<group>"; };
|
|
|
|
4CA352AD2A76C1AC003BB08B /* FollowedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedNotify.swift; sourceTree = "<group>"; };
|
2023-04-23 16:54:38 +00:00
|
|
|
4CA3FA0F29F593D000FDB3C3 /* ZapTypePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapTypePicker.swift; sourceTree = "<group>"; };
|
2023-04-21 23:21:01 +00:00
|
|
|
4CA5588229F33F5B00DC6A45 /* StringCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringCodable.swift; sourceTree = "<group>"; };
|
2023-06-01 18:53:59 +00:00
|
|
|
4CA9275C2A28FF630098A105 /* LongformView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LongformView.swift; sourceTree = "<group>"; };
|
|
|
|
4CA9275E2A2902B20098A105 /* LongformPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LongformPreview.swift; sourceTree = "<group>"; };
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927602A290E340098A105 /* EventShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventShell.swift; sourceTree = "<group>"; };
|
|
|
|
4CA927622A290EB10098A105 /* EventTop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventTop.swift; sourceTree = "<group>"; };
|
|
|
|
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>"; };
|
2023-07-11 01:59:50 +00:00
|
|
|
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>"; };
|
2023-01-30 21:26:04 +00:00
|
|
|
4CAAD8AC298851D000060CEA /* AccountDeletion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeletion.swift; sourceTree = "<group>"; };
|
2023-01-30 23:49:03 +00:00
|
|
|
4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayConfigView.swift; sourceTree = "<group>"; };
|
2022-04-17 15:49:02 +00:00
|
|
|
4CACA9D4280C31E100D9BBE8 /* ReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyView.swift; sourceTree = "<group>"; };
|
2022-04-17 12:31:38 +00:00
|
|
|
4CACA9DB280C38C000D9BBE8 /* Profiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Profiles.swift; sourceTree = "<group>"; };
|
2022-12-30 00:55:36 +00:00
|
|
|
4CB55EF4295E679D007FD187 /* UserRelaysView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRelaysView.swift; sourceTree = "<group>"; };
|
2023-01-04 09:30:37 +00:00
|
|
|
4CB8838529656C8B00DC99E7 /* NIP05.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP05.swift; sourceTree = "<group>"; };
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB88388296AF99A00DC99E7 /* EventDetailBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailBar.swift; sourceTree = "<group>"; };
|
2023-01-11 22:48:35 +00:00
|
|
|
4CB8838A296F6E1E00DC99E7 /* NIP05Badge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP05Badge.swift; sourceTree = "<group>"; };
|
2023-01-11 22:49:14 +00:00
|
|
|
4CB8838C296F710400DC99E7 /* Reposted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reposted.swift; sourceTree = "<group>"; };
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB8838E296F781C00DC99E7 /* ReactionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsView.swift; sourceTree = "<group>"; };
|
|
|
|
4CB88395296F7F8B00DC99E7 /* ReactionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionView.swift; sourceTree = "<group>"; };
|
2023-01-15 01:23:35 +00:00
|
|
|
4CB88399297322D200DC99E7 /* DMTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMTests.swift; sourceTree = "<group>"; };
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883A52975F83C00DC99E7 /* LNUrlPayRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LNUrlPayRequest.swift; sourceTree = "<group>"; };
|
|
|
|
4CB883A72975FC1800DC99E7 /* Zaps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Zaps.swift; sourceTree = "<group>"; };
|
|
|
|
4CB883A9297612FF00DC99E7 /* ZapTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapTests.swift; sourceTree = "<group>"; };
|
|
|
|
4CB883AD2976FA9300DC99E7 /* FormatTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormatTests.swift; sourceTree = "<group>"; };
|
2023-10-23 23:32:43 +00:00
|
|
|
4CB883AF297705DD00DC99E7 /* NoteZapButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteZapButton.swift; sourceTree = "<group>"; };
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883B5297730E400DC99E7 /* LNUrls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LNUrls.swift; sourceTree = "<group>"; };
|
2023-06-20 13:30:48 +00:00
|
|
|
4CB8FC222A41ABA500763C51 /* AboutView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = "<group>"; };
|
2023-02-07 18:51:08 +00:00
|
|
|
4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileNameView.swift; sourceTree = "<group>"; };
|
2023-01-22 18:25:12 +00:00
|
|
|
4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebsiteLink.swift; sourceTree = "<group>"; };
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FEE2A73FCCB007AEB17 /* IdType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdType.swift; sourceTree = "<group>"; };
|
|
|
|
4CC14FF02A73FCDB007AEB17 /* Pubkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pubkey.swift; sourceTree = "<group>"; };
|
|
|
|
4CC14FF42A740BB7007AEB17 /* NoteId.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteId.swift; sourceTree = "<group>"; };
|
|
|
|
4CC14FF82A741939007AEB17 /* Referenced.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Referenced.swift; sourceTree = "<group>"; };
|
2023-04-04 17:12:29 +00:00
|
|
|
4CC6193929DC777C006A86D1 /* RelayBootstrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayBootstrap.swift; sourceTree = "<group>"; };
|
2023-02-03 17:25:07 +00:00
|
|
|
4CC7AAE6297EFA7B00430951 /* Zap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Zap.swift; sourceTree = "<group>"; };
|
2023-01-23 18:37:35 +00:00
|
|
|
4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuilderEventView.swift; sourceTree = "<group>"; };
|
2023-01-23 18:38:53 +00:00
|
|
|
4CC7AAEC297F0B9E00430951 /* Highlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Highlight.swift; sourceTree = "<group>"; };
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAEF297F11C700430951 /* SelectedEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedEventView.swift; sourceTree = "<group>"; };
|
|
|
|
4CC7AAF3297F18B400430951 /* ReplyDescription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyDescription.swift; sourceTree = "<group>"; };
|
|
|
|
4CC7AAF5297F1A6A00430951 /* EventBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventBody.swift; sourceTree = "<group>"; };
|
|
|
|
4CC7AAF7297F1CEE00430951 /* EventProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventProfile.swift; sourceTree = "<group>"; };
|
2023-01-25 16:11:21 +00:00
|
|
|
4CC7AAF9297F64AC00430951 /* EventMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventMenu.swift; sourceTree = "<group>"; };
|
2023-03-05 21:39:00 +00:00
|
|
|
4CCEB7AD29B53D260078AA28 /* SearchingEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchingEventView.swift; sourceTree = "<group>"; };
|
2023-03-16 15:13:03 +00:00
|
|
|
4CD348EE29C3659D00497EB2 /* ImageUploadModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageUploadModel.swift; sourceTree = "<group>"; };
|
2022-08-09 16:32:22 +00:00
|
|
|
4CD7641A28A1641400B6928F /* EndBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EndBlock.swift; sourceTree = "<group>"; };
|
2023-04-14 18:45:10 +00:00
|
|
|
4CDA128929E9D10C0006FA5A /* SignalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalView.swift; sourceTree = "<group>"; };
|
2023-04-15 19:40:00 +00:00
|
|
|
4CDA128B29EB19C40006FA5A /* LocalNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotification.swift; sourceTree = "<group>"; };
|
2023-07-21 21:54:03 +00:00
|
|
|
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>"; };
|
2023-07-21 21:45:18 +00:00
|
|
|
4CDD1AE72A6B3611001CD4DF /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = "<group>"; };
|
2023-02-20 17:11:39 +00:00
|
|
|
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>"; };
|
2023-04-19 18:08:59 +00:00
|
|
|
4CE1398F29F0661A00AC6A0B /* RepostAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostAction.swift; sourceTree = "<group>"; };
|
|
|
|
4CE1399129F0666100AC6A0B /* ShareActionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareActionButton.swift; sourceTree = "<group>"; };
|
|
|
|
4CE1399329F0669900AC6A0B /* BigButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BigButton.swift; sourceTree = "<group>"; };
|
2023-03-29 23:24:06 +00:00
|
|
|
4CE4F0F129D4FCFA005914DB /* DebouncedOnChange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebouncedOnChange.swift; sourceTree = "<group>"; };
|
2023-03-31 22:14:55 +00:00
|
|
|
4CE4F0F329D779B5005914DB /* PostBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostBox.swift; sourceTree = "<group>"; };
|
2023-04-03 20:57:57 +00:00
|
|
|
4CE4F0F729DB7399005914DB /* ThiccDivider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThiccDivider.swift; sourceTree = "<group>"; };
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9DD2852768D00C00DD9 /* ConfigView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigView.swift; sourceTree = "<group>"; };
|
|
|
|
4CE4F9E228528C5200C00DD9 /* AddRelayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddRelayView.swift; sourceTree = "<group>"; };
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE327F7A08100C66700 /* damus.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = damus.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
|
|
4CE6DEE627F7A08100C66700 /* damusApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = damusApp.swift; sourceTree = "<group>"; };
|
|
|
|
4CE6DEE827F7A08100C66700 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
|
|
|
4CE6DEEA27F7A08200C66700 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
|
|
|
4CE6DEED27F7A08200C66700 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
|
|
|
4CE6DEF327F7A08200C66700 /* damusTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = damusTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
|
|
4CE6DEF727F7A08200C66700 /* damusTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = damusTests.swift; sourceTree = "<group>"; };
|
|
|
|
4CE6DEFD27F7A08200C66700 /* damusUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = damusUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
|
|
4CE6DF0127F7A08200C66700 /* damusUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = damusUITests.swift; sourceTree = "<group>"; };
|
|
|
|
4CE6DF0327F7A08200C66700 /* damusUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = damusUITestsLaunchTests.swift; sourceTree = "<group>"; };
|
2022-04-09 15:03:50 +00:00
|
|
|
4CE6DF1527F8DEBF00C66700 /* RelayConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayConnection.swift; sourceTree = "<group>"; };
|
2023-02-08 19:07:58 +00:00
|
|
|
4CE8794729941DA700F758CC /* RelayFilters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayFilters.swift; sourceTree = "<group>"; };
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE8794D2996B16A00F758CC /* RelayToggle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayToggle.swift; sourceTree = "<group>"; };
|
2023-06-17 12:20:50 +00:00
|
|
|
4CE8794F2996B2BD00F758CC /* RelayStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayStatusView.swift; sourceTree = "<group>"; };
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE879512996B68900F758CC /* RelayType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayType.swift; sourceTree = "<group>"; };
|
2023-02-10 18:01:17 +00:00
|
|
|
4CE879542996BAB900F758CC /* RelayPaidDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPaidDetail.swift; sourceTree = "<group>"; };
|
2023-02-10 18:50:49 +00:00
|
|
|
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>"; };
|
2023-07-21 22:14:07 +00:00
|
|
|
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>"; };
|
2022-04-12 13:47:54 +00:00
|
|
|
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>"; };
|
2022-04-16 16:36:19 +00:00
|
|
|
4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailView.swift; sourceTree = "<group>"; };
|
2022-04-16 16:33:33 +00:00
|
|
|
4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilePicView.swift; sourceTree = "<group>"; };
|
2022-04-16 16:53:34 +00:00
|
|
|
4CEE2AF4280B29E600AB5EEF /* TimeAgo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeAgo.swift; sourceTree = "<group>"; };
|
2022-04-16 18:32:42 +00:00
|
|
|
4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileName.swift; sourceTree = "<group>"; };
|
|
|
|
4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventActionBar.swift; sourceTree = "<group>"; };
|
2023-01-25 16:11:21 +00:00
|
|
|
4CF0ABD32980996B00D66079 /* Report.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Report.swift; sourceTree = "<group>"; };
|
|
|
|
4CF0ABD529817F5B00D66079 /* ReportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportView.swift; sourceTree = "<group>"; };
|
2023-01-25 17:53:41 +00:00
|
|
|
4CF0ABD72981980C00D66079 /* Lists.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lists.swift; sourceTree = "<group>"; };
|
|
|
|
4CF0ABDB2981A19E00D66079 /* ListTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListTests.swift; sourceTree = "<group>"; };
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABE02981A83900D66079 /* MutelistView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutelistView.swift; sourceTree = "<group>"; };
|
|
|
|
4CF0ABE22981BC7D00D66079 /* UserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserView.swift; sourceTree = "<group>"; };
|
2023-01-25 23:34:33 +00:00
|
|
|
4CF0ABE42981EE0C00D66079 /* EULAView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EULAView.swift; sourceTree = "<group>"; };
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
4CF0ABE6298444FC00D66079 /* EventMutingContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventMutingContainerView.swift; sourceTree = "<group>"; };
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABE829844AF100D66079 /* AnyCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyCodable.swift; sourceTree = "<group>"; };
|
|
|
|
4CF0ABEB29844B4700D66079 /* AnyDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyDecodable.swift; sourceTree = "<group>"; };
|
|
|
|
4CF0ABED29844B5500D66079 /* AnyEncodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyEncodable.swift; sourceTree = "<group>"; };
|
2023-01-28 16:30:06 +00:00
|
|
|
4CF0ABEF29857E9200D66079 /* Bech32Object.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Object.swift; sourceTree = "<group>"; };
|
2023-01-22 18:56:14 +00:00
|
|
|
4CF0ABF52985CD5500D66079 /* UserSearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSearch.swift; sourceTree = "<group>"; };
|
2023-08-22 05:12:01 +00:00
|
|
|
4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatusView.swift; sourceTree = "<group>"; };
|
2023-06-04 22:42:32 +00:00
|
|
|
4CFD502E2A2DA45800A229DB /* MediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaView.swift; sourceTree = "<group>"; };
|
2023-03-22 13:24:34 +00:00
|
|
|
4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleView.swift; sourceTree = "<group>"; };
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContextMenuModifier.swift; sourceTree = "<group>"; };
|
2024-03-18 22:21:21 +00:00
|
|
|
4CFF8F6629CC9E3A008DB934 /* FullScreenCarouselView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenCarouselView.swift; sourceTree = "<group>"; };
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6829CC9ED1008DB934 /* ImageContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContainerView.swift; sourceTree = "<group>"; };
|
2023-03-26 15:35:53 +00:00
|
|
|
4CFF8F6A29CD0079008DB934 /* RepostedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostedEvent.swift; sourceTree = "<group>"; };
|
|
|
|
4CFF8F6C29CD022E008DB934 /* WideEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WideEventView.swift; sourceTree = "<group>"; };
|
2022-12-30 07:39:16 +00:00
|
|
|
4FE60CDC295E1C5E00105A1F /* Wallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Wallet.swift; sourceTree = "<group>"; };
|
2023-04-13 14:12:16 +00:00
|
|
|
50088DA029E8271A008A1FDF /* WebSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocket.swift; sourceTree = "<group>"; };
|
2023-06-09 08:10:33 +00:00
|
|
|
501F8C7F2A0220E1001AFC1D /* KeychainStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainStorage.swift; sourceTree = "<group>"; };
|
|
|
|
501F8C812A0224EB001AFC1D /* KeychainStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainStorageTests.swift; sourceTree = "<group>"; };
|
2023-07-09 13:45:37 +00:00
|
|
|
504323A62A34915F006AE6DC /* RelayModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayModel.swift; sourceTree = "<group>"; };
|
|
|
|
504323A82A3495B6006AE6DC /* RelayModelCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayModelCache.swift; sourceTree = "<group>"; };
|
2023-07-10 18:05:41 +00:00
|
|
|
5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperSettingsView.swift; sourceTree = "<group>"; };
|
2024-03-18 22:21:21 +00:00
|
|
|
50A16FFA2AA6C06600DFEC1F /* DamusAVPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusAVPlayerView.swift; sourceTree = "<group>"; };
|
2023-09-06 16:25:07 +00:00
|
|
|
50A16FFC2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusVideoPlayerViewModel.swift; sourceTree = "<group>"; };
|
2023-09-06 16:23:33 +00:00
|
|
|
50A16FFE2AA76A0900DFEC1F /* VideoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoController.swift; sourceTree = "<group>"; };
|
2023-02-18 06:27:15 +00:00
|
|
|
50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTests.swift; sourceTree = "<group>"; };
|
2023-07-09 13:45:33 +00:00
|
|
|
50A60D132A28BEEE00186190 /* RelayLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayLog.swift; sourceTree = "<group>"; };
|
2023-04-28 19:24:34 +00:00
|
|
|
50B5685229F97CB400A23243 /* CredentialHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialHandler.swift; sourceTree = "<group>"; };
|
2023-09-06 16:49:06 +00:00
|
|
|
50C3E0892AA8E3F7006A4BC0 /* AVPlayer+Additions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVPlayer+Additions.swift"; sourceTree = "<group>"; };
|
2023-05-20 17:38:06 +00:00
|
|
|
50DA11252A16A23F00236234 /* Launch.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Launch.storyboard; sourceTree = "<group>"; };
|
2023-05-26 19:48:07 +00:00
|
|
|
5C0707D02A1ECB38004E7B51 /* DamusLogoGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusLogoGradient.swift; sourceTree = "<group>"; };
|
2024-04-04 02:03:46 +00:00
|
|
|
5C14C29A2BBBA29C00079FD2 /* RelaySoftwareDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaySoftwareDetail.swift; sourceTree = "<group>"; };
|
|
|
|
5C14C29C2BBBA40B00079FD2 /* RelayAdminDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayAdminDetail.swift; sourceTree = "<group>"; };
|
|
|
|
5C14C29E2BBBA5C600079FD2 /* RelayNipList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayNipList.swift; sourceTree = "<group>"; };
|
2023-04-03 21:07:22 +00:00
|
|
|
5C42E78B29DB76D90086AAC1 /* EmptyUserSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyUserSearchView.swift; sourceTree = "<group>"; };
|
2023-01-24 01:45:35 +00:00
|
|
|
5C513FB9297F72980072348F /* CustomPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPicker.swift; sourceTree = "<group>"; };
|
2023-01-30 23:49:03 +00:00
|
|
|
5C513FCB2984ACA60072348F /* QRCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeView.swift; sourceTree = "<group>"; };
|
2023-05-26 19:56:54 +00:00
|
|
|
5C6E1DAC2A193EC2008FC15A /* GradientButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientButtonStyle.swift; sourceTree = "<group>"; };
|
2023-05-26 19:53:55 +00:00
|
|
|
5C6E1DAE2A194075008FC15A /* PinkGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinkGradient.swift; sourceTree = "<group>"; };
|
2024-02-05 03:24:00 +00:00
|
|
|
5C7389B02B6EFA7100781E0A /* ProxyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyView.swift; sourceTree = "<group>"; };
|
2024-03-10 22:37:13 +00:00
|
|
|
5C7389B62B9E692E00781E0A /* MutinyButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutinyButton.swift; sourceTree = "<group>"; };
|
|
|
|
5C7389B82B9E69ED00781E0A /* MutinyGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutinyGradient.swift; sourceTree = "<group>"; };
|
2023-09-09 03:06:31 +00:00
|
|
|
5CC868DC2AA29B3200FB22BA /* NeutralButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NeutralButtonStyle.swift; sourceTree = "<group>"; };
|
2023-09-09 03:11:13 +00:00
|
|
|
5CF2DCCB2AA3AF0B00984B8D /* RelayPicView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPicView.swift; sourceTree = "<group>"; };
|
2023-09-09 03:06:01 +00:00
|
|
|
5CF2DCCD2AABE1A500984B8D /* DamusLightGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusLightGradient.swift; sourceTree = "<group>"; };
|
2023-03-09 03:49:49 +00:00
|
|
|
5CF72FC129B9142F00124A13 /* ShareAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareAction.swift; sourceTree = "<group>"; };
|
2023-03-29 22:57:50 +00:00
|
|
|
6439E013296790CF0020672B /* ProfilePicImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilePicImageView.swift; sourceTree = "<group>"; };
|
2023-02-08 19:07:58 +00:00
|
|
|
643EA5C7296B764E005081BB /* RelayFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayFilterView.swift; sourceTree = "<group>"; };
|
2023-01-18 20:52:07 +00:00
|
|
|
647D9A8C2968520300A295DE /* SideMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideMenuView.swift; sourceTree = "<group>"; };
|
2023-01-03 03:09:56 +00:00
|
|
|
64FBD06E296255C400D9D3B2 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
|
2023-08-21 21:17:21 +00:00
|
|
|
7527271D2A93FF0100214108 /* Block.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Block.swift; sourceTree = "<group>"; };
|
2023-09-01 15:32:01 +00:00
|
|
|
75AD872A2AA23A460085EF2C /* Block+Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Block+Tests.swift"; sourceTree = "<group>"; };
|
2023-01-27 21:03:17 +00:00
|
|
|
7C60CAEE298471A1009C80D6 /* CoreSVG.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreSVG.swift; sourceTree = "<group>"; };
|
2023-01-25 21:25:55 +00:00
|
|
|
7C902AE22981D55B002AB16E /* ZoomableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZoomableScrollView.swift; sourceTree = "<group>"; };
|
2023-02-16 03:14:59 +00:00
|
|
|
7C95CAED299DCEF1009DCB67 /* KFOptionSetter+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KFOptionSetter+.swift"; sourceTree = "<group>"; };
|
2023-02-17 17:34:41 +00:00
|
|
|
7CFF6316299FEFE5005D382A /* SelectableText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectableText.swift; sourceTree = "<group>"; };
|
2023-01-10 23:12:34 +00:00
|
|
|
9609F057296E220800069BF3 /* BannerImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BannerImageView.swift; sourceTree = "<group>"; };
|
2023-02-24 18:28:47 +00:00
|
|
|
9C83F89229A937B900136C08 /* TextViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextViewWrapper.swift; sourceTree = "<group>"; };
|
2023-03-16 15:13:03 +00:00
|
|
|
9CA876E129A00CE90003B9A3 /* AttachMediaUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachMediaUtility.swift; sourceTree = "<group>"; };
|
2023-10-11 12:17:28 +00:00
|
|
|
ADFE73542AD4793100EC7326 /* QRScanNSECView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRScanNSECView.swift; sourceTree = "<group>"; };
|
2023-12-24 21:22:25 +00:00
|
|
|
B501062C2B363036003874F5 /* AuthIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthIntegrationTests.swift; sourceTree = "<group>"; usesTabs = 0; };
|
2024-01-18 01:17:37 +00:00
|
|
|
B51C1CE82B55A60A00E312A9 /* AddMuteItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddMuteItemView.swift; sourceTree = "<group>"; };
|
|
|
|
B51C1CE92B55A60A00E312A9 /* MuteDurationMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MuteDurationMenu.swift; sourceTree = "<group>"; };
|
2024-02-10 16:36:47 +00:00
|
|
|
B533694D2B66D791008A805E /* MutelistManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutelistManager.swift; sourceTree = "<group>"; usesTabs = 0; };
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C612B312BD700A232C0 /* ReconnectRelaysNotify.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReconnectRelaysNotify.swift; sourceTree = "<group>"; };
|
|
|
|
B57B4C632B312BFA00A232C0 /* RelayAuthenticationDetail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RelayAuthenticationDetail.swift; sourceTree = "<group>"; };
|
|
|
|
B57B4C652B312C3700A232C0 /* NostrAuth.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NostrAuth.swift; sourceTree = "<group>"; };
|
2024-01-18 01:17:36 +00:00
|
|
|
B5A75C292B546D94007AFBC0 /* MuteItemTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuteItemTests.swift; sourceTree = "<group>"; usesTabs = 0; };
|
2023-12-24 21:22:25 +00:00
|
|
|
B5B4D1422B37D47600844320 /* NdbExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbExtensions.swift; sourceTree = "<group>"; usesTabs = 0; };
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C1F2B530D5100C5ECA7 /* MuteItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuteItem.swift; sourceTree = "<group>"; usesTabs = 0; };
|
|
|
|
B5C60C222B532A8700C5ECA7 /* DamusDuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusDuration.swift; sourceTree = "<group>"; usesTabs = 0; };
|
2023-09-19 20:24:11 +00:00
|
|
|
BA3759892ABCCDE30018D73B /* ImageResizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageResizer.swift; sourceTree = "<group>"; };
|
2023-09-19 20:29:40 +00:00
|
|
|
BA37598B2ABCCE500018D73B /* PhotoCaptureProcessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotoCaptureProcessor.swift; sourceTree = "<group>"; };
|
|
|
|
BA37598C2ABCCE500018D73B /* VideoCaptureProcessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoCaptureProcessor.swift; sourceTree = "<group>"; };
|
2023-10-20 18:15:58 +00:00
|
|
|
BA37598F2ABCCEBA0018D73B /* CameraService+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CameraService+Extensions.swift"; sourceTree = "<group>"; };
|
|
|
|
BA3759902ABCCEBA0018D73B /* CameraModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CameraModel.swift; sourceTree = "<group>"; };
|
|
|
|
BA3759912ABCCEBA0018D73B /* CameraService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CameraService.swift; sourceTree = "<group>"; };
|
2024-01-25 22:11:11 +00:00
|
|
|
BA3759962ABCCF360018D73B /* CameraPreview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CameraPreview.swift; sourceTree = "<group>"; };
|
2022-12-30 07:39:16 +00:00
|
|
|
BA693073295D649800ADDB87 /* UserSettingsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettingsStore.swift; sourceTree = "<group>"; };
|
2022-12-25 01:33:34 +00:00
|
|
|
BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectWalletView.swift; sourceTree = "<group>"; };
|
2023-04-29 18:38:28 +00:00
|
|
|
D2277EE92A089BD5006C3807 /* Router.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Router.swift; sourceTree = "<group>"; };
|
2023-11-14 07:21:39 +00:00
|
|
|
D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationFormatter.swift; sourceTree = "<group>"; };
|
2024-02-14 21:31:43 +00:00
|
|
|
D7100C552B76F8E600C59298 /* PurpleViewPrimitives.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleViewPrimitives.swift; sourceTree = "<group>"; };
|
2024-02-14 21:31:50 +00:00
|
|
|
D7100C572B76FC8400C59298 /* MarketingContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarketingContentView.swift; sourceTree = "<group>"; };
|
|
|
|
D7100C592B76FD5100C59298 /* LogoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogoView.swift; sourceTree = "<group>"; };
|
|
|
|
D7100C5B2B77016700C59298 /* IAPProductStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IAPProductStateView.swift; sourceTree = "<group>"; };
|
2024-02-14 21:31:59 +00:00
|
|
|
D7100C5D2B7709ED00C59298 /* PurpleStoreKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleStoreKitManager.swift; sourceTree = "<group>"; };
|
2024-03-18 22:21:43 +00:00
|
|
|
D71AC4CB2BA8E3480076268E /* VisibilityTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisibilityTracker.swift; sourceTree = "<group>"; };
|
2023-08-19 19:04:18 +00:00
|
|
|
D71DC1EB2A9129C3006E207C /* PostViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewTests.swift; sourceTree = "<group>"; };
|
2024-01-30 07:41:38 +00:00
|
|
|
D72341182B6864F200E1E135 /* DamusPurpleEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleEnvironment.swift; sourceTree = "<group>"; };
|
filters: add "Do not show #nsfw tagged posts" setting
This commit adds a setting where the user can choose to hide notes with
a #nsfw hashtag. This setting was implemented to allow users to filter
out adult or other unsafe content.
I moved the code logic for content filtering into a new file, and
defined a protocol for content filters. Although the logic is still
simple, this might help in developing a flexible API in case we have
more complex filtering needs in the future.
I also modified the name of the "Appearance" setting to "Appearance and
filters", to make it easier for users to intuitively find this setting.
(Note: Re-translations of this string might be necessary)
**PASS**
**iOS:**
- iOS 17.0 (iPhone 14 Pro)
**Damus:** (This commit)
**Steps:**
1. Follow another account that you control (Account B)
2. On account B, post a note saying "#test this is a test". This note should show up on the home feed.
3. On account B, post a note saying "#nsfw this is a test". This note should NOT show up on the home feed
4. Go to settings and disable the NSFW filter. Go back to the home view. The #nsfw post should now show up.
5. Close app and reopen. NSFW post should still show up (i.e. Setting should be persistent)
6. Unfollow account B
7. Close app and reopen.
8. Follow the "#grownostr" hashtag
9. Turn on the NSFW filter
10. On account B, post a note saying "#grownostr this is a test". This note should show up on the home view.
11. On account B, post a note saying "#grownostr #nsfw this is a test". This note should NOT show up.
12. Double-check the "notes and replies" tab. Note should NOT show up there either.
12. Turn off NSFW filter
13. Note from step 11 should now show up.
14. Go to Universe view and find a post with a hashtag. Remember where the post is.
14. Locally change the tag keyword from "nsfw" to that hashtag (Note: I had to test this way because my posts were not showing up in the Universe view)
15. Turn off the filter. Check post is there, in the Universe view.
16. Turn on the filter. Check post is no longer there in the Universe view. (Check the neighboring posts are the same, to make sure)
17. Bring back the code to its normal state.
18. Search for "#nsfw". Make sure that #nsfw appears (I believe this is ok, because it means the person is purposefully searching for it)
Closes: https://github.com/damus-io/damus/issues/1412
Changelog-Added: Add "Do not show #nsfw tagged posts" setting
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-18 23:27:15 +00:00
|
|
|
D723C38D2AB8D83400065664 /* ContentFilters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentFilters.swift; sourceTree = "<group>"; };
|
2024-01-30 07:41:49 +00:00
|
|
|
D724D8262B64B40B00ABE789 /* DamusPurpleAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleAccountView.swift; sourceTree = "<group>"; };
|
2024-03-22 16:55:35 +00:00
|
|
|
D72927AC2BAB515C00F93E90 /* RelayURLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayURLTests.swift; sourceTree = "<group>"; };
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2CFF2AD9B66B002AFF62 /* EventViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventViewTests.swift; sourceTree = "<group>"; };
|
|
|
|
D72A2D042AD9C1B5002AFF62 /* MockDamusState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDamusState.swift; sourceTree = "<group>"; };
|
|
|
|
D72A2D062AD9C1FB002AFF62 /* MockProfiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockProfiles.swift; sourceTree = "<group>"; };
|
2023-10-20 18:15:58 +00:00
|
|
|
D7315A292ACDF3B70036E30A /* DamusCacheManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusCacheManager.swift; sourceTree = "<group>"; };
|
|
|
|
D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusCacheManagerTests.swift; sourceTree = "<group>"; };
|
2024-01-30 07:42:04 +00:00
|
|
|
D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleTranslationSetupView.swift; sourceTree = "<group>"; };
|
|
|
|
D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleNewUserOnboardingView.swift; sourceTree = "<group>"; };
|
2024-01-30 07:42:18 +00:00
|
|
|
D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleAccountUpdateNotify.swift; sourceTree = "<group>"; };
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadlessDamusState.swift; sourceTree = "<group>"; };
|
|
|
|
D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtensionState.swift; sourceTree = "<group>"; };
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFCB2B155D07006CF0F4 /* MakeZapRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeZapRequest.swift; sourceTree = "<group>"; };
|
|
|
|
D74AAFCE2B155D8C006CF0F4 /* ZapDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapDataModel.swift; sourceTree = "<group>"; };
|
|
|
|
D74AAFD32B155ECB006CF0F4 /* Zaps+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Zaps+.swift"; sourceTree = "<group>"; };
|
|
|
|
D74AAFD52B155F0C006CF0F4 /* WalletConnect+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WalletConnect+.swift"; sourceTree = "<group>"; };
|
2024-01-14 21:55:04 +00:00
|
|
|
D74F43092B23F0BE00425B75 /* DamusPurple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurple.swift; sourceTree = "<group>"; };
|
|
|
|
D74F430B2B23FB9B00425B75 /* StoreObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreObserver.swift; sourceTree = "<group>"; };
|
|
|
|
D76556D52B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleWelcomeView.swift; sourceTree = "<group>"; };
|
2023-10-23 23:32:43 +00:00
|
|
|
D76874F22AE3632B00FB0F68 /* ProfileZapLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileZapLinkView.swift; sourceTree = "<group>"; };
|
2023-10-21 04:44:36 +00:00
|
|
|
D77BFA0A2AE3051200621634 /* ProfileActionSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileActionSheetView.swift; sourceTree = "<group>"; };
|
2023-10-23 23:32:43 +00:00
|
|
|
D783A63E2AD4E53D00658DDA /* SuggestedHashtagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestedHashtagsView.swift; sourceTree = "<group>"; };
|
2023-08-03 03:38:49 +00:00
|
|
|
D78525242A7B2EA4002FA637 /* NoteContentViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteContentViewTests.swift; sourceTree = "<group>"; };
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
D7870BC02AC4750B0080BA88 /* MentionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MentionView.swift; sourceTree = "<group>"; };
|
|
|
|
D7870BC22AC47EBC0080BA88 /* EventLoaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventLoaderView.swift; sourceTree = "<group>"; };
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D78CD5972B8990300014D539 /* DamusAppNotificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusAppNotificationView.swift; sourceTree = "<group>"; };
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21D2B0858BB00234419 /* MigratedTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigratedTypes.swift; sourceTree = "<group>"; };
|
|
|
|
D798D2272B085CDA00234419 /* NdbNote+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NdbNote+.swift"; sourceTree = "<group>"; };
|
|
|
|
D798D22B2B086C7400234419 /* NostrEvent+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NostrEvent+.swift"; sourceTree = "<group>"; };
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C142AFEB061003A41B4 /* DamusNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = DamusNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
|
|
D79C4C162AFEB061003A41B4 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
|
|
|
|
D79C4C182AFEB061003A41B4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
|
|
|
D79C4C1C2AFEB061003A41B4 /* DamusNotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DamusNotificationService.entitlements; sourceTree = "<group>"; };
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3DD2B53854300F104C4 /* DamusPurpleURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleURL.swift; sourceTree = "<group>"; };
|
|
|
|
D7ADD3DF2B538D4200F104C4 /* DamusPurpleURLSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleURLSheetView.swift; sourceTree = "<group>"; };
|
|
|
|
D7ADD3E12B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleVerifyNpubView.swift; sourceTree = "<group>"; };
|
2023-12-16 08:28:54 +00:00
|
|
|
D7C6787D2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP98AuthenticatedRequest.swift; sourceTree = "<group>"; };
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D3D2B116DAD00AD4105 /* NotificationsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsManager.swift; sourceTree = "<group>"; };
|
|
|
|
D7CB5D442B116FE800AD4105 /* Contacts+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Contacts+.swift"; sourceTree = "<group>"; };
|
|
|
|
D7CB5D4A2B11721600AD4105 /* ZapType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapType.swift; sourceTree = "<group>"; };
|
|
|
|
D7CB5D4D2B11728000AD4105 /* NewEventsBits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewEventsBits.swift; sourceTree = "<group>"; };
|
|
|
|
D7CB5D502B1174D100AD4105 /* FriendFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendFilter.swift; sourceTree = "<group>"; };
|
|
|
|
D7CB5D5B2B1176B200AD4105 /* MediaUploader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaUploader.swift; sourceTree = "<group>"; };
|
|
|
|
D7CB5D5E2B11770C00AD4105 /* FollowState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowState.swift; sourceTree = "<group>"; };
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D7CBD1D32B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleNotificationManagement.swift; sourceTree = "<group>"; };
|
|
|
|
D7CBD1D52B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleImpendingExpirationTests.swift; sourceTree = "<group>"; };
|
2023-08-15 21:33:47 +00:00
|
|
|
D7DEEF2E2A8C021E00E0C99F /* NostrEventTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrEventTests.swift; sourceTree = "<group>"; };
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED1B2B1178FE0018B19C /* NoteContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteContent.swift; sourceTree = "<group>"; };
|
|
|
|
D7EDED1D2B11797D0018B19C /* LongformEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LongformEvent.swift; sourceTree = "<group>"; };
|
|
|
|
D7EDED202B117DCA0018B19C /* SequenceUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SequenceUtils.swift; sourceTree = "<group>"; };
|
|
|
|
D7EDED2D2B128E8A0018B19C /* CollectionExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionExtension.swift; sourceTree = "<group>"; };
|
2023-12-01 21:26:14 +00:00
|
|
|
D7EDED322B12ACAE0018B19C /* DamusUserDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusUserDefaults.swift; sourceTree = "<group>"; };
|
2024-05-04 01:15:52 +00:00
|
|
|
D7FB14212BE5970000398331 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
|
|
|
D7FB14242BE5A9A800398331 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
2024-04-22 23:09:37 +00:00
|
|
|
D7FD12252BD345A700CF195B /* FirstAidSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstAidSettingsView.swift; sourceTree = "<group>"; };
|
2023-09-30 02:04:04 +00:00
|
|
|
D7FF93FF2AC7AC5200FD969D /* RelayURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayURL.swift; sourceTree = "<group>"; };
|
2024-02-19 20:53:55 +00:00
|
|
|
E02429942B7E97740088B16C /* CameraController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraController.swift; sourceTree = "<group>"; };
|
2024-01-13 19:19:44 +00:00
|
|
|
E02B54172B4DFADA0077FF42 /* Bech32ObjectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bech32ObjectTests.swift; sourceTree = "<group>"; };
|
2024-01-18 19:59:30 +00:00
|
|
|
E04A37C52B544F090029650D /* URIParsing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URIParsing.swift; sourceTree = "<group>"; };
|
2024-02-19 20:53:54 +00:00
|
|
|
E06336A82B7582E000A88E6B /* img_with_location.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = img_with_location.jpeg; sourceTree = "<group>"; };
|
|
|
|
E06336A92B75832100A88E6B /* ImageMetadataTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageMetadataTest.swift; sourceTree = "<group>"; };
|
2024-02-28 03:32:34 +00:00
|
|
|
E0E024102B7C19C20075735D /* TranslationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslationTests.swift; sourceTree = "<group>"; };
|
|
|
|
E0EE9DD32B8E5FEA00F3002D /* ImageProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageProcessing.swift; sourceTree = "<group>"; };
|
2023-05-29 12:02:12 +00:00
|
|
|
E4FA1C022A24BB7F00482697 /* SearchSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchSettingsView.swift; sourceTree = "<group>"; };
|
2022-12-23 17:27:39 +00:00
|
|
|
E990020E2955F837003BBC5A /* EditMetadataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMetadataView.swift; sourceTree = "<group>"; };
|
2023-03-04 19:33:01 +00:00
|
|
|
E9E4ED0A295867B900DD7078 /* ThreadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadView.swift; sourceTree = "<group>"; };
|
2023-10-20 18:15:58 +00:00
|
|
|
F71694E92A662232001F4053 /* OnboardingSuggestionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingSuggestionsView.swift; sourceTree = "<group>"; };
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694EB2A662292001F4053 /* SuggestedUsersViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestedUsersViewModel.swift; sourceTree = "<group>"; };
|
|
|
|
F71694ED2A6624F9001F4053 /* suggested_users.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = suggested_users.json; sourceTree = "<group>"; };
|
|
|
|
F71694F12A67314D001F4053 /* SuggestedUserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestedUserView.swift; sourceTree = "<group>"; };
|
|
|
|
F71694F32A6732B7001F4053 /* GradientFollowButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientFollowButton.swift; sourceTree = "<group>"; };
|
|
|
|
F71694F72A6983AF001F4053 /* GrayGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GrayGradient.swift; sourceTree = "<group>"; };
|
2024-02-19 20:53:57 +00:00
|
|
|
F757933929D7AECD007DEAC1 /* MediaPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPicker.swift; sourceTree = "<group>"; };
|
2023-02-18 23:41:39 +00:00
|
|
|
F75BA12C29A1855400E10810 /* BookmarksManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksManager.swift; sourceTree = "<group>"; };
|
|
|
|
F75BA12E29A18EF500E10810 /* BookmarksView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksView.swift; sourceTree = "<group>"; };
|
2023-02-01 21:49:32 +00:00
|
|
|
F7908E91298B0F0700AB113A /* RelayDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayDetailView.swift; sourceTree = "<group>"; };
|
|
|
|
F7908E96298B1FDF00AB113A /* NIPURLBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIPURLBuilder.swift; sourceTree = "<group>"; };
|
2023-04-03 17:57:07 +00:00
|
|
|
F79C7FAC29D5E9620000F946 /* EditPictureControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditPictureControl.swift; sourceTree = "<group>"; };
|
2023-01-18 20:52:07 +00:00
|
|
|
F7F0BA24297892BD009531F3 /* SwipeToDismiss.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeToDismiss.swift; sourceTree = "<group>"; };
|
2023-04-17 01:18:49 +00:00
|
|
|
F7F0BA262978E54D009531F3 /* ParticipantsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParticipantsView.swift; sourceTree = "<group>"; };
|
2023-04-15 09:40:56 +00:00
|
|
|
F944F56D29EA9CCC0067B3BF /* DamusParseContentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusParseContentTests.swift; sourceTree = "<group>"; };
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXFileReference section */
|
|
|
|
|
|
|
|
/* Begin PBXFrameworksBuildPhase section */
|
|
|
|
4CE6DEE027F7A08100C66700 /* Frameworks */ = {
|
|
|
|
isa = PBXFrameworksBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670428FC7EC500038D2A /* Kingfisher in Frameworks */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C649881286E0EE300EAE2B3 /* secp256k1 in Frameworks */,
|
2023-07-16 21:35:06 +00:00
|
|
|
4C27C9322A64766F007DBC75 /* MarkdownUI in Frameworks */,
|
2024-04-20 18:27:24 +00:00
|
|
|
3AFE89C32BD4156F00AD31EF /* MCEmojiPicker in Frameworks */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
4CE6DEF027F7A08200C66700 /* Frameworks */ = {
|
|
|
|
isa = PBXFrameworksBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2023-10-07 01:21:53 +00:00
|
|
|
D7A343EE2AD0D77C00CED48B /* InlineSnapshotTesting in Frameworks */,
|
|
|
|
D7A343F02AD0D77C00CED48B /* SnapshotTesting in Frameworks */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
4CE6DEFA27F7A08200C66700 /* Frameworks */ = {
|
|
|
|
isa = PBXFrameworksBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C112AFEB061003A41B4 /* Frameworks */ = {
|
|
|
|
isa = PBXFrameworksBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
|
|
|
D789D1202AFEFBF20083A7AB /* secp256k1 in Frameworks */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED312B1290B80018B19C /* MarkdownUI in Frameworks */,
|
2023-11-14 07:21:39 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXFrameworksBuildPhase section */
|
|
|
|
|
|
|
|
/* Begin PBXGroup section */
|
2022-12-17 22:26:03 +00:00
|
|
|
3169CAE4294E699400EE4006 /* Empty Views */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
3169CAE5294E69C000EE4006 /* EmptyTimelineView.swift */,
|
2023-04-03 21:07:22 +00:00
|
|
|
5C42E78B29DB76D90086AAC1 /* EmptyUserSearchView.swift */,
|
2022-12-17 22:26:03 +00:00
|
|
|
);
|
|
|
|
path = "Empty Views";
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA24800297E3DAE0090C62D /* Reposts */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
3AA24801297E3DC20090C62D /* RepostView.swift */,
|
2023-03-26 15:35:53 +00:00
|
|
|
4CFF8F6A29CD0079008DB934 /* RepostedEvent.swift */,
|
2024-03-16 12:20:59 +00:00
|
|
|
4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */,
|
2023-01-23 04:24:10 +00:00
|
|
|
);
|
|
|
|
path = Reposts;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-10-17 22:20:38 +00:00
|
|
|
4C06670728FDE62900038D2A /* damus-c */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-06-03 01:51:49 +00:00
|
|
|
4C9146FF2A2A891E00DDEA40 /* error.c */,
|
|
|
|
4CA927752A2A5E2F0098A105 /* typedefs.h */,
|
|
|
|
4CA927742A2A5E2F0098A105 /* varint.h */,
|
|
|
|
4CA927702A2A5D470098A105 /* debug.h */,
|
|
|
|
4CA927712A2A5D480098A105 /* error.h */,
|
|
|
|
4CA9276F2A2A5D470098A105 /* parser.h */,
|
|
|
|
4CA9276E2A2A5D110098A105 /* wasm.c */,
|
|
|
|
4CA9276D2A2A5D110098A105 /* wasm.h */,
|
2022-10-17 22:20:38 +00:00
|
|
|
4C06670928FDE64700038D2A /* damus.h */,
|
|
|
|
4C06670A28FDE64700038D2A /* damus.c */,
|
|
|
|
4C06670828FDE64700038D2A /* damus-Bridging-Header.h */,
|
|
|
|
4C06670C28FDEAA000038D2A /* utf8.h */,
|
|
|
|
4C06670D28FDEAA000038D2A /* utf8.c */,
|
2022-10-19 14:46:05 +00:00
|
|
|
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 */,
|
2023-04-10 05:02:55 +00:00
|
|
|
4C8D00CD29E38B950036AF10 /* nostr_bech32.h */,
|
|
|
|
4C8D00CE29E38B950036AF10 /* nostr_bech32.c */,
|
|
|
|
4C8D00D029E38E4C0036AF10 /* cursor.h */,
|
|
|
|
4C8D00D129E397AD0036AF10 /* block.h */,
|
|
|
|
4C8D00D229E3C19F0036AF10 /* str_block.h */,
|
2022-10-17 22:20:38 +00:00
|
|
|
);
|
|
|
|
path = "damus-c";
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-04-20 02:46:30 +00:00
|
|
|
4C0A3F8D280F63FF000448DE /* Models */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-03-22 13:24:34 +00:00
|
|
|
D74F43082B23F09300425B75 /* Purple */,
|
2023-09-19 20:24:11 +00:00
|
|
|
BA3759882ABCCDE30018D73B /* Camera */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C190F1E2A535FC200027FD5 /* Zaps */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0829A55416003E4487 /* Notifications */,
|
2022-04-20 02:46:30 +00:00
|
|
|
4C0A3F8E280F640A000448DE /* ThreadModel.swift */,
|
|
|
|
4C0A3F92280F66F5000448DE /* ReplyMap.swift */,
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD12819DB9B00B3DE84 /* ProfileModel.swift */,
|
|
|
|
4C3BEFD5281D995700B3DE84 /* ActionBarModel.swift */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C3BEFD9281DCA1400B3DE84 /* LikeCounter.swift */,
|
|
|
|
4C3BEFDB281DCE6100B3DE84 /* Liked.swift */,
|
|
|
|
4C3BEFDF281DE1ED00B3DE84 /* DamusState.swift */,
|
|
|
|
4C7FF7D42823313F009601DB /* Mentions.swift */,
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A912825FCF2006E126D /* ProfileUpdate.swift */,
|
|
|
|
4C363A93282704FA006E126D /* Post.swift */,
|
|
|
|
4C363A952827096D006E126D /* PostBlock.swift */,
|
2022-05-08 17:45:24 +00:00
|
|
|
4C363A9928283854006E126D /* Reply.swift */,
|
|
|
|
4C363A9B282838B9006E126D /* EventRef.swift */,
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA328296DEE006E126D /* SearchModel.swift */,
|
2023-10-21 17:25:21 +00:00
|
|
|
0E8A4BB62AE4359200065E81 /* NostrFilter+Hashable.swift */,
|
2022-05-15 18:08:36 +00:00
|
|
|
4C3AC79A28306D7B00E1F516 /* Contacts.swift */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C85283892E7008A31F1 /* CreateAccountModel.swift */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C63334F283D40E500B1C9C3 /* HomeModel.swift */,
|
|
|
|
4C633351283D419F00B1C9C3 /* SignalModel.swift */,
|
|
|
|
4C5F9113283D694D0052CD1C /* FollowTarget.swift */,
|
2023-02-18 23:41:39 +00:00
|
|
|
F75BA12C29A1855400E10810 /* BookmarksManager.swift */,
|
2022-05-24 21:34:21 +00:00
|
|
|
4C5F9115283D855D0052CD1C /* EventsModel.swift */,
|
2022-05-24 22:29:28 +00:00
|
|
|
4C5F9117283D88E40052CD1C /* FollowingModel.swift */,
|
2022-05-26 15:35:19 +00:00
|
|
|
4C987B56283FD07F0042CE38 /* FollowersModel.swift */,
|
2022-06-07 02:26:44 +00:00
|
|
|
4C5C7E67284ED36500A22DF5 /* SearchHomeModel.swift */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987D286D082C00EAE2B3 /* DirectMessagesModel.swift */,
|
2022-07-03 16:23:08 +00:00
|
|
|
4C216F372871EDE300040376 /* DirectMessageModel.swift */,
|
2022-12-30 07:39:16 +00:00
|
|
|
BA693073295D649800ADDB87 /* UserSettingsStore.swift */,
|
|
|
|
4FE60CDC295E1C5E00105A1F /* Wallet.swift */,
|
2023-01-25 16:11:21 +00:00
|
|
|
4CF0ABD32980996B00D66079 /* Report.swift */,
|
2023-01-20 02:59:37 +00:00
|
|
|
3AE45AF5297BB2E700C1D842 /* LibreTranslateServer.swift */,
|
2023-02-04 17:07:27 +00:00
|
|
|
3AAA95C9298DF87B00F3D526 /* TranslationService.swift */,
|
|
|
|
3AAA95CB298E07E900F3D526 /* DeepLPlan.swift */,
|
2023-02-10 18:50:49 +00:00
|
|
|
4CE8795A2996C47A00F758CC /* ZapsModel.swift */,
|
2023-03-31 17:01:31 +00:00
|
|
|
3AA59D1C2999B0400061C48E /* DraftsModel.swift */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0629A540BA003E4487 /* NotificationsModel.swift */,
|
2023-03-16 15:13:03 +00:00
|
|
|
4CD348EE29C3659D00497EB2 /* ImageUploadModel.swift */,
|
2023-04-08 18:44:50 +00:00
|
|
|
3A48E7AF29DFBE9D006E787E /* MutedThreadsManager.swift */,
|
2023-05-10 01:26:12 +00:00
|
|
|
4C7D09772A0B0CC900943473 /* WalletModel.swift */,
|
2023-06-02 00:51:50 +00:00
|
|
|
3A23838D2A297DD200E5AA2E /* ZapButtonModel.swift */,
|
2023-07-01 18:42:36 +00:00
|
|
|
3A5E47C42A4A6CF400C0D090 /* Trie.swift */,
|
|
|
|
3A90B1802A4EA3AF00000D94 /* UserSearchCache.swift */,
|
filters: add "Do not show #nsfw tagged posts" setting
This commit adds a setting where the user can choose to hide notes with
a #nsfw hashtag. This setting was implemented to allow users to filter
out adult or other unsafe content.
I moved the code logic for content filtering into a new file, and
defined a protocol for content filters. Although the logic is still
simple, this might help in developing a flexible API in case we have
more complex filtering needs in the future.
I also modified the name of the "Appearance" setting to "Appearance and
filters", to make it easier for users to intuitively find this setting.
(Note: Re-translations of this string might be necessary)
**PASS**
**iOS:**
- iOS 17.0 (iPhone 14 Pro)
**Damus:** (This commit)
**Steps:**
1. Follow another account that you control (Account B)
2. On account B, post a note saying "#test this is a test". This note should show up on the home feed.
3. On account B, post a note saying "#nsfw this is a test". This note should NOT show up on the home feed
4. Go to settings and disable the NSFW filter. Go back to the home view. The #nsfw post should now show up.
5. Close app and reopen. NSFW post should still show up (i.e. Setting should be persistent)
6. Unfollow account B
7. Close app and reopen.
8. Follow the "#grownostr" hashtag
9. Turn on the NSFW filter
10. On account B, post a note saying "#grownostr this is a test". This note should show up on the home view.
11. On account B, post a note saying "#grownostr #nsfw this is a test". This note should NOT show up.
12. Double-check the "notes and replies" tab. Note should NOT show up there either.
12. Turn off NSFW filter
13. Note from step 11 should now show up.
14. Go to Universe view and find a post with a hashtag. Remember where the post is.
14. Locally change the tag keyword from "nsfw" to that hashtag (Note: I had to test this way because my posts were not showing up in the Universe view)
15. Turn off the filter. Check post is there, in the Universe view.
16. Turn on the filter. Check post is no longer there in the Universe view. (Check the neighboring posts are the same, to make sure)
17. Bring back the code to its normal state.
18. Search for "#nsfw". Make sure that #nsfw appears (I believe this is ok, because it means the person is purposefully searching for it)
Closes: https://github.com/damus-io/damus/issues/1412
Changelog-Added: Add "Do not show #nsfw tagged posts" setting
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-18 23:27:15 +00:00
|
|
|
D723C38D2AB8D83400065664 /* ContentFilters.swift */,
|
storage: Improve clear cache functionality
This patch improves clear cache functionality by:
- Reducing kingfisher cache removal to one command (The two commands running async was leading to warning logs. One was a subset of the other)
- Removing all files under the cache folder where not currently used by other processes
Full Functionality test
-----------------------
PASS
Device: iPhone 13 mini (Physical device)
iOS: 17.0.3
Damus: This commit
Special remarks:
- I had to locally delete other unit tests to be able to build the test target
- Unit test run on an earlier version of the patch. Test coverage should still apply since this newer patch is a subset of the previous.
Setup: Run Damus with debugger connection to Xcode
Test steps:
1. Follow multiple active accounts (Skip if local Damus is already filled up with GBs of data)
2. Scroll down on the feed for a couple of minutes (or until you have seen at least a few images, a few videos, and link previews) (Skip if local Damus is filled up with GBs of data)
3. In Xcode, download a storage container (Window > Devices and Simulators > Select the device > Select Damus > click on (...) > Download container)
- Note: Even though you see the file, it does not download instantly. Monitor the file size until it roughly reaches the size reported in iOS storage settings, as the download may still be in progress. This may take a few minutes in some cases.
- Also take note of storage usage in iOS settings
4. Open the app data package using terminal
5. Run `du -h . | sort -hr`
6. Clear cache and check logs. Logs should indicate the caches being cleared, and there should be no storage-related warning/error logs. PASS
7. Download a new storage container. Remember to wait until it completes download.
8. Run `du -h . | sort -hr` on it.
9. Compare. There should be much less data. Also check iOS settings storage usage. PASS
10. Go back to the home feed and start scrolling, browsing, follow some other people, etc. Look at your own profile as well. Everything should appear to be working as expected with no crashes or important data loss
11. Check bookmarks are still present. PASS
12. Run `DamusCacheManagerTests`. Should pass. PASS* (*See special remarks)
Results:
- Storage usage goes from 3.9GB to 394.7MB
- Damus works as normal after clearing cache, and after restarting the app as well. It becomes slower for a moment, but after a bit it loads as normal again.
- No warning or error logs pertaining to clearing cache
- Unit test passes
My storage container disk usage stats after clearing cache:
```
% du -h | sort -hr
359M ./AppData
359M .
336M ./AppData/Documents
23M ./AppData/Library
20M ./AppData/Library/Caches
7.9M ./AppData/Library/Caches/com.jb55.damus2
2.4M ./AppData/Library/SplashBoard/Snapshots
2.4M ./AppData/Library/SplashBoard
1.8M ./AppData/Library/SplashBoard/Snapshots/com.jb55.damus2 - {DEFAULT GROUP}
1.6M ./AppData/Library/Caches/com.jb55.damus2/fsCachedData
636K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36
596K ./AppData/Library/Caches/com.apple.WebKit.GPU/com.apple.metal
596K ./AppData/Library/Caches/com.apple.WebKit.GPU
452K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal
296K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36/downscaled
224K ./AppData/Library/HTTPStorages/com.jb55.damus2
224K ./AppData/Library/HTTPStorages
164K ./AppData/Library/Caches/com.onevcat.Kingfisher.ImageCache.default
156K ./AppData/Library/Caches/RelayLogs
112K ./AppData/Library/Caches/com.apple.dyld
92K ./AppData/Library/Preferences
60K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal/archiveUsage.db
12K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState
12K ./AppData/Library/Saved Application State
8.0K ./AppData/StoreKit
8.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/ecc156b1-eb9c-4439-b219-e1eebf2b4c36
4.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/KnownSceneSessions
4.0K ./AppData/Library/LanguageModeling/en-dynamic.lm
4.0K ./AppData/Library/LanguageModeling
4.0K ./AppData/Library/Cookies
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit/WebsiteData
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit
0B ./AppData/SystemData/com.apple.SafariViewService/Library
0B ./AppData/SystemData/com.apple.SafariViewService
```
Biggest storage used remaining is in the Documents folder where NostrDB is stored. However, we do not want to clear NostrDB, so this is expected behavior.
Changelog-Changed: Improve clear cache functionality
Closes: https://github.com/damus-io/damus/issues/1472
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 17:44:00 +00:00
|
|
|
D7315A292ACDF3B70036E30A /* DamusCacheManager.swift */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D3D2B116DAD00AD4105 /* NotificationsManager.swift */,
|
|
|
|
D7CB5D442B116FE800AD4105 /* Contacts+.swift */,
|
|
|
|
D7CB5D4A2B11721600AD4105 /* ZapType.swift */,
|
|
|
|
D7CB5D4D2B11728000AD4105 /* NewEventsBits.swift */,
|
|
|
|
D7CB5D502B1174D100AD4105 /* FriendFilter.swift */,
|
|
|
|
D7CB5D5B2B1176B200AD4105 /* MediaUploader.swift */,
|
|
|
|
D7CB5D5E2B11770C00AD4105 /* FollowState.swift */,
|
|
|
|
D7EDED1B2B1178FE0018B19C /* NoteContent.swift */,
|
|
|
|
D7EDED1D2B11797D0018B19C /* LongformEvent.swift */,
|
2023-12-01 21:26:14 +00:00
|
|
|
D7EDED322B12ACAE0018B19C /* DamusUserDefaults.swift */,
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C1F2B530D5100C5ECA7 /* MuteItem.swift */,
|
2024-02-10 16:36:47 +00:00
|
|
|
B533694D2B66D791008A805E /* MutelistManager.swift */,
|
2022-04-20 02:46:30 +00:00
|
|
|
);
|
|
|
|
path = Models;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-14 20:07:39 +00:00
|
|
|
4C0C03962A61E2670098B3B8 /* Fixtures */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C0C03982A61E27B0098B3B8 /* bool_setting.wasm */,
|
|
|
|
4C0C03972A61E27B0098B3B8 /* primal.wasm */,
|
|
|
|
);
|
|
|
|
name = Fixtures;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-06-03 01:51:49 +00:00
|
|
|
4C190F1E2A535FC200027FD5 /* Zaps */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C190F1F2A535FC200027FD5 /* CustomizeZapModel.swift */,
|
|
|
|
);
|
|
|
|
path = Zaps;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-04 18:42:16 +00:00
|
|
|
4C190F232A547D1700027FD5 /* NostrScript */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C190F242A547D2000027FD5 /* LoadScript.swift */,
|
|
|
|
);
|
|
|
|
path = NostrScript;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DEA29F88C6B004C165C /* BlurHash */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C198DEB29F88C6B004C165C /* BlurHashEncode.swift */,
|
|
|
|
4C198DEC29F88C6B004C165C /* Readme.md */,
|
|
|
|
4C198DED29F88C6B004C165C /* License.txt */,
|
|
|
|
4C198DEE29F88C6B004C165C /* BlurHashDecode.swift */,
|
|
|
|
);
|
|
|
|
path = BlurHash;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C198DF329F88D23004C165C /* Images */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C198DF429F88D2E004C165C /* ImageMetadata.swift */,
|
2024-02-28 03:32:34 +00:00
|
|
|
E0EE9DD32B8E5FEA00F3002D /* ImageProcessing.swift */,
|
2023-04-26 17:41:05 +00:00
|
|
|
);
|
|
|
|
path = Images;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-11 01:59:50 +00:00
|
|
|
4C19AE4A2A5CEF7C00C90DB7 /* nostrscript */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C19AE4B2A5CEF7C00C90DB7 /* primal.ts */,
|
|
|
|
4C19AE4C2A5CEF7C00C90DB7 /* NostrScript.swift */,
|
|
|
|
4C19AE502A5CEF7C00C90DB7 /* nostr.ts */,
|
2023-07-21 22:14:07 +00:00
|
|
|
4C4F14A82A2A71AB0045A0B9 /* nostrscript.h */,
|
|
|
|
4C4F14A92A2A71AB0045A0B9 /* nostrscript.c */,
|
2023-07-11 01:59:50 +00:00
|
|
|
);
|
|
|
|
path = nostrscript;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-04-05 15:49:15 +00:00
|
|
|
4C1A9A1B29DDCF8B00516EAC /* Settings */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-07-29 16:42:59 +00:00
|
|
|
4C15C7142A55DE7A00D0A0DB /* ReactionsSettingsView.swift */,
|
2023-04-05 15:49:15 +00:00
|
|
|
4C1A9A1C29DDCF9B00516EAC /* NotificationSettingsView.swift */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A1E29DDD24B00516EAC /* AppearanceSettingsView.swift */,
|
|
|
|
4C1A9A2029DDD3E100516EAC /* KeySettingsView.swift */,
|
|
|
|
4C1A9A2429DDDF2600516EAC /* ZapSettingsView.swift */,
|
|
|
|
4C1A9A2629DDE31900516EAC /* TranslationSettingsView.swift */,
|
2023-05-29 12:02:12 +00:00
|
|
|
E4FA1C022A24BB7F00482697 /* SearchSettingsView.swift */,
|
2023-07-07 12:07:00 +00:00
|
|
|
5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */,
|
2024-04-22 23:09:37 +00:00
|
|
|
D7FD12252BD345A700CF195B /* FirstAidSettingsView.swift */,
|
2023-04-05 15:49:15 +00:00
|
|
|
);
|
|
|
|
path = Settings;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-05-26 17:00:29 +00:00
|
|
|
4C1A9A2829DDF53B00516EAC /* Video */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-05-26 17:13:58 +00:00
|
|
|
4C1A9A2929DDF54400516EAC /* DamusVideoPlayer.swift */,
|
2023-09-06 16:25:07 +00:00
|
|
|
50A16FFC2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift */,
|
2023-09-06 16:23:33 +00:00
|
|
|
50A16FFE2AA76A0900DFEC1F /* VideoController.swift */,
|
2024-03-18 22:21:21 +00:00
|
|
|
50A16FFA2AA6C06600DFEC1F /* DamusAVPlayerView.swift */,
|
2023-05-26 17:00:29 +00:00
|
|
|
);
|
|
|
|
path = Video;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7029A5676F00E2BD5A /* Notifications */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C30AC7129A5677A00E2BD5A /* NotificationsView.swift */,
|
|
|
|
4C30AC7329A5680900E2BD5A /* EventGroupView.swift */,
|
|
|
|
4C30AC7529A5770900E2BD5A /* NotificationItemView.swift */,
|
|
|
|
4C30AC7F29A6A53F00E2BD5A /* ProfilePicturesView.swift */,
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D78CD5972B8990300014D539 /* DamusAppNotificationView.swift */,
|
2023-02-21 20:27:03 +00:00
|
|
|
);
|
|
|
|
path = Notifications;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9362A9AD44700DC3548 /* flatbuffers */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C32B9372A9AD44700DC3548 /* FbConstants.swift */,
|
|
|
|
4C32B9382A9AD44700DC3548 /* Offset.swift */,
|
|
|
|
4C32B9392A9AD44700DC3548 /* Mutable.swift */,
|
|
|
|
4C32B93A2A9AD44700DC3548 /* Int+extension.swift */,
|
|
|
|
4C32B93B2A9AD44700DC3548 /* FlatBufferBuilder.swift */,
|
|
|
|
4C32B93C2A9AD44700DC3548 /* FlatbuffersErrors.swift */,
|
|
|
|
4C32B93D2A9AD44700DC3548 /* Message.swift */,
|
|
|
|
4C32B93E2A9AD44700DC3548 /* Verifier.swift */,
|
|
|
|
4C32B93F2A9AD44700DC3548 /* FlatBuffersUtils.swift */,
|
|
|
|
4C32B9402A9AD44700DC3548 /* ByteBuffer.swift */,
|
|
|
|
4C32B9412A9AD44700DC3548 /* TableVerifier.swift */,
|
|
|
|
4C32B9422A9AD44700DC3548 /* Root.swift */,
|
|
|
|
4C32B9432A9AD44700DC3548 /* VeriferOptions.swift */,
|
|
|
|
4C32B9442A9AD44700DC3548 /* Table.swift */,
|
|
|
|
4C32B9452A9AD44700DC3548 /* Verifiable.swift */,
|
|
|
|
4C32B9462A9AD44700DC3548 /* NativeObject.swift */,
|
|
|
|
4C32B9472A9AD44700DC3548 /* String+extension.swift */,
|
|
|
|
4C32B9482A9AD44700DC3548 /* Documentation.docc */,
|
|
|
|
4C32B9492A9AD44700DC3548 /* FlatBufferObject.swift */,
|
|
|
|
4C32B94A2A9AD44700DC3548 /* Enum.swift */,
|
|
|
|
4C32B94B2A9AD44700DC3548 /* Struct.swift */,
|
|
|
|
);
|
|
|
|
path = flatbuffers;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-08-25 19:32:30 +00:00
|
|
|
4C478E2A2A9935D300489948 /* bindings */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C478E2B2A9935D300489948 /* swift */,
|
|
|
|
4C478E2D2A9935D300489948 /* c */,
|
|
|
|
);
|
|
|
|
path = bindings;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C478E2B2A9935D300489948 /* swift */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C478E2C2A9935D300489948 /* NdbProfile.swift */,
|
|
|
|
);
|
|
|
|
path = swift;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C478E2D2A9935D300489948 /* c */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C478E2E2A9935D300489948 /* profile_json_parser.h */,
|
|
|
|
4C478E2F2A9935D300489948 /* profile_reader.h */,
|
|
|
|
4C478E302A9935D300489948 /* meta_json_parser.h */,
|
|
|
|
4C478E312A9935D300489948 /* profile_builder.h */,
|
|
|
|
4C478E322A9935D300489948 /* meta_builder.h */,
|
|
|
|
4C478E332A9935D300489948 /* profile_verifier.h */,
|
|
|
|
4C478E352A9935D300489948 /* meta_reader.h */,
|
|
|
|
4C478E362A9935D300489948 /* flatbuffers_common_reader.h */,
|
|
|
|
4C478E372A9935D300489948 /* meta_verifier.h */,
|
|
|
|
4C478E382A9935D300489948 /* flatbuffers_common_builder.h */,
|
|
|
|
);
|
|
|
|
path = c;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C47928D2A9939BD00489948 /* flatcc */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C47928E2A9939BD00489948 /* flatcc.h */,
|
|
|
|
4C47928F2A9939BD00489948 /* flatcc_version.h */,
|
|
|
|
4C4792902A9939BD00489948 /* flatcc_emitter.h */,
|
|
|
|
4C4792912A9939BD00489948 /* flatcc_alloc.h */,
|
|
|
|
4C4792922A9939BD00489948 /* flatcc_json_printer.h */,
|
|
|
|
4C4792932A9939BD00489948 /* CMakeLists.txt */,
|
|
|
|
4C4792942A9939BD00489948 /* builder.c */,
|
|
|
|
4C4792952A9939BD00489948 /* flatcc_verifier.h */,
|
|
|
|
4C4792962A9939BD00489948 /* flatcc_refmap.h */,
|
|
|
|
4C4792972A9939BD00489948 /* flatcc_unaligned.h */,
|
|
|
|
4C4792982A9939BD00489948 /* portable */,
|
|
|
|
4C4792C02A9939BD00489948 /* flatcc_endian.h */,
|
|
|
|
4C4792C12A9939BD00489948 /* flatcc_iov.h */,
|
|
|
|
4C4792C22A9939BD00489948 /* flatcc_rtconfig.h */,
|
|
|
|
4C4792C32A9939BD00489948 /* flatcc_accessors.h */,
|
|
|
|
4C4792C42A9939BD00489948 /* flatcc_epilogue.h */,
|
|
|
|
4C4792C52A9939BD00489948 /* flatcc_identifier.h */,
|
|
|
|
4C4792C62A9939BD00489948 /* flatcc_prologue.h */,
|
|
|
|
4C4792C72A9939BD00489948 /* flatcc_builder.h */,
|
|
|
|
4C4792C82A9939BD00489948 /* json_parser.c */,
|
|
|
|
4C4792C92A9939BD00489948 /* support */,
|
|
|
|
4C4792CF2A9939BD00489948 /* emitter.c */,
|
|
|
|
4C4792D02A9939BD00489948 /* flatcc_json_parser.h */,
|
|
|
|
4C4792D12A9939BD00489948 /* refmap.c */,
|
|
|
|
4C4792D22A9939BD00489948 /* flatcc_flatbuffers.h */,
|
|
|
|
4C4792D32A9939BD00489948 /* flatcc_portable.h */,
|
|
|
|
4C4792D42A9939BD00489948 /* verifier.c */,
|
|
|
|
4C4792D52A9939BD00489948 /* flatcc_types.h */,
|
|
|
|
4C4792D62A9939BD00489948 /* json_printer.c */,
|
|
|
|
4C4792D72A9939BD00489948 /* flatcc_assert.h */,
|
|
|
|
4C4792D82A9939BD00489948 /* reflection */,
|
|
|
|
);
|
|
|
|
path = flatcc;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C4792982A9939BD00489948 /* portable */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C4792992A9939BD00489948 /* grisu3_print.h */,
|
|
|
|
4C47929A2A9939BD00489948 /* pprintfp.h */,
|
|
|
|
4C47929B2A9939BD00489948 /* pbase64.h */,
|
|
|
|
4C47929C2A9939BD00489948 /* punaligned.h */,
|
|
|
|
4C47929D2A9939BD00489948 /* LICENSE */,
|
|
|
|
4C47929E2A9939BD00489948 /* pdiagnostic.h */,
|
|
|
|
4C47929F2A9939BD00489948 /* pinttypes.h */,
|
|
|
|
4C4792A02A9939BD00489948 /* pinline.h */,
|
|
|
|
4C4792A12A9939BD00489948 /* pprintint.h */,
|
|
|
|
4C4792A22A9939BD00489948 /* pdiagnostic_pop.h */,
|
|
|
|
4C4792A32A9939BD00489948 /* include */,
|
|
|
|
4C4792AC2A9939BD00489948 /* pversion.h */,
|
|
|
|
4C4792AD2A9939BD00489948 /* pstdalign.h */,
|
|
|
|
4C4792AE2A9939BD00489948 /* pdiagnostic_push.h */,
|
|
|
|
4C4792AF2A9939BD00489948 /* pendian_detect.h */,
|
|
|
|
4C4792B02A9939BD00489948 /* paligned_alloc.h */,
|
|
|
|
4C4792B12A9939BD00489948 /* pendian.h */,
|
|
|
|
4C4792B22A9939BD00489948 /* pstatic_assert.h */,
|
|
|
|
4C4792B32A9939BD00489948 /* pwarnings.h */,
|
|
|
|
4C4792B42A9939BD00489948 /* pparsefp.h */,
|
|
|
|
4C4792B52A9939BD00489948 /* README.md */,
|
|
|
|
4C4792B62A9939BD00489948 /* portable_basic.h */,
|
|
|
|
4C4792B72A9939BD00489948 /* portable.h */,
|
|
|
|
4C4792B82A9939BD00489948 /* grisu3_math.h */,
|
|
|
|
4C4792B92A9939BD00489948 /* pattributes.h */,
|
|
|
|
4C4792BA2A9939BD00489948 /* pstdint.h */,
|
|
|
|
4C4792BB2A9939BD00489948 /* pstdbool.h */,
|
|
|
|
4C4792BC2A9939BD00489948 /* pcrt.h */,
|
|
|
|
4C4792BD2A9939BD00489948 /* pstatic_assert_scope.h */,
|
|
|
|
4C4792BE2A9939BD00489948 /* grisu3_parse.h */,
|
|
|
|
4C4792BF2A9939BD00489948 /* pparseint.h */,
|
|
|
|
);
|
|
|
|
path = portable;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C4792A32A9939BD00489948 /* include */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C4792A42A9939BD00489948 /* std */,
|
|
|
|
4C4792A92A9939BD00489948 /* README */,
|
|
|
|
4C4792AA2A9939BD00489948 /* linux */,
|
|
|
|
);
|
|
|
|
path = include;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C4792A42A9939BD00489948 /* std */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C4792A52A9939BD00489948 /* stdalign.h */,
|
|
|
|
4C4792A62A9939BD00489948 /* inttypes.h */,
|
|
|
|
4C4792A72A9939BD00489948 /* stdbool.h */,
|
|
|
|
4C4792A82A9939BD00489948 /* stdint.h */,
|
|
|
|
);
|
|
|
|
path = std;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C4792AA2A9939BD00489948 /* linux */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C4792AB2A9939BD00489948 /* endian.h */,
|
|
|
|
);
|
|
|
|
path = linux;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C4792C92A9939BD00489948 /* support */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C4792CA2A9939BD00489948 /* README */,
|
|
|
|
4C4792CB2A9939BD00489948 /* readfile.h */,
|
|
|
|
4C4792CC2A9939BD00489948 /* cdump.h */,
|
|
|
|
4C4792CD2A9939BD00489948 /* elapsed.h */,
|
|
|
|
4C4792CE2A9939BD00489948 /* hexdump.h */,
|
|
|
|
);
|
|
|
|
path = support;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C4792D82A9939BD00489948 /* reflection */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C4792D92A9939BD00489948 /* README */,
|
|
|
|
4C4792DA2A9939BD00489948 /* reflection_reader.h */,
|
|
|
|
4C4792DB2A9939BD00489948 /* flatbuffers_common_reader.h */,
|
|
|
|
4C4792DC2A9939BD00489948 /* reflection_builder.h */,
|
|
|
|
4C4792DD2A9939BD00489948 /* reflection_verifier.h */,
|
|
|
|
4C4792DE2A9939BD00489948 /* flatbuffers_common_builder.h */,
|
|
|
|
);
|
|
|
|
path = reflection;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0829A55416003E4487 /* Notifications */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C54AA0929A55429003E4487 /* EventGroup.swift */,
|
|
|
|
4C54AA0B29A5543C003E4487 /* ZapGroup.swift */,
|
2023-06-23 08:01:30 +00:00
|
|
|
4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */,
|
2023-02-21 20:27:03 +00:00
|
|
|
);
|
|
|
|
path = Notifications;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-08-22 05:12:01 +00:00
|
|
|
4C5E54042A95232A00FF6E60 /* Status */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C64305A2A945AF200B0C0E9 /* Music */,
|
|
|
|
4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */,
|
|
|
|
4C5E54022A9522F600FF6E60 /* UserStatus.swift */,
|
|
|
|
4C5E54052A9671F800FF6E60 /* UserStatusSheet.swift */,
|
|
|
|
);
|
|
|
|
path = Status;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4C64305A2A945AF200B0C0E9 /* Music */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C64305B2A945AFF00B0C0E9 /* MusicController.swift */,
|
|
|
|
);
|
|
|
|
path = Music;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-13 14:05:53 +00:00
|
|
|
4C687C2A2A6058450092C550 /* Search */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C687C232A5FA86D0092C550 /* SearchHeaderView.swift */,
|
|
|
|
);
|
|
|
|
path = Search;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-04-03 22:40:18 +00:00
|
|
|
4C75EFA227FA576C0006080F /* Views */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-03-18 22:21:43 +00:00
|
|
|
D71AC4CA2BA8E3320076268E /* Extensions */,
|
2023-09-19 20:35:52 +00:00
|
|
|
BA3759952ABCCF360018D73B /* Camera */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694E82A66221E001F4053 /* Onboarding */,
|
2023-07-04 18:42:16 +00:00
|
|
|
4C190F232A547D1700027FD5 /* NostrScript */,
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D09692A0AEA0400943473 /* CodeScanner */,
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D095A2A098C5C00943473 /* Wallet */,
|
2023-04-21 21:17:37 +00:00
|
|
|
4C8D1A6D29F31E4100ACDF75 /* Buttons */,
|
2023-05-26 17:00:29 +00:00
|
|
|
4C1A9A2829DDF53B00516EAC /* Video */,
|
2023-04-05 15:49:15 +00:00
|
|
|
4C1A9A1B29DDCF8B00516EAC /* Settings */,
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6129CC9A80008DB934 /* Images */,
|
2023-03-22 13:24:34 +00:00
|
|
|
4CFF8F5729C9FD07008DB934 /* Purple */,
|
2023-03-05 21:39:00 +00:00
|
|
|
4CCEB7AC29B53D180078AA28 /* Search */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7029A5676F00E2BD5A /* Notifications */,
|
2023-02-20 17:11:39 +00:00
|
|
|
4CE0E2B029A3DF4700DB4CA2 /* Timeline */,
|
2023-02-10 18:50:49 +00:00
|
|
|
4CE879562996C44A00F758CC /* Zaps */,
|
2023-02-07 18:51:08 +00:00
|
|
|
4CB9D4A52992D01900A9A7E4 /* Profile */,
|
2023-01-30 23:49:03 +00:00
|
|
|
4CAAD8AE29888A9B00060CEA /* Relays */,
|
2023-01-22 18:56:14 +00:00
|
|
|
4CF0ABF42985CD4200D66079 /* Posting */,
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABDF2981A83000D66079 /* Muting */,
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAEE297F11B300430951 /* Events */,
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA24800297E3DAE0090C62D /* Reposts */,
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB88394296F7F8100DC99E7 /* Reactions */,
|
|
|
|
4CB88387296AF97C00DC99E7 /* ActionBar */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4CE4F9E228528C5200C00DD9 /* AddRelayView.swift */,
|
2022-05-05 04:33:08 +00:00
|
|
|
4C363A8728236948006E126D /* BlocksView.swift */,
|
2023-02-18 23:41:39 +00:00
|
|
|
F75BA12E29A18EF500E10810 /* BookmarksView.swift */,
|
2022-05-20 23:06:13 +00:00
|
|
|
4C285C8128385570008A31F1 /* CarouselView.swift */,
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9DD2852768D00C00DD9 /* ConfigView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4C285C8328385690008A31F1 /* CreateAccountView.swift */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987B286D03E000EAE2B3 /* DirectMessagesView.swift */,
|
|
|
|
4C216F31286E388800040376 /* DMChatView.swift */,
|
|
|
|
4C216F33286F5ACD00040376 /* DMView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
3169CAE4294E699400EE4006 /* Empty Views */,
|
|
|
|
4C75EFB82804A2740006080F /* EventView.swift */,
|
2023-01-06 00:16:48 +00:00
|
|
|
4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4C3AC79E2833115300E1F516 /* FollowButtonView.swift */,
|
|
|
|
4C3AC79C2833036D00E1F516 /* FollowingView.swift */,
|
|
|
|
4C90BD17283A9EE5008EE7EF /* LoginView.swift */,
|
2023-10-11 12:17:28 +00:00
|
|
|
ADFE73542AD4793100EC7326 /* QRScanNSECView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4C363A8D28236FE4006E126D /* NoteContentView.swift */,
|
|
|
|
4C75EFAC28049CFB0006080F /* PostButton.swift */,
|
|
|
|
4C75EFA327FA577B0006080F /* PostView.swift */,
|
2023-02-17 20:20:35 +00:00
|
|
|
9CA876E129A00CE90003B9A3 /* AttachMediaUtility.swift */,
|
2024-02-19 20:53:57 +00:00
|
|
|
F757933929D7AECD007DEAC1 /* MediaPicker.swift */,
|
2023-02-24 18:28:47 +00:00
|
|
|
9C83F89229A937B900136C08 /* TextViewWrapper.swift */,
|
2023-01-06 20:11:19 +00:00
|
|
|
4C3AC7A42836987600E1F516 /* MainTabView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4C363A8B28236B92006E126D /* PubkeyView.swift */,
|
|
|
|
4CACA9D4280C31E100D9BBE8 /* ReplyView.swift */,
|
2023-04-17 01:18:49 +00:00
|
|
|
F7F0BA262978E54D009531F3 /* ParticipantsView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4C285C8D28399BFD008A31F1 /* SaveKeysView.swift */,
|
|
|
|
4C3AC7A628369BA200E1F516 /* SearchHomeView.swift */,
|
|
|
|
4C5C7E69284EDE2E00A22DF5 /* SearchResultsView.swift */,
|
|
|
|
4C363AA128296A7E006E126D /* SearchView.swift */,
|
2022-12-25 01:33:34 +00:00
|
|
|
BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4C3AC7A02835A81400E1F516 /* SetupView.swift */,
|
2023-03-04 19:33:01 +00:00
|
|
|
E9E4ED0A295867B900DD7078 /* ThreadView.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
4CA2EF9F280E37AC0044ACD8 /* TimelineView.swift */,
|
2022-12-30 00:55:36 +00:00
|
|
|
4CB55EF4295E679D007FD187 /* UserRelaysView.swift */,
|
2023-01-06 20:11:19 +00:00
|
|
|
647D9A8C2968520300A295DE /* SideMenuView.swift */,
|
2023-01-10 23:12:34 +00:00
|
|
|
9609F057296E220800069BF3 /* BannerImageView.swift */,
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB8838E296F781C00DC99E7 /* ReactionsView.swift */,
|
2023-01-25 16:11:21 +00:00
|
|
|
4CF0ABD529817F5B00D66079 /* ReportView.swift */,
|
2023-01-25 23:34:33 +00:00
|
|
|
4CF0ABE42981EE0C00D66079 /* EULAView.swift */,
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA247FE297E3D900090C62D /* RepostsView.swift */,
|
2023-05-20 17:38:06 +00:00
|
|
|
50DA11252A16A23F00236234 /* Launch.storyboard */,
|
2023-01-28 06:30:57 +00:00
|
|
|
5C513FCB2984ACA60072348F /* QRCodeView.swift */,
|
2023-02-08 19:07:58 +00:00
|
|
|
643EA5C7296B764E005081BB /* RelayFilterView.swift */,
|
2023-10-20 18:16:13 +00:00
|
|
|
D783A63E2AD4E53D00658DDA /* SuggestedHashtagsView.swift */,
|
2023-10-21 04:44:36 +00:00
|
|
|
D77BFA0A2AE3051200621634 /* ProfileActionSheetView.swift */,
|
2022-04-03 22:40:18 +00:00
|
|
|
);
|
|
|
|
path = Views;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFAB28049CC80006080F /* Nostr */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE6DF1527F8DEBF00C66700 /* RelayConnection.swift */,
|
2023-07-09 13:45:33 +00:00
|
|
|
50A60D132A28BEEE00186190 /* RelayLog.swift */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFA527FF87A20006080F /* Nostr.swift */,
|
|
|
|
4C75EFAE28049D340006080F /* NostrFilter.swift */,
|
|
|
|
4C75EFB028049D510006080F /* NostrResponse.swift */,
|
|
|
|
4C75EFB228049D640006080F /* NostrEvent.swift */,
|
2023-08-20 01:09:30 +00:00
|
|
|
3CCD1E692A874C4E0099A953 /* Nip98HTTPAuth.swift */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFB428049D790006080F /* Relay.swift */,
|
|
|
|
4C75EFB628049D990006080F /* RelayPool.swift */,
|
2022-04-11 18:32:30 +00:00
|
|
|
4C75EFBA2804A34C0006080F /* ProofOfWork.swift */,
|
2022-04-12 13:47:54 +00:00
|
|
|
4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */,
|
2022-04-17 12:31:38 +00:00
|
|
|
4CACA9DB280C38C000D9BBE8 /* Profiles.swift */,
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD32819DE8F00B3DE84 /* NostrKind.swift */,
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A8F28247A1D006E126D /* NostrLink.swift */,
|
2023-04-13 14:12:16 +00:00
|
|
|
50088DA029E8271A008A1FDF /* WebSocket.swift */,
|
2023-07-23 18:55:36 +00:00
|
|
|
4C28A4112A6D03D200C1A7A5 /* ReferencedId.swift */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4C2B7BF12A71B6540049DEE7 /* Id.swift */,
|
2023-09-30 02:04:04 +00:00
|
|
|
D7FF93FF2AC7AC5200FD969D /* RelayURL.swift */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D22B2B086C7400234419 /* NostrEvent+.swift */,
|
2023-12-16 08:28:54 +00:00
|
|
|
D7C6787D2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C652B312C3700A232C0 /* NostrAuth.swift */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFCB2B155D07006CF0F4 /* MakeZapRequest.swift */,
|
2022-04-11 17:34:35 +00:00
|
|
|
);
|
|
|
|
path = Nostr;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D095A2A098C5C00943473 /* Wallet */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C7D095C2A098C5D00943473 /* ConnectWalletView.swift */,
|
|
|
|
4C7D095D2A098C5D00943473 /* WalletView.swift */,
|
|
|
|
4C7D09672A0AE9B200943473 /* NWCScannerView.swift */,
|
|
|
|
);
|
|
|
|
path = Wallet;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D09692A0AEA0400943473 /* CodeScanner */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C7D096A2A0AEA0400943473 /* CodeScanner.swift */,
|
|
|
|
4C7D096B2A0AEA0400943473 /* ScannerCoordinator.swift */,
|
|
|
|
4C7D096C2A0AEA0400943473 /* ScannerViewController.swift */,
|
|
|
|
);
|
|
|
|
path = CodeScanner;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-05-10 01:13:33 +00:00
|
|
|
4C7D09702A0AEF4C00943473 /* Gradients */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C7D09712A0AEF5E00943473 /* DamusGradient.swift */,
|
|
|
|
4C7D09732A0AEF9000943473 /* AlbyGradient.swift */,
|
2023-05-15 18:57:37 +00:00
|
|
|
4C2859612A12A7F0004746F7 /* GoldSupportGradient.swift */,
|
2023-05-26 19:53:55 +00:00
|
|
|
5C6E1DAE2A194075008FC15A /* PinkGradient.swift */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694F72A6983AF001F4053 /* GrayGradient.swift */,
|
2023-05-26 19:48:07 +00:00
|
|
|
5C0707D02A1ECB38004E7B51 /* DamusLogoGradient.swift */,
|
2023-07-13 01:19:13 +00:00
|
|
|
4C687C202A5F7ED00092C550 /* DamusBackground.swift */,
|
2023-09-09 03:06:01 +00:00
|
|
|
5CF2DCCD2AABE1A500984B8D /* DamusLightGradient.swift */,
|
2024-03-10 22:37:13 +00:00
|
|
|
5C7389B82B9E69ED00781E0A /* MutinyGradient.swift */,
|
2023-05-10 01:13:33 +00:00
|
|
|
);
|
|
|
|
path = Gradients;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-05-04 23:26:10 +00:00
|
|
|
4C7FF7D628233637009601DB /* Util */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-01-18 19:59:30 +00:00
|
|
|
E04A37C52B544F090029650D /* URIParsing.swift */,
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB02A7958E60024F453 /* VersionInfo.swift */,
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D09612A098D0E00943473 /* WalletConnect.swift */,
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DF329F88D23004C165C /* Images */,
|
|
|
|
4C198DEA29F88C6B004C165C /* BlurHash */,
|
2023-03-31 22:14:55 +00:00
|
|
|
4CE4F0F329D779B5005914DB /* PostBox.swift */,
|
2023-03-06 02:04:50 +00:00
|
|
|
7C0F392D29B57C8F0039859C /* Extensions */,
|
2023-02-09 23:56:26 +00:00
|
|
|
4CE879492995B58700F758CC /* Relays */,
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABEA29844B2F00D66079 /* AnyCodable */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CC7AAE6297EFA7B00430951 /* Zap.swift */,
|
2023-02-01 21:49:32 +00:00
|
|
|
F7908E96298B1FDF00AB113A /* NIPURLBuilder.swift */,
|
2022-05-19 21:38:25 +00:00
|
|
|
4CEE2AF4280B29E600AB5EEF /* TimeAgo.swift */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C363A8328233689006E126D /* Parser.swift */,
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA728297703006E126D /* InsertSort.swift */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8B28398BC6008A31F1 /* Keys.swift */,
|
2023-05-04 11:40:04 +00:00
|
|
|
501F8C7F2A0220E1001AFC1D /* KeychainStorage.swift */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C90BD19283AA67F008EE7EF /* Bech32.swift */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C216F352870A9A700040376 /* InputDismissKeyboard.swift */,
|
2022-12-18 23:37:53 +00:00
|
|
|
3169CAEC294FCCFC00EE4006 /* Constants.swift */,
|
2022-12-27 19:38:52 +00:00
|
|
|
3165648A295B70D500C64604 /* LinkView.swift */,
|
2023-01-02 23:18:42 +00:00
|
|
|
4C3A1D3629637E0500558C0F /* PreviewCache.swift */,
|
2023-01-03 03:09:56 +00:00
|
|
|
64FBD06E296255C400D9D3B2 /* Theme.swift */,
|
2023-01-04 09:30:37 +00:00
|
|
|
4CB8838529656C8B00DC99E7 /* NIP05.swift */,
|
2023-01-25 17:53:41 +00:00
|
|
|
4CF0ABD72981980C00D66079 /* Lists.swift */,
|
2023-01-28 16:30:06 +00:00
|
|
|
4CF0ABEF29857E9200D66079 /* Bech32Object.swift */,
|
2023-01-27 21:03:17 +00:00
|
|
|
7C60CAEE298471A1009C80D6 /* CoreSVG.swift */,
|
2023-01-30 21:26:04 +00:00
|
|
|
4CAAD8AC298851D000060CEA /* AccountDeletion.swift */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883A52975F83C00DC99E7 /* LNUrlPayRequest.swift */,
|
|
|
|
4CB883A72975FC1800DC99E7 /* Zaps.swift */,
|
|
|
|
4CB883B5297730E400DC99E7 /* LNUrls.swift */,
|
2023-02-04 17:07:27 +00:00
|
|
|
3AB72AB8298ECF30004BB58C /* Translator.swift */,
|
2023-02-15 17:35:47 +00:00
|
|
|
4C2CDDF6299D4A5E00879FD5 /* Debouncer.swift */,
|
2023-02-20 17:11:39 +00:00
|
|
|
4CE0E2AE29A2E82100DB4CA2 /* EventHolder.swift */,
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040F029A8FF97008A0F29 /* LocalizationUtil.swift */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7729A577AB00E2BD5A /* EventCache.swift */,
|
2023-03-14 22:26:52 +00:00
|
|
|
4C9BB83029C0ED4F00FC4E37 /* DisplayName.swift */,
|
2023-03-29 23:24:06 +00:00
|
|
|
4CE4F0F129D4FCFA005914DB /* DebouncedOnChange.swift */,
|
2023-04-04 19:03:31 +00:00
|
|
|
4C1A9A1929DCA17E00516EAC /* ReplyCounter.swift */,
|
2023-04-06 23:04:16 +00:00
|
|
|
4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */,
|
2023-04-07 00:09:50 +00:00
|
|
|
4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */,
|
2023-04-15 19:40:00 +00:00
|
|
|
4CDA128B29EB19C40006FA5A /* LocalNotification.swift */,
|
2023-04-21 23:21:01 +00:00
|
|
|
4CA5588229F33F5B00DC6A45 /* StringCodable.swift */,
|
2023-04-28 19:24:34 +00:00
|
|
|
50B5685229F97CB400A23243 /* CredentialHandler.swift */,
|
2023-05-05 23:12:03 +00:00
|
|
|
4C7D09582A05BEAD00943473 /* KeyboardVisible.swift */,
|
2023-06-04 21:49:37 +00:00
|
|
|
3A8CC6CB2A2CFEF900940F5F /* StringUtil.swift */,
|
2023-04-29 18:38:28 +00:00
|
|
|
D2277EE92A089BD5006C3807 /* Router.swift */,
|
2023-08-03 00:07:55 +00:00
|
|
|
4C2B10272A7B0F5C008AA43E /* Log.swift */,
|
2023-09-06 16:49:06 +00:00
|
|
|
50C3E0892AA8E3F7006A4BC0 /* AVPlayer+Additions.swift */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED202B117DCA0018B19C /* SequenceUtils.swift */,
|
|
|
|
D7EDED2D2B128E8A0018B19C /* CollectionExtension.swift */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFCE2B155D8C006CF0F4 /* ZapDataModel.swift */,
|
|
|
|
D74AAFD32B155ECB006CF0F4 /* Zaps+.swift */,
|
|
|
|
D74AAFD52B155F0C006CF0F4 /* WalletConnect+.swift */,
|
2022-05-04 23:26:10 +00:00
|
|
|
);
|
|
|
|
path = Util;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-04-21 21:17:37 +00:00
|
|
|
4C8D1A6D29F31E4100ACDF75 /* Buttons */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C8D1A6E29F31E5000ACDF75 /* FriendsButton.swift */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694F32A6732B7001F4053 /* GradientFollowButton.swift */,
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09652A0AE62100943473 /* AlbyButton.swift */,
|
2024-03-10 22:37:13 +00:00
|
|
|
5C7389B62B9E692E00781E0A /* MutinyButton.swift */,
|
2023-04-21 21:17:37 +00:00
|
|
|
);
|
|
|
|
path = Buttons;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-21 21:54:03 +00:00
|
|
|
4C9054862A6AEB4500811EEC /* nostrdb */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-08-25 19:32:30 +00:00
|
|
|
4C47928D2A9939BD00489948 /* flatcc */,
|
|
|
|
4C478E2A2A9935D300489948 /* bindings */,
|
2023-07-21 23:01:28 +00:00
|
|
|
4CE9FBBB2A6B3D9C007E485C /* Test */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4C9054882A6AED4700811EEC /* NdbTagIterator.swift */,
|
|
|
|
4C90548A2A6AEDEE00811EEC /* NdbNote.swift */,
|
|
|
|
4C5D5C9C2A6B2CB40024563C /* AsciiCharacter.swift */,
|
|
|
|
4CDD1ADF2A6B305F001CD4DF /* NdbTagElem.swift */,
|
2023-08-26 01:13:42 +00:00
|
|
|
4C478E242A9932C100489948 /* Ndb.swift */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */,
|
2023-09-10 17:16:50 +00:00
|
|
|
4C3DCC752A9FC2030091E592 /* NdbTxn.swift */,
|
2023-07-21 22:14:07 +00:00
|
|
|
4CE9FBB82A6B3B26007E485C /* nostrdb.c */,
|
2023-08-25 19:32:30 +00:00
|
|
|
4C4793032A993DB900489948 /* midl.c */,
|
|
|
|
4C4793002A993B9A00489948 /* mdb.c */,
|
|
|
|
4C4793022A993D9300489948 /* midl.h */,
|
|
|
|
4C4792FF2A993B9A00489948 /* lmdb.h */,
|
2023-07-21 22:14:07 +00:00
|
|
|
4CE9FBB92A6B3B26007E485C /* nostrdb.h */,
|
2023-07-25 15:58:06 +00:00
|
|
|
4C78EFD62A7078C5007E8197 /* random.h */,
|
2023-07-21 23:01:28 +00:00
|
|
|
4CDD1AE72A6B3611001CD4DF /* jsmn.h */,
|
2023-08-25 19:32:30 +00:00
|
|
|
4C478E292A99359900489948 /* util.h */,
|
|
|
|
4C478E282A99357400489948 /* memchr.h */,
|
|
|
|
4C478E272A99354E00489948 /* protected_queue.h */,
|
|
|
|
4C478E262A99353500489948 /* threadpool.h */,
|
2023-07-25 15:58:06 +00:00
|
|
|
4C78EFD82A707C4D007E8197 /* secp256k1_ecdh.h */,
|
|
|
|
4C78EFD72A707C4D007E8197 /* secp256k1_schnorrsig.h */,
|
|
|
|
4C78EFDA2A707C67007E8197 /* secp256k1_extrakeys.h */,
|
|
|
|
4C78EFD92A707C4D007E8197 /* secp256k1.h */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D2272B085CDA00234419 /* NdbNote+.swift */,
|
2023-07-21 21:54:03 +00:00
|
|
|
);
|
|
|
|
path = nostrdb;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-17 17:15:26 +00:00
|
|
|
4C9B0DEC2A65A74000CBDA21 /* Util */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C9B0DED2A65A75F00CBDA21 /* AttrStringTestExtensions.swift */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B5B4D1422B37D47600844320 /* NdbExtensions.swift */,
|
2023-07-17 17:15:26 +00:00
|
|
|
);
|
|
|
|
path = Util;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-30 17:47:53 +00:00
|
|
|
4CA3529C2A76AE47003BB08B /* Notify */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-07-30 17:48:56 +00:00
|
|
|
4C86F7C52A76C51100EC0817 /* AttachedWalletNotify.swift */,
|
2023-03-22 13:24:34 +00:00
|
|
|
4C9D6D152B1AA9C6004E5CD9 /* DisplayTabBarNotify.swift */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253552A76C8C60004F4B8 /* BroadcastNotify.swift */,
|
|
|
|
4C1253512A76C6130004F4B8 /* ComposeNotify.swift */,
|
|
|
|
4CA352AD2A76C1AC003BB08B /* FollowedNotify.swift */,
|
|
|
|
4CA3529D2A76AE67003BB08B /* FollowNotify.swift */,
|
|
|
|
4CA352A12A76AEC5003BB08B /* LikedNotify.swift */,
|
|
|
|
4CA352A92A76BF3A003BB08B /* LocalNotificationNotify.swift */,
|
|
|
|
4C12535B2A76CA540004F4B8 /* LoginNotify.swift */,
|
|
|
|
4C1253532A76C7D60004F4B8 /* LogoutNotify.swift */,
|
|
|
|
4CA352A72A76B37E003BB08B /* NewMutesNotify.swift */,
|
|
|
|
4CA352AB2A76C07F003BB08B /* NewUnmutesNotify.swift */,
|
2023-07-30 17:47:53 +00:00
|
|
|
4CA3529F2A76AE80003BB08B /* Notify.swift */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253652A76D0FF0004F4B8 /* OnlyZapsNotify.swift */,
|
|
|
|
4C1253612A76D00B0004F4B8 /* PostNotify.swift */,
|
|
|
|
4C1253572A76C9060004F4B8 /* PresentSheetNotify.swift */,
|
|
|
|
4C59B98B2A76C2550032FFEB /* ProfileUpdatedNotify.swift */,
|
|
|
|
4C1253632A76D08F0004F4B8 /* ReportNotify.swift */,
|
|
|
|
4C12535F2A76CF890004F4B8 /* ScrollToTopNotify.swift */,
|
|
|
|
4C12535D2A76CA870004F4B8 /* SwitchedTimelineNotify.swift */,
|
|
|
|
4C12534F2A76C5B20004F4B8 /* UnfollowedNotify.swift */,
|
|
|
|
4C1253592A76C9960004F4B8 /* UnfollowNotify.swift */,
|
|
|
|
4CA352A32A76AFF3003BB08B /* UpdateStatsNotify.swift */,
|
|
|
|
4C86F7C32A76C44C00EC0817 /* ZappingNotify.swift */,
|
|
|
|
4C1253672A76D2470004F4B8 /* MuteNotify.swift */,
|
|
|
|
4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */,
|
|
|
|
4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */,
|
|
|
|
4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C612B312BD700A232C0 /* ReconnectRelaysNotify.swift */,
|
2024-01-30 07:42:18 +00:00
|
|
|
D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */,
|
2023-07-30 17:47:53 +00:00
|
|
|
);
|
|
|
|
path = Notify;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-06-01 18:53:59 +00:00
|
|
|
4CA9275B2A28FF570098A105 /* Longform */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CA9275C2A28FF630098A105 /* LongformView.swift */,
|
|
|
|
4CA9275E2A2902B20098A105 /* LongformPreview.swift */,
|
|
|
|
);
|
|
|
|
path = Longform;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927682A290F8F0098A105 /* Components */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CA927642A290F1A0098A105 /* TimeDot.swift */,
|
|
|
|
4CA927622A290EB10098A105 /* EventTop.swift */,
|
|
|
|
4CC7AAF3297F18B400430951 /* ReplyDescription.swift */,
|
|
|
|
4CA927662A290F8B0098A105 /* RelativeTime.swift */,
|
|
|
|
4CA9276B2A2910D10098A105 /* ReplyPart.swift */,
|
2024-02-05 03:24:00 +00:00
|
|
|
5C7389B02B6EFA7100781E0A /* ProxyView.swift */,
|
2023-06-01 18:53:12 +00:00
|
|
|
);
|
|
|
|
path = Components;
|
2023-06-22 09:15:51 +00:00
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-30 23:49:03 +00:00
|
|
|
4CAAD8AE29888A9B00060CEA /* Relays */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-02-10 18:01:17 +00:00
|
|
|
4CE879532996BA0000F758CC /* Detail */,
|
2023-01-30 23:49:03 +00:00
|
|
|
4C06670028FC7C5900038D2A /* RelayView.swift */,
|
|
|
|
4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */,
|
2023-02-01 21:49:32 +00:00
|
|
|
F7908E91298B0F0700AB113A /* RelayDetailView.swift */,
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE8794D2996B16A00F758CC /* RelayToggle.swift */,
|
2023-06-17 12:20:50 +00:00
|
|
|
4CE8794F2996B2BD00F758CC /* RelayStatusView.swift */,
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE879512996B68900F758CC /* RelayType.swift */,
|
2023-04-14 18:45:10 +00:00
|
|
|
4CDA128929E9D10C0006FA5A /* SignalView.swift */,
|
2023-09-09 03:11:13 +00:00
|
|
|
5CF2DCCB2AA3AF0B00984B8D /* RelayPicView.swift */,
|
2023-01-30 23:49:03 +00:00
|
|
|
);
|
|
|
|
path = Relays;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB88387296AF97C00DC99E7 /* ActionBar */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CEE2B01280B39E800AB5EEF /* EventActionBar.swift */,
|
|
|
|
4CB88388296AF99A00DC99E7 /* EventDetailBar.swift */,
|
2023-03-09 03:49:49 +00:00
|
|
|
5CF72FC129B9142F00124A13 /* ShareAction.swift */,
|
2023-04-19 18:08:59 +00:00
|
|
|
4CE1398F29F0661A00AC6A0B /* RepostAction.swift */,
|
|
|
|
4CE1399129F0666100AC6A0B /* ShareActionButton.swift */,
|
|
|
|
4CE1399329F0669900AC6A0B /* BigButton.swift */,
|
2023-01-10 16:12:04 +00:00
|
|
|
);
|
|
|
|
path = ActionBar;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4CB88394296F7F8100DC99E7 /* Reactions */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CB88395296F7F8B00DC99E7 /* ReactionView.swift */,
|
|
|
|
);
|
|
|
|
path = Reactions;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-07 18:51:08 +00:00
|
|
|
4CB9D4A52992D01900A9A7E4 /* Profile */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-06-20 13:30:48 +00:00
|
|
|
4CB8FC222A41ABA500763C51 /* AboutView.swift */,
|
2023-03-23 14:54:25 +00:00
|
|
|
4CEE2AF6280B2DEA00AB5EEF /* ProfileName.swift */,
|
|
|
|
4C285C892838B985008A31F1 /* ProfilePictureSelector.swift */,
|
2023-04-20 20:40:37 +00:00
|
|
|
E990020E2955F837003BBC5A /* EditMetadataView.swift */,
|
2023-04-03 17:57:07 +00:00
|
|
|
F79C7FAC29D5E9620000F946 /* EditPictureControl.swift */,
|
2023-03-23 14:54:25 +00:00
|
|
|
4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */,
|
|
|
|
4C8682862814DE470026224F /* ProfileView.swift */,
|
2023-02-07 18:51:08 +00:00
|
|
|
4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */,
|
2023-02-25 20:10:37 +00:00
|
|
|
4C9F18E329ABDE6D008C55EC /* MaybeAnonPfpView.swift */,
|
2023-03-14 22:26:52 +00:00
|
|
|
4C9BB83329C12D9900FC4E37 /* EventProfileName.swift */,
|
2023-04-20 21:30:27 +00:00
|
|
|
4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */,
|
2023-06-20 04:54:26 +00:00
|
|
|
3A4647CE2A413ADC00386AD8 /* CondensedProfilePicturesView.swift */,
|
2023-07-17 20:25:17 +00:00
|
|
|
4C9B0DF22A65C46800CBDA21 /* ProfileEditButton.swift */,
|
2023-02-07 18:51:08 +00:00
|
|
|
);
|
|
|
|
path = Profile;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FEC2A73FC9A007AEB17 /* Types */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CC14FED2A73FCBB007AEB17 /* Ids */,
|
2023-08-21 21:17:21 +00:00
|
|
|
7527271D2A93FF0100214108 /* Block.swift */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21D2B0858BB00234419 /* MigratedTypes.swift */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C222B532A8700C5ECA7 /* DamusDuration.swift */,
|
2023-07-26 15:46:44 +00:00
|
|
|
);
|
|
|
|
path = Types;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4CC14FED2A73FCBB007AEB17 /* Ids */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CC14FEE2A73FCCB007AEB17 /* IdType.swift */,
|
|
|
|
4CC14FF02A73FCDB007AEB17 /* Pubkey.swift */,
|
|
|
|
4CC14FF42A740BB7007AEB17 /* NoteId.swift */,
|
|
|
|
4CC14FF82A741939007AEB17 /* Referenced.swift */,
|
|
|
|
);
|
|
|
|
path = Ids;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAEE297F11B300430951 /* Events */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927682A290F8F0098A105 /* Components */,
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAEF297F11C700430951 /* SelectedEventView.swift */,
|
|
|
|
4CC7AAF5297F1A6A00430951 /* EventBody.swift */,
|
|
|
|
4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */,
|
|
|
|
4CC7AAF7297F1CEE00430951 /* EventProfile.swift */,
|
2023-01-25 16:11:21 +00:00
|
|
|
4CC7AAF9297F64AC00430951 /* EventMenu.swift */,
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
4CF0ABE6298444FC00D66079 /* EventMutingContainerView.swift */,
|
2023-02-04 17:55:16 +00:00
|
|
|
4C3D52B5298DB4E6001C5831 /* ZapEvent.swift */,
|
|
|
|
4C3D52B7298DB5C6001C5831 /* TextEvent.swift */,
|
2023-03-26 15:35:53 +00:00
|
|
|
4CFF8F6C29CD022E008DB934 /* WideEventView.swift */,
|
2023-06-01 18:53:59 +00:00
|
|
|
4CA9275B2A28FF570098A105 /* Longform */,
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927602A290E340098A105 /* EventShell.swift */,
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
D7870BC02AC4750B0080BA88 /* MentionView.swift */,
|
|
|
|
D7870BC22AC47EBC0080BA88 /* EventLoaderView.swift */,
|
2023-01-23 20:13:58 +00:00
|
|
|
);
|
|
|
|
path = Events;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-03-05 21:39:00 +00:00
|
|
|
4CCEB7AC29B53D180078AA28 /* Search */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CCEB7AD29B53D260078AA28 /* SearchingEventView.swift */,
|
2023-12-04 06:13:46 +00:00
|
|
|
4C9D6D1A2B1D35D7004E5CD9 /* PullDownSearch.swift */,
|
2023-03-05 21:39:00 +00:00
|
|
|
);
|
|
|
|
path = Search;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-20 17:11:39 +00:00
|
|
|
4CE0E2B029A3DF4700DB4CA2 /* Timeline */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE0E2B529A3ED5500DB4CA2 /* InnerTimelineView.swift */,
|
|
|
|
);
|
|
|
|
path = Timeline;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9DF285287A000C00DD9 /* Components */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-08-22 05:12:01 +00:00
|
|
|
4C5E54042A95232A00FF6E60 /* Status */,
|
2023-07-13 14:05:53 +00:00
|
|
|
4C687C2A2A6058450092C550 /* Search */,
|
2023-05-10 01:13:33 +00:00
|
|
|
4C7D09702A0AEF4C00943473 /* Gradients */,
|
2022-12-20 16:39:29 +00:00
|
|
|
31D2E846295218AF006D67F8 /* Shimmer.swift */,
|
2022-08-09 16:32:22 +00:00
|
|
|
4CD7641A28A1641400B6928F /* EndBlock.swift */,
|
2022-10-16 23:11:27 +00:00
|
|
|
4C06670528FCB08600038D2A /* ImageCarousel.swift */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67C28FFBBA200C48A62 /* InvoicesView.swift */,
|
|
|
|
4C3EA67E28FFC01D00C48A62 /* InvoiceView.swift */,
|
2023-01-11 22:48:35 +00:00
|
|
|
4CB8838A296F6E1E00DC99E7 /* NIP05Badge.swift */,
|
2023-01-11 22:49:14 +00:00
|
|
|
4CB8838C296F710400DC99E7 /* Reposted.swift */,
|
2023-01-22 18:25:12 +00:00
|
|
|
4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */,
|
2023-01-23 18:38:53 +00:00
|
|
|
4CC7AAEC297F0B9E00430951 /* Highlight.swift */,
|
2023-01-24 01:45:35 +00:00
|
|
|
5C513FB9297F72980072348F /* CustomPicker.swift */,
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABE22981BC7D00D66079 /* UserView.swift */,
|
2023-01-25 21:25:55 +00:00
|
|
|
7C902AE22981D55B002AB16E /* ZoomableScrollView.swift */,
|
2023-10-23 23:32:43 +00:00
|
|
|
4CB883AF297705DD00DC99E7 /* NoteZapButton.swift */,
|
2023-02-03 17:25:07 +00:00
|
|
|
4C42812B298C848200DBF26F /* TranslateView.swift */,
|
2023-02-17 17:34:41 +00:00
|
|
|
7CFF6316299FEFE5005D382A /* SelectableText.swift */,
|
2023-03-27 16:26:30 +00:00
|
|
|
4C8EC52429D1FA6C0085D9A8 /* DamusColors.swift */,
|
2023-04-03 20:57:57 +00:00
|
|
|
4CE4F0F729DB7399005914DB /* ThiccDivider.swift */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A2229DDDB8100516EAC /* IconLabel.swift */,
|
2023-04-06 23:04:16 +00:00
|
|
|
4C8D00C929DF80350036AF10 /* TruncatedText.swift */,
|
2023-05-15 18:57:37 +00:00
|
|
|
4C28595F2A12A2BE004746F7 /* SupporterBadge.swift */,
|
2023-05-26 19:48:07 +00:00
|
|
|
5C6E1DAC2A193EC2008FC15A /* GradientButtonStyle.swift */,
|
2023-09-09 03:06:31 +00:00
|
|
|
5CC868DC2AA29B3200FB22BA /* NeutralButtonStyle.swift */,
|
2022-06-09 20:47:25 +00:00
|
|
|
);
|
|
|
|
path = Components;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEDA27F7A08100C66700 = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-05-04 01:15:52 +00:00
|
|
|
D7FB14212BE5970000398331 /* PrivacyInfo.xcprivacy */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9362A9AD44700DC3548 /* flatbuffers */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4C9054862A6AEB4500811EEC /* nostrdb */,
|
2023-07-11 01:59:50 +00:00
|
|
|
4C19AE4A2A5CEF7C00C90DB7 /* nostrscript */,
|
2023-03-22 13:24:34 +00:00
|
|
|
4C8AE1182A0320BE00B944E6 /* Purple.storekit */,
|
2022-10-17 22:20:38 +00:00
|
|
|
4C06670728FDE62900038D2A /* damus-c */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE527F7A08100C66700 /* damus */,
|
|
|
|
4CE6DEF627F7A08200C66700 /* damusTests */,
|
|
|
|
4CE6DF0027F7A08200C66700 /* damusUITests */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C152AFEB061003A41B4 /* DamusNotificationService */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE427F7A08100C66700 /* Products */,
|
2022-04-12 13:47:54 +00:00
|
|
|
4CEE2AE62804F57B00AB5EEF /* Frameworks */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
2023-04-29 18:38:28 +00:00
|
|
|
indentWidth = 4;
|
2022-04-02 23:57:42 +00:00
|
|
|
sourceTree = "<group>";
|
2023-04-29 18:38:28 +00:00
|
|
|
tabWidth = 4;
|
2022-04-02 23:57:42 +00:00
|
|
|
};
|
|
|
|
4CE6DEE427F7A08100C66700 /* Products */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE6DEE327F7A08100C66700 /* damus.app */,
|
|
|
|
4CE6DEF327F7A08200C66700 /* damusTests.xctest */,
|
|
|
|
4CE6DEFD27F7A08200C66700 /* damusUITests.xctest */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C142AFEB061003A41B4 /* DamusNotificationService.appex */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
name = Products;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4CE6DEE527F7A08100C66700 /* damus */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB32A7967990024F453 /* build-git-hash.txt */,
|
2023-07-30 17:47:53 +00:00
|
|
|
4CA3529C2A76AE47003BB08B /* Notify */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FEC2A73FC9A007AEB17 /* Types */,
|
2023-01-18 20:52:07 +00:00
|
|
|
F7F0BA23297892AE009531F3 /* Modifiers */,
|
2022-07-22 00:54:11 +00:00
|
|
|
4C4A3A5A288A1B2200453788 /* damus.entitlements */,
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9DF285287A000C00DD9 /* Components */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C7FF7D628233637009601DB /* Util */,
|
2022-04-20 02:46:30 +00:00
|
|
|
4C0A3F8D280F63FF000448DE /* Models */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFAB28049CC80006080F /* Nostr */,
|
2022-04-11 16:29:30 +00:00
|
|
|
4C75EFA72804823E0006080F /* Info.plist */,
|
2023-01-17 01:44:41 +00:00
|
|
|
3ACB685D297633BC00C46468 /* Localizable.strings */,
|
|
|
|
3ACB685A297633BC00C46468 /* InfoPlist.strings */,
|
2022-04-03 22:40:18 +00:00
|
|
|
4C75EFA227FA576C0006080F /* Views */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE627F7A08100C66700 /* damusApp.swift */,
|
|
|
|
4CE6DEE827F7A08100C66700 /* ContentView.swift */,
|
|
|
|
4CE6DEEA27F7A08200C66700 /* Assets.xcassets */,
|
|
|
|
4CE6DEEC27F7A08200C66700 /* Preview Content */,
|
2022-12-31 21:27:17 +00:00
|
|
|
3A4325AA2961E11400BFCD9D /* Localizable.stringsdict */,
|
2023-07-13 14:01:51 +00:00
|
|
|
4C687C262A6039500092C550 /* TestData.swift */,
|
2023-07-23 00:15:36 +00:00
|
|
|
4C4DD3DA2A6CA7E8005B4E85 /* ContentParsing.swift */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
path = damus;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4CE6DEEC27F7A08200C66700 /* Preview Content */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE6DEED27F7A08200C66700 /* Preview Assets.xcassets */,
|
|
|
|
);
|
|
|
|
path = "Preview Content";
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4CE6DEF627F7A08200C66700 /* damusTests */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-02-19 20:53:54 +00:00
|
|
|
E06336A72B7582D600A88E6B /* Assets */,
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D032AD9C165002AFF62 /* Mocking */,
|
2023-07-17 17:15:26 +00:00
|
|
|
4C9B0DEC2A65A74000CBDA21 /* Util */,
|
2023-07-14 20:07:39 +00:00
|
|
|
4C0C03962A61E2670098B3B8 /* Fixtures */,
|
2023-05-10 23:23:54 +00:00
|
|
|
4C7D097D2A0C58B900943473 /* WalletConnectTests.swift */,
|
2023-04-15 09:40:56 +00:00
|
|
|
F944F56C29EA9CB20067B3BF /* Models */,
|
2023-02-18 06:27:15 +00:00
|
|
|
50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */,
|
2024-01-13 19:19:44 +00:00
|
|
|
E02B54172B4DFADA0077FF42 /* Bech32ObjectTests.swift */,
|
2022-05-09 02:01:42 +00:00
|
|
|
4C363A9F2828A8DD006E126D /* LikeTests.swift */,
|
|
|
|
4C363A9D2828A822006E126D /* ReplyTests.swift */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEF727F7A08200C66700 /* damusTests.swift */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67A28FF7B3900C48A62 /* InvoiceTests.swift */,
|
2022-12-31 04:32:33 +00:00
|
|
|
3ACBCB77295FE5C70037388A /* TimeAgoTests.swift */,
|
2023-01-15 01:23:35 +00:00
|
|
|
4CB88399297322D200DC99E7 /* DMTests.swift */,
|
2023-01-25 17:53:41 +00:00
|
|
|
4CF0ABDB2981A19E00D66079 /* ListTests.swift */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883A9297612FF00DC99E7 /* ZapTests.swift */,
|
|
|
|
4CB883AD2976FA9300DC99E7 /* FormatTests.swift */,
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040EC29A5CB86008A0F29 /* ReplyDescriptionTests.swift */,
|
|
|
|
3A3040F229A91366008A0F29 /* ProfileViewTests.swift */,
|
2023-02-26 18:01:23 +00:00
|
|
|
3A30410029AB12AA008A0F29 /* EventGroupViewTests.swift */,
|
2023-04-10 05:02:55 +00:00
|
|
|
4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */,
|
2023-05-04 11:40:04 +00:00
|
|
|
501F8C812A0224EB001AFC1D /* KeychainStorageTests.swift */,
|
2023-07-01 18:42:36 +00:00
|
|
|
3A5E47C62A4A76C800C0D090 /* TrieTests.swift */,
|
|
|
|
3A90B1822A4EA3C600000D94 /* UserSearchCacheTests.swift */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C4F14A62A2A61A30045A0B9 /* NostrScriptTests.swift */,
|
2023-07-11 14:21:16 +00:00
|
|
|
4C19AE542A5D977400C90DB7 /* HashtagTests.swift */,
|
2023-07-14 04:21:08 +00:00
|
|
|
3AAC7A012A60FE72002B50DF /* LocalizationUtilTests.swift */,
|
2023-08-03 03:38:49 +00:00
|
|
|
D78525242A7B2EA4002FA637 /* NoteContentViewTests.swift */,
|
2023-08-06 01:33:01 +00:00
|
|
|
4C684A542A7E91FE005E6031 /* LongPostTests.swift */,
|
2023-08-06 16:02:18 +00:00
|
|
|
4C684A562A7FFAE6005E6031 /* UrlTests.swift */,
|
2023-08-15 21:33:47 +00:00
|
|
|
D7DEEF2E2A8C021E00E0C99F /* NostrEventTests.swift */,
|
2023-08-19 19:04:18 +00:00
|
|
|
D71DC1EB2A9129C3006E207C /* PostViewTests.swift */,
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2CFF2AD9B66B002AFF62 /* EventViewTests.swift */,
|
storage: Improve clear cache functionality
This patch improves clear cache functionality by:
- Reducing kingfisher cache removal to one command (The two commands running async was leading to warning logs. One was a subset of the other)
- Removing all files under the cache folder where not currently used by other processes
Full Functionality test
-----------------------
PASS
Device: iPhone 13 mini (Physical device)
iOS: 17.0.3
Damus: This commit
Special remarks:
- I had to locally delete other unit tests to be able to build the test target
- Unit test run on an earlier version of the patch. Test coverage should still apply since this newer patch is a subset of the previous.
Setup: Run Damus with debugger connection to Xcode
Test steps:
1. Follow multiple active accounts (Skip if local Damus is already filled up with GBs of data)
2. Scroll down on the feed for a couple of minutes (or until you have seen at least a few images, a few videos, and link previews) (Skip if local Damus is filled up with GBs of data)
3. In Xcode, download a storage container (Window > Devices and Simulators > Select the device > Select Damus > click on (...) > Download container)
- Note: Even though you see the file, it does not download instantly. Monitor the file size until it roughly reaches the size reported in iOS storage settings, as the download may still be in progress. This may take a few minutes in some cases.
- Also take note of storage usage in iOS settings
4. Open the app data package using terminal
5. Run `du -h . | sort -hr`
6. Clear cache and check logs. Logs should indicate the caches being cleared, and there should be no storage-related warning/error logs. PASS
7. Download a new storage container. Remember to wait until it completes download.
8. Run `du -h . | sort -hr` on it.
9. Compare. There should be much less data. Also check iOS settings storage usage. PASS
10. Go back to the home feed and start scrolling, browsing, follow some other people, etc. Look at your own profile as well. Everything should appear to be working as expected with no crashes or important data loss
11. Check bookmarks are still present. PASS
12. Run `DamusCacheManagerTests`. Should pass. PASS* (*See special remarks)
Results:
- Storage usage goes from 3.9GB to 394.7MB
- Damus works as normal after clearing cache, and after restarting the app as well. It becomes slower for a moment, but after a bit it loads as normal again.
- No warning or error logs pertaining to clearing cache
- Unit test passes
My storage container disk usage stats after clearing cache:
```
% du -h | sort -hr
359M ./AppData
359M .
336M ./AppData/Documents
23M ./AppData/Library
20M ./AppData/Library/Caches
7.9M ./AppData/Library/Caches/com.jb55.damus2
2.4M ./AppData/Library/SplashBoard/Snapshots
2.4M ./AppData/Library/SplashBoard
1.8M ./AppData/Library/SplashBoard/Snapshots/com.jb55.damus2 - {DEFAULT GROUP}
1.6M ./AppData/Library/Caches/com.jb55.damus2/fsCachedData
636K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36
596K ./AppData/Library/Caches/com.apple.WebKit.GPU/com.apple.metal
596K ./AppData/Library/Caches/com.apple.WebKit.GPU
452K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal
296K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36/downscaled
224K ./AppData/Library/HTTPStorages/com.jb55.damus2
224K ./AppData/Library/HTTPStorages
164K ./AppData/Library/Caches/com.onevcat.Kingfisher.ImageCache.default
156K ./AppData/Library/Caches/RelayLogs
112K ./AppData/Library/Caches/com.apple.dyld
92K ./AppData/Library/Preferences
60K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal/archiveUsage.db
12K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState
12K ./AppData/Library/Saved Application State
8.0K ./AppData/StoreKit
8.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/ecc156b1-eb9c-4439-b219-e1eebf2b4c36
4.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/KnownSceneSessions
4.0K ./AppData/Library/LanguageModeling/en-dynamic.lm
4.0K ./AppData/Library/LanguageModeling
4.0K ./AppData/Library/Cookies
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit/WebsiteData
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit
0B ./AppData/SystemData/com.apple.SafariViewService/Library
0B ./AppData/SystemData/com.apple.SafariViewService
```
Biggest storage used remaining is in the Documents folder where NostrDB is stored. However, we do not want to clear NostrDB, so this is expected behavior.
Changelog-Changed: Improve clear cache functionality
Closes: https://github.com/damus-io/damus/issues/1472
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 17:44:00 +00:00
|
|
|
D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B501062C2B363036003874F5 /* AuthIntegrationTests.swift */,
|
2024-02-14 03:20:18 +00:00
|
|
|
E0E024102B7C19C20075735D /* TranslationTests.swift */,
|
2024-02-19 20:53:54 +00:00
|
|
|
E06336A92B75832100A88E6B /* ImageMetadataTest.swift */,
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D7CBD1D52B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift */,
|
2024-03-22 16:55:35 +00:00
|
|
|
D72927AC2BAB515C00F93E90 /* RelayURLTests.swift */,
|
2024-04-25 21:03:34 +00:00
|
|
|
4C2D34402BDAF1B300F9FB44 /* NIP10Tests.swift */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
path = damusTests;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
4CE6DF0027F7A08200C66700 /* damusUITests */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE6DF0127F7A08200C66700 /* damusUITests.swift */,
|
|
|
|
4CE6DF0327F7A08200C66700 /* damusUITestsLaunchTests.swift */,
|
|
|
|
);
|
|
|
|
path = damusUITests;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-09 23:56:26 +00:00
|
|
|
4CE879492995B58700F758CC /* Relays */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE8794729941DA700F758CC /* RelayFilters.swift */,
|
2023-07-09 13:45:37 +00:00
|
|
|
504323A82A3495B6006AE6DC /* RelayModelCache.swift */,
|
2023-04-04 17:12:29 +00:00
|
|
|
4CC6193929DC777C006A86D1 /* RelayBootstrap.swift */,
|
2023-07-09 13:45:37 +00:00
|
|
|
504323A62A34915F006AE6DC /* RelayModel.swift */,
|
2023-02-09 23:56:26 +00:00
|
|
|
);
|
|
|
|
path = Relays;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-10 18:01:17 +00:00
|
|
|
4CE879532996BA0000F758CC /* Detail */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE879542996BAB900F758CC /* RelayPaidDetail.swift */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C632B312BFA00A232C0 /* RelayAuthenticationDetail.swift */,
|
2024-04-04 02:03:46 +00:00
|
|
|
5C14C29A2BBBA29C00079FD2 /* RelaySoftwareDetail.swift */,
|
|
|
|
5C14C29C2BBBA40B00079FD2 /* RelayAdminDetail.swift */,
|
|
|
|
5C14C29E2BBBA5C600079FD2 /* RelayNipList.swift */,
|
2023-02-10 18:01:17 +00:00
|
|
|
);
|
|
|
|
path = Detail;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-02-10 18:50:49 +00:00
|
|
|
4CE879562996C44A00F758CC /* Zaps */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CE879572996C45300F758CC /* ZapsView.swift */,
|
2023-02-25 20:10:37 +00:00
|
|
|
4C9F18E129AA9B6C008C55EC /* CustomizeZapView.swift */,
|
2023-04-23 16:54:38 +00:00
|
|
|
4CA3FA0F29F593D000FDB3C3 /* ZapTypePicker.swift */,
|
2023-06-22 08:15:28 +00:00
|
|
|
4C73C5132A4437C10062CAC0 /* ZapUserView.swift */,
|
2023-10-23 23:32:43 +00:00
|
|
|
D76874F22AE3632B00FB0F68 /* ProfileZapLinkView.swift */,
|
2023-02-10 18:50:49 +00:00
|
|
|
);
|
|
|
|
path = Zaps;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-21 23:01:28 +00:00
|
|
|
4CE9FBBB2A6B3D9C007E485C /* Test */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4C9054842A6AEAA000811EEC /* NdbTests.swift */,
|
|
|
|
);
|
|
|
|
path = Test;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-04-12 13:47:54 +00:00
|
|
|
4CEE2AE62804F57B00AB5EEF /* Frameworks */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CEE2AE72804F57C00AB5EEF /* libsecp256k1.a */,
|
|
|
|
);
|
|
|
|
name = Frameworks;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABDF2981A83000D66079 /* Muting */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-01-18 01:17:37 +00:00
|
|
|
B51C1CE82B55A60A00E312A9 /* AddMuteItemView.swift */,
|
|
|
|
B51C1CE92B55A60A00E312A9 /* MuteDurationMenu.swift */,
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABE02981A83900D66079 /* MutelistView.swift */,
|
|
|
|
);
|
|
|
|
path = Muting;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABEA29844B2F00D66079 /* AnyCodable */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CF0ABE829844AF100D66079 /* AnyCodable.swift */,
|
|
|
|
4CF0ABEB29844B4700D66079 /* AnyDecodable.swift */,
|
|
|
|
4CF0ABED29844B5500D66079 /* AnyEncodable.swift */,
|
|
|
|
);
|
|
|
|
path = AnyCodable;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-22 18:56:14 +00:00
|
|
|
4CF0ABF42985CD4200D66079 /* Posting */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CF0ABF52985CD5500D66079 /* UserSearch.swift */,
|
|
|
|
);
|
|
|
|
path = Posting;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-03-22 13:24:34 +00:00
|
|
|
4CFF8F5729C9FD07008DB934 /* Purple */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-02-14 21:31:43 +00:00
|
|
|
D7100C542B76F8C200C59298 /* Detail */,
|
2023-03-22 13:24:34 +00:00
|
|
|
4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */,
|
|
|
|
D76556D52B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift */,
|
2024-01-30 07:42:04 +00:00
|
|
|
D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */,
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3DF2B538D4200F104C4 /* DamusPurpleURLSheetView.swift */,
|
|
|
|
D7ADD3E12B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift */,
|
2024-01-30 07:41:49 +00:00
|
|
|
D724D8262B64B40B00ABE789 /* DamusPurpleAccountView.swift */,
|
2024-01-30 07:42:04 +00:00
|
|
|
D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */,
|
2023-03-22 13:24:34 +00:00
|
|
|
);
|
|
|
|
path = Purple;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6129CC9A80008DB934 /* Images */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */,
|
2024-03-18 22:21:21 +00:00
|
|
|
4CFF8F6629CC9E3A008DB934 /* FullScreenCarouselView.swift */,
|
2023-03-29 22:57:50 +00:00
|
|
|
6439E013296790CF0020672B /* ProfilePicImageView.swift */,
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6829CC9ED1008DB934 /* ImageContainerView.swift */,
|
2023-06-04 22:42:32 +00:00
|
|
|
4CFD502E2A2DA45800A229DB /* MediaView.swift */,
|
2023-03-23 14:54:25 +00:00
|
|
|
);
|
|
|
|
path = Images;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-03-06 02:04:50 +00:00
|
|
|
7C0F392D29B57C8F0039859C /* Extensions */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
7C95CAED299DCEF1009DCB67 /* KFOptionSetter+.swift */,
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09752A0AF19E00943473 /* FillAndStroke.swift */,
|
2023-03-06 02:04:50 +00:00
|
|
|
);
|
|
|
|
path = Extensions;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-09-19 20:24:11 +00:00
|
|
|
BA3759882ABCCDE30018D73B /* Camera */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-09-19 20:33:41 +00:00
|
|
|
BA3759902ABCCEBA0018D73B /* CameraModel.swift */,
|
|
|
|
BA3759912ABCCEBA0018D73B /* CameraService.swift */,
|
|
|
|
BA37598F2ABCCEBA0018D73B /* CameraService+Extensions.swift */,
|
2023-09-19 20:24:11 +00:00
|
|
|
BA3759892ABCCDE30018D73B /* ImageResizer.swift */,
|
2023-09-19 20:29:40 +00:00
|
|
|
BA37598B2ABCCE500018D73B /* PhotoCaptureProcessor.swift */,
|
|
|
|
BA37598C2ABCCE500018D73B /* VideoCaptureProcessor.swift */,
|
2023-09-19 20:24:11 +00:00
|
|
|
);
|
|
|
|
path = Camera;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-09-19 20:35:52 +00:00
|
|
|
BA3759952ABCCF360018D73B /* Camera */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-01-25 22:11:11 +00:00
|
|
|
BA3759962ABCCF360018D73B /* CameraPreview.swift */,
|
2024-02-19 20:53:55 +00:00
|
|
|
E02429942B7E97740088B16C /* CameraController.swift */,
|
2023-09-19 20:35:52 +00:00
|
|
|
);
|
|
|
|
path = Camera;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2024-02-14 21:31:43 +00:00
|
|
|
D7100C542B76F8C200C59298 /* Detail */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
D7100C552B76F8E600C59298 /* PurpleViewPrimitives.swift */,
|
2024-02-14 21:31:50 +00:00
|
|
|
D7100C572B76FC8400C59298 /* MarketingContentView.swift */,
|
|
|
|
D7100C592B76FD5100C59298 /* LogoView.swift */,
|
|
|
|
D7100C5B2B77016700C59298 /* IAPProductStateView.swift */,
|
2024-03-04 14:03:53 +00:00
|
|
|
4C463CBE2B960B96008A8C36 /* PurpleBackdrop.swift */,
|
2024-02-14 21:31:43 +00:00
|
|
|
);
|
|
|
|
path = Detail;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2024-03-18 22:21:43 +00:00
|
|
|
D71AC4CA2BA8E3320076268E /* Extensions */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
D71AC4CB2BA8E3480076268E /* VisibilityTracker.swift */,
|
|
|
|
);
|
|
|
|
path = Extensions;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D032AD9C165002AFF62 /* Mocking */ = {
|
2023-10-08 00:00:25 +00:00
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D042AD9C1B5002AFF62 /* MockDamusState.swift */,
|
|
|
|
D72A2D062AD9C1FB002AFF62 /* MockProfiles.swift */,
|
2023-10-08 00:00:25 +00:00
|
|
|
);
|
2023-10-13 19:28:41 +00:00
|
|
|
path = Mocking;
|
2023-10-08 00:00:25 +00:00
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-03-22 13:24:34 +00:00
|
|
|
D74F43082B23F09300425B75 /* Purple */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D7CBD1D22B8D21C100BFD889 /* Extensions */,
|
2023-03-22 13:24:34 +00:00
|
|
|
D74F43092B23F0BE00425B75 /* DamusPurple.swift */,
|
|
|
|
D74F430B2B23FB9B00425B75 /* StoreObserver.swift */,
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3DD2B53854300F104C4 /* DamusPurpleURL.swift */,
|
2024-01-30 07:41:38 +00:00
|
|
|
D72341182B6864F200E1E135 /* DamusPurpleEnvironment.swift */,
|
2024-02-14 21:31:59 +00:00
|
|
|
D7100C5D2B7709ED00C59298 /* PurpleStoreKitManager.swift */,
|
2023-03-22 13:24:34 +00:00
|
|
|
);
|
|
|
|
path = Purple;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C152AFEB061003A41B4 /* DamusNotificationService */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
D79C4C1C2AFEB061003A41B4 /* DamusNotificationService.entitlements */,
|
|
|
|
D79C4C162AFEB061003A41B4 /* NotificationService.swift */,
|
|
|
|
D79C4C182AFEB061003A41B4 /* Info.plist */,
|
|
|
|
D70A3B162B02DCE5008BD568 /* NotificationFormatter.swift */,
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */,
|
2024-05-04 01:15:52 +00:00
|
|
|
D7FB14242BE5A9A800398331 /* PrivacyInfo.xcprivacy */,
|
2023-11-14 07:21:39 +00:00
|
|
|
);
|
|
|
|
path = DamusNotificationService;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2024-03-16 12:20:59 +00:00
|
|
|
D7CBD1D22B8D21C100BFD889 /* Extensions */ = {
|
2024-02-19 20:53:54 +00:00
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-03-16 12:20:59 +00:00
|
|
|
D7CBD1D32B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift */,
|
2024-02-19 20:53:54 +00:00
|
|
|
);
|
2024-03-16 12:20:59 +00:00
|
|
|
path = Extensions;
|
2024-02-19 20:53:54 +00:00
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2024-03-16 12:20:59 +00:00
|
|
|
E06336A72B7582D600A88E6B /* Assets */ = {
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2024-03-16 12:20:59 +00:00
|
|
|
E06336A82B7582E000A88E6B /* img_with_location.jpeg */,
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
);
|
2024-03-16 12:20:59 +00:00
|
|
|
path = Assets;
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694E82A66221E001F4053 /* Onboarding */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
2023-10-20 18:15:58 +00:00
|
|
|
F71694E92A662232001F4053 /* OnboardingSuggestionsView.swift */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694F12A67314D001F4053 /* SuggestedUserView.swift */,
|
|
|
|
F71694EB2A662292001F4053 /* SuggestedUsersViewModel.swift */,
|
|
|
|
F71694ED2A6624F9001F4053 /* suggested_users.json */,
|
|
|
|
);
|
|
|
|
path = Onboarding;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-18 20:52:07 +00:00
|
|
|
F7F0BA23297892AE009531F3 /* Modifiers */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
F7F0BA24297892BD009531F3 /* SwipeToDismiss.swift */,
|
|
|
|
);
|
|
|
|
path = Modifiers;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-04-15 09:40:56 +00:00
|
|
|
F944F56C29EA9CB20067B3BF /* Models */ = {
|
|
|
|
isa = PBXGroup;
|
|
|
|
children = (
|
|
|
|
F944F56D29EA9CCC0067B3BF /* DamusParseContentTests.swift */,
|
2023-09-01 15:32:01 +00:00
|
|
|
75AD872A2AA23A460085EF2C /* Block+Tests.swift */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5A75C292B546D94007AFBC0 /* MuteItemTests.swift */,
|
2023-04-15 09:40:56 +00:00
|
|
|
);
|
|
|
|
path = Models;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXGroup section */
|
|
|
|
|
|
|
|
/* Begin PBXNativeTarget section */
|
|
|
|
4CE6DEE227F7A08100C66700 /* damus */ = {
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
buildConfigurationList = 4CE6DF0727F7A08200C66700 /* Build configuration list for PBXNativeTarget "damus" */;
|
|
|
|
buildPhases = (
|
|
|
|
4CE6DEDF27F7A08100C66700 /* Sources */,
|
|
|
|
4CE6DEE027F7A08100C66700 /* Frameworks */,
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB22A7965230024F453 /* ShellScript */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE127F7A08100C66700 /* Resources */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C1D2AFEB061003A41B4 /* Embed Foundation Extensions */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
buildRules = (
|
|
|
|
);
|
|
|
|
dependencies = (
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C1A2AFEB061003A41B4 /* PBXTargetDependency */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
name = damus;
|
|
|
|
packageProductDependencies = (
|
2022-06-30 14:16:48 +00:00
|
|
|
4C649880286E0EE300EAE2B3 /* secp256k1 */,
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670328FC7EC500038D2A /* Kingfisher */,
|
2023-07-16 21:35:06 +00:00
|
|
|
4C27C9312A64766F007DBC75 /* MarkdownUI */,
|
2024-04-20 18:27:24 +00:00
|
|
|
3AFE89C22BD4156F00AD31EF /* MCEmojiPicker */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
productName = damus;
|
|
|
|
productReference = 4CE6DEE327F7A08100C66700 /* damus.app */;
|
|
|
|
productType = "com.apple.product-type.application";
|
|
|
|
};
|
|
|
|
4CE6DEF227F7A08200C66700 /* damusTests */ = {
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
buildConfigurationList = 4CE6DF0A27F7A08200C66700 /* Build configuration list for PBXNativeTarget "damusTests" */;
|
|
|
|
buildPhases = (
|
|
|
|
4CE6DEEF27F7A08200C66700 /* Sources */,
|
|
|
|
4CE6DEF027F7A08200C66700 /* Frameworks */,
|
|
|
|
4CE6DEF127F7A08200C66700 /* Resources */,
|
|
|
|
);
|
|
|
|
buildRules = (
|
|
|
|
);
|
|
|
|
dependencies = (
|
|
|
|
4CE6DEF527F7A08200C66700 /* PBXTargetDependency */,
|
|
|
|
);
|
|
|
|
name = damusTests;
|
2023-10-07 01:21:53 +00:00
|
|
|
packageProductDependencies = (
|
|
|
|
D7A343ED2AD0D77C00CED48B /* InlineSnapshotTesting */,
|
|
|
|
D7A343EF2AD0D77C00CED48B /* SnapshotTesting */,
|
|
|
|
);
|
2022-04-02 23:57:42 +00:00
|
|
|
productName = damusTests;
|
|
|
|
productReference = 4CE6DEF327F7A08200C66700 /* damusTests.xctest */;
|
|
|
|
productType = "com.apple.product-type.bundle.unit-test";
|
|
|
|
};
|
|
|
|
4CE6DEFC27F7A08200C66700 /* damusUITests */ = {
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
buildConfigurationList = 4CE6DF0D27F7A08200C66700 /* Build configuration list for PBXNativeTarget "damusUITests" */;
|
|
|
|
buildPhases = (
|
|
|
|
4CE6DEF927F7A08200C66700 /* Sources */,
|
|
|
|
4CE6DEFA27F7A08200C66700 /* Frameworks */,
|
|
|
|
4CE6DEFB27F7A08200C66700 /* Resources */,
|
|
|
|
);
|
|
|
|
buildRules = (
|
|
|
|
);
|
|
|
|
dependencies = (
|
|
|
|
4CE6DEFF27F7A08200C66700 /* PBXTargetDependency */,
|
|
|
|
);
|
|
|
|
name = damusUITests;
|
|
|
|
productName = damusUITests;
|
|
|
|
productReference = 4CE6DEFD27F7A08200C66700 /* damusUITests.xctest */;
|
|
|
|
productType = "com.apple.product-type.bundle.ui-testing";
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C132AFEB061003A41B4 /* DamusNotificationService */ = {
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
buildConfigurationList = D79C4C202AFEB061003A41B4 /* Build configuration list for PBXNativeTarget "DamusNotificationService" */;
|
|
|
|
buildPhases = (
|
|
|
|
D79C4C102AFEB061003A41B4 /* Sources */,
|
|
|
|
D79C4C112AFEB061003A41B4 /* Frameworks */,
|
|
|
|
D79C4C122AFEB061003A41B4 /* Resources */,
|
|
|
|
);
|
|
|
|
buildRules = (
|
|
|
|
);
|
|
|
|
dependencies = (
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED252B117F7C0018B19C /* PBXTargetDependency */,
|
2023-11-14 07:21:39 +00:00
|
|
|
);
|
|
|
|
name = DamusNotificationService;
|
|
|
|
packageProductDependencies = (
|
|
|
|
D789D11F2AFEFBF20083A7AB /* secp256k1 */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED302B1290B80018B19C /* MarkdownUI */,
|
2023-11-14 07:21:39 +00:00
|
|
|
);
|
|
|
|
productName = DamusNotificationService;
|
|
|
|
productReference = D79C4C142AFEB061003A41B4 /* DamusNotificationService.appex */;
|
|
|
|
productType = "com.apple.product-type.app-extension";
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXNativeTarget section */
|
|
|
|
|
|
|
|
/* Begin PBXProject section */
|
|
|
|
4CE6DEDB27F7A08100C66700 /* Project object */ = {
|
|
|
|
isa = PBXProject;
|
|
|
|
attributes = {
|
|
|
|
BuildIndependentTargetsInParallel = 1;
|
2023-11-14 07:21:39 +00:00
|
|
|
LastSwiftUpdateCheck = 1500;
|
2024-01-24 17:39:42 +00:00
|
|
|
LastUpgradeCheck = 1520;
|
2022-04-02 23:57:42 +00:00
|
|
|
TargetAttributes = {
|
|
|
|
4CE6DEE227F7A08100C66700 = {
|
|
|
|
CreatedOnToolsVersion = 13.3;
|
2022-10-17 22:20:38 +00:00
|
|
|
LastSwiftMigration = 1400;
|
2022-04-02 23:57:42 +00:00
|
|
|
};
|
|
|
|
4CE6DEF227F7A08200C66700 = {
|
|
|
|
CreatedOnToolsVersion = 13.3;
|
|
|
|
TestTargetID = 4CE6DEE227F7A08100C66700;
|
|
|
|
};
|
|
|
|
4CE6DEFC27F7A08200C66700 = {
|
|
|
|
CreatedOnToolsVersion = 13.3;
|
|
|
|
TestTargetID = 4CE6DEE227F7A08100C66700;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C132AFEB061003A41B4 = {
|
|
|
|
CreatedOnToolsVersion = 15.0.1;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
buildConfigurationList = 4CE6DEDE27F7A08100C66700 /* Build configuration list for PBXProject "damus" */;
|
|
|
|
compatibilityVersion = "Xcode 13.0";
|
2023-01-08 05:24:35 +00:00
|
|
|
developmentRegion = "en-US";
|
2022-04-02 23:57:42 +00:00
|
|
|
hasScannedForEncodings = 0;
|
|
|
|
knownRegions = (
|
|
|
|
Base,
|
2023-03-21 12:53:57 +00:00
|
|
|
ar,
|
|
|
|
bg,
|
|
|
|
cs,
|
|
|
|
de,
|
|
|
|
"el-GR",
|
2023-01-08 05:24:35 +00:00
|
|
|
"en-US",
|
2023-03-21 12:53:57 +00:00
|
|
|
"es-419",
|
|
|
|
"es-ES",
|
|
|
|
fa,
|
2024-04-25 03:30:28 +00:00
|
|
|
fi,
|
2023-04-13 11:09:15 +00:00
|
|
|
fr,
|
2023-03-21 12:53:57 +00:00
|
|
|
"hu-HU",
|
|
|
|
id,
|
2023-01-23 21:00:57 +00:00
|
|
|
"it-IT",
|
2023-02-09 00:17:24 +00:00
|
|
|
ja,
|
2023-03-21 12:53:57 +00:00
|
|
|
ko,
|
|
|
|
"lv-LV",
|
|
|
|
nl,
|
|
|
|
"pl-PL",
|
|
|
|
"pt-BR",
|
|
|
|
"pt-PT",
|
2023-02-17 05:47:14 +00:00
|
|
|
ru,
|
2023-03-21 12:53:57 +00:00
|
|
|
"sv-SE",
|
2023-07-09 19:18:50 +00:00
|
|
|
sw,
|
2024-05-04 01:02:47 +00:00
|
|
|
th,
|
2023-03-21 12:53:57 +00:00
|
|
|
"tr-TR",
|
|
|
|
uk,
|
|
|
|
vi,
|
|
|
|
"zh-CN",
|
2023-02-24 17:26:43 +00:00
|
|
|
"zh-HK",
|
|
|
|
"zh-TW",
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
mainGroup = 4CE6DEDA27F7A08100C66700;
|
|
|
|
packageReferences = (
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */,
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670228FC7EC500038D2A /* XCRemoteSwiftPackageReference "Kingfisher" */,
|
2023-05-26 17:00:29 +00:00
|
|
|
4CCF9AB02A1FE80B00E03CFB /* XCRemoteSwiftPackageReference "GSPlayer" */,
|
2023-07-16 21:35:06 +00:00
|
|
|
4C27C9302A64766F007DBC75 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */,
|
2023-10-07 01:21:53 +00:00
|
|
|
D7A343EC2AD0D77C00CED48B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */,
|
2024-04-20 18:27:24 +00:00
|
|
|
3AFE89C12BD4156F00AD31EF /* XCRemoteSwiftPackageReference "MCEmojiPicker" */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
productRefGroup = 4CE6DEE427F7A08100C66700 /* Products */;
|
|
|
|
projectDirPath = "";
|
|
|
|
projectRoot = "";
|
|
|
|
targets = (
|
|
|
|
4CE6DEE227F7A08100C66700 /* damus */,
|
|
|
|
4CE6DEF227F7A08200C66700 /* damusTests */,
|
|
|
|
4CE6DEFC27F7A08200C66700 /* damusUITests */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C132AFEB061003A41B4 /* DamusNotificationService */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
};
|
|
|
|
/* End PBXProject section */
|
|
|
|
|
|
|
|
/* Begin PBXResourcesBuildPhase section */
|
|
|
|
4CE6DEE127F7A08100C66700 /* Resources */ = {
|
|
|
|
isa = PBXResourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB42A7967990024F453 /* build-git-hash.txt in Resources */,
|
2024-05-04 01:15:52 +00:00
|
|
|
D7FB14222BE5970000398331 /* PrivacyInfo.xcprivacy in Resources */,
|
2023-01-17 01:44:41 +00:00
|
|
|
3ACB685F297633BC00C46468 /* Localizable.strings in Resources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEEE27F7A08200C66700 /* Preview Assets.xcassets in Resources */,
|
2023-01-17 01:44:41 +00:00
|
|
|
3ACB685C297633BC00C46468 /* InfoPlist.strings in Resources */,
|
2023-05-20 17:38:06 +00:00
|
|
|
50DA11262A16A23F00236234 /* Launch.storyboard in Resources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEEB27F7A08200C66700 /* Assets.xcassets in Resources */,
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DF129F88C6B004C165C /* License.txt in Resources */,
|
|
|
|
4C198DF029F88C6B004C165C /* Readme.md in Resources */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694EE2A6624F9001F4053 /* suggested_users.json in Resources */,
|
2022-12-31 21:27:17 +00:00
|
|
|
3A4325A82961E11400BFCD9D /* Localizable.stringsdict in Resources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
4CE6DEF127F7A08200C66700 /* Resources */ = {
|
|
|
|
isa = PBXResourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2024-02-19 20:53:54 +00:00
|
|
|
E06336AB2B75850100A88E6B /* img_with_location.jpeg in Resources */,
|
2023-07-14 20:07:39 +00:00
|
|
|
4C0C039A2A61E27B0098B3B8 /* bool_setting.wasm in Resources */,
|
|
|
|
4C0C03992A61E27B0098B3B8 /* primal.wasm in Resources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
4CE6DEFB27F7A08200C66700 /* Resources */ = {
|
|
|
|
isa = PBXResourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C122AFEB061003A41B4 /* Resources */ = {
|
|
|
|
isa = PBXResourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2024-05-04 01:15:52 +00:00
|
|
|
D7FB14252BE5A9A800398331 /* PrivacyInfo.xcprivacy in Resources */,
|
2023-11-14 07:21:39 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXResourcesBuildPhase section */
|
|
|
|
|
2023-08-01 15:27:47 +00:00
|
|
|
/* Begin PBXShellScriptBuildPhase section */
|
|
|
|
4C1D4FB22A7965230024F453 /* ShellScript */ = {
|
|
|
|
isa = PBXShellScriptBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
|
|
|
);
|
|
|
|
inputFileListPaths = (
|
|
|
|
);
|
|
|
|
inputPaths = (
|
|
|
|
);
|
|
|
|
outputFileListPaths = (
|
|
|
|
);
|
|
|
|
outputPaths = (
|
2023-08-06 14:54:04 +00:00
|
|
|
"$(SRCROOT)/build-git-hash.txt",
|
2023-08-01 15:27:47 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
shellPath = /bin/sh;
|
|
|
|
shellScript = "git rev-parse --short HEAD > \"${SRCROOT}/build-git-hash.txt\"\n";
|
|
|
|
};
|
|
|
|
/* End PBXShellScriptBuildPhase section */
|
|
|
|
|
2022-04-02 23:57:42 +00:00
|
|
|
/* Begin PBXSourcesBuildPhase section */
|
|
|
|
4CE6DEDF27F7A08100C66700 /* Sources */ = {
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2023-09-10 17:16:50 +00:00
|
|
|
4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */,
|
2023-08-28 14:52:59 +00:00
|
|
|
4CEF958D2A9CE650000F901B /* verifier.c in Sources */,
|
2023-08-27 03:45:59 +00:00
|
|
|
4C32B9342A9AD01A00DC3548 /* NdbProfile.swift in Sources */,
|
2023-08-26 01:13:42 +00:00
|
|
|
4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */,
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3E22B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift in Sources */,
|
2023-08-25 19:32:30 +00:00
|
|
|
4C4793082A993E8900489948 /* refmap.c in Sources */,
|
|
|
|
4C4793072A993E6200489948 /* emitter.c in Sources */,
|
|
|
|
4C4793062A993E5300489948 /* json_parser.c in Sources */,
|
|
|
|
4C4793052A993E3200489948 /* builder.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D5F2B11770C00AD4105 /* FollowState.swift in Sources */,
|
2023-08-25 19:32:30 +00:00
|
|
|
4C4793042A993DC000489948 /* midl.c in Sources */,
|
2023-10-21 17:25:21 +00:00
|
|
|
0E8A4BB72AE4359200065E81 /* NostrFilter+Hashable.swift in Sources */,
|
2023-08-25 19:32:30 +00:00
|
|
|
4C4793012A993CDA00489948 /* mdb.c in Sources */,
|
2023-07-21 22:14:07 +00:00
|
|
|
4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */,
|
2023-10-11 12:17:28 +00:00
|
|
|
ADFE73552AD4793100EC7326 /* QRScanNSECView.swift in Sources */,
|
2022-05-16 23:23:34 +00:00
|
|
|
4C3AC79D2833036D00E1F516 /* FollowingView.swift in Sources */,
|
2023-03-09 03:49:49 +00:00
|
|
|
5CF72FC229B9142F00124A13 /* ShareAction.swift in Sources */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C232B532A8700C5ECA7 /* DamusDuration.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9522A9AD44700DC3548 /* Message.swift in Sources */,
|
2023-04-20 21:30:27 +00:00
|
|
|
4C8D1A6C29F1DFC200ACDF75 /* FriendIcon.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7829A577AB00E2BD5A /* EventCache.swift in Sources */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8428385690008A31F1 /* CreateAccountView.swift in Sources */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4CDD1AE22A6B3074001CD4DF /* NdbTagsIterator.swift in Sources */,
|
2024-03-10 22:37:13 +00:00
|
|
|
5C7389B72B9E692E00781E0A /* MutinyButton.swift in Sources */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C216F34286F5ACD00040376 /* DMView.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D512B1174D100AD4105 /* FriendFilter.swift in Sources */,
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D7CBD1D42B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9572A9AD44700DC3548 /* Root.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA64428FF558100C48A62 /* sha256.c in Sources */,
|
2023-07-09 13:45:37 +00:00
|
|
|
504323A72A34915F006AE6DC /* RelayModel.swift in Sources */,
|
2023-01-22 18:56:14 +00:00
|
|
|
4CF0ABF62985CD5500D66079 /* UserSearch.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9542A9AD44700DC3548 /* FlatBuffersUtils.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED1C2B1178FE0018B19C /* NoteContent.swift in Sources */,
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA828297703006E126D /* InsertSort.swift in Sources */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C86283892E7008A31F1 /* CreateAccountModel.swift in Sources */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987C286D03E000EAE2B3 /* DirectMessagesView.swift in Sources */,
|
2023-01-25 21:25:55 +00:00
|
|
|
7C902AE32981D55B002AB16E /* ZoomableScrollView.swift in Sources */,
|
2023-07-04 18:42:16 +00:00
|
|
|
4C190F252A547D2000027FD5 /* LoadScript.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C59B98C2A76C2550032FFEB /* ProfileUpdatedNotify.swift in Sources */,
|
2022-05-05 04:33:08 +00:00
|
|
|
4C363A8C28236B92006E126D /* PubkeyView.swift in Sources */,
|
2023-04-14 18:45:10 +00:00
|
|
|
4CDA128A29E9D10C0006FA5A /* SignalView.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C12535C2A76CA540004F4B8 /* LoginNotify.swift in Sources */,
|
2022-06-07 02:26:44 +00:00
|
|
|
4C5C7E68284ED36500A22DF5 /* SearchHomeModel.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0C29A5543C003E4487 /* ZapGroup.swift in Sources */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C190F202A535FC200027FD5 /* CustomizeZapModel.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D22C2B086C7400234419 /* NostrEvent+.swift in Sources */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFB728049D990006080F /* RelayPool.swift in Sources */,
|
2024-02-19 20:53:57 +00:00
|
|
|
F757933A29D7AECD007DEAC1 /* MediaPicker.swift in Sources */,
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABEE29844B5500D66079 /* AnyEncodable.swift in Sources */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C662B312C3700A232C0 /* NostrAuth.swift in Sources */,
|
2023-01-11 22:49:14 +00:00
|
|
|
4CB8838D296F710400DC99E7 /* Reposted.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67728FF7A9800C48A62 /* talstr.c in Sources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE927F7A08100C66700 /* ContentView.swift in Sources */,
|
2022-04-16 16:53:34 +00:00
|
|
|
4CEE2AF5280B29E600AB5EEF /* TimeAgo.swift in Sources */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FF12A73FCDB007AEB17 /* Pubkey.swift in Sources */,
|
2023-06-01 18:53:59 +00:00
|
|
|
4CA9275D2A28FF630098A105 /* LongformView.swift in Sources */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFAD28049CFB0006080F /* PostButton.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED1E2B11797D0018B19C /* LongformEvent.swift in Sources */,
|
2023-07-09 13:45:37 +00:00
|
|
|
504323A92A3495B6006AE6DC /* RelayModelCache.swift in Sources */,
|
2023-06-04 21:49:37 +00:00
|
|
|
3A8CC6CC2A2CFEF900940F5F /* StringUtil.swift in Sources */,
|
2024-04-22 23:09:37 +00:00
|
|
|
D7FD12262BD345A700CF195B /* FirstAidSettingsView.swift in Sources */,
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
D7870BC12AC4750B0080BA88 /* MentionView.swift in Sources */,
|
2022-12-30 00:55:36 +00:00
|
|
|
4CB55EF5295E679D007FD187 /* UserRelaysView.swift in Sources */,
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA228296A7E006E126D /* SearchView.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D2282B085CDA00234419 /* NdbNote+.swift in Sources */,
|
2023-01-23 18:38:53 +00:00
|
|
|
4CC7AAED297F0B9E00430951 /* Highlight.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253662A76D0FF0004F4B8 /* OnlyZapsNotify.swift in Sources */,
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927652A290F1A0098A105 /* TimeDot.swift in Sources */,
|
2023-07-23 18:55:36 +00:00
|
|
|
4C28A4122A6D03D200C1A7A5 /* ReferencedId.swift in Sources */,
|
2023-04-04 17:12:29 +00:00
|
|
|
4CC6193A29DC777C006A86D1 /* RelayBootstrap.swift in Sources */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8A2838B985008A31F1 /* ProfilePictureSelector.swift in Sources */,
|
2023-06-04 22:42:32 +00:00
|
|
|
4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */,
|
2024-01-30 07:42:04 +00:00
|
|
|
D7373BA62B688EA300F7783D /* DamusPurpleTranslationSetupView.swift in Sources */,
|
2023-02-25 20:10:37 +00:00
|
|
|
4C9F18E429ABDE6D008C55EC /* MaybeAnonPfpView.swift in Sources */,
|
2023-04-21 23:21:01 +00:00
|
|
|
4CA5588329F33F5B00DC6A45 /* StringCodable.swift in Sources */,
|
2022-04-11 17:53:43 +00:00
|
|
|
4C75EFB92804A2740006080F /* EventView.swift in Sources */,
|
2023-07-29 16:42:59 +00:00
|
|
|
4C15C7152A55DE7A00D0A0DB /* ReactionsSettingsView.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B94C2A9AD44700DC3548 /* FbConstants.swift in Sources */,
|
2023-04-06 23:04:16 +00:00
|
|
|
4C8D00C829DF791C0036AF10 /* CompatibleAttribute.swift in Sources */,
|
2023-05-10 01:13:33 +00:00
|
|
|
4C7D09742A0AEF9000943473 /* AlbyGradient.swift in Sources */,
|
2023-07-13 14:01:51 +00:00
|
|
|
4C687C272A6039500092C550 /* TestData.swift in Sources */,
|
2023-09-06 16:49:06 +00:00
|
|
|
50C3E08A2AA8E3F7006A4BC0 /* AVPlayer+Additions.swift in Sources */,
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DF229F88C6B004C165C /* BlurHashDecode.swift in Sources */,
|
2023-02-18 23:41:39 +00:00
|
|
|
F75BA12F29A18EF500E10810 /* BookmarksView.swift in Sources */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C7FF7D52823313F009601DB /* Mentions.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B94D2A9AD44700DC3548 /* Offset.swift in Sources */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C633350283D40E500B1C9C3 /* HomeModel.swift in Sources */,
|
2022-05-26 15:35:19 +00:00
|
|
|
4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9552A9AD44700DC3548 /* ByteBuffer.swift in Sources */,
|
|
|
|
4C32B95B2A9AD44700DC3548 /* NativeObject.swift in Sources */,
|
2023-02-04 17:07:27 +00:00
|
|
|
3AB72AB9298ECF30004BB58C /* Translator.swift in Sources */,
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A9028247A1D006E126D /* NostrLink.swift in Sources */,
|
2023-02-04 17:55:16 +00:00
|
|
|
4C3D52B6298DB4E6001C5831 /* ZapEvent.swift in Sources */,
|
2023-01-06 20:11:19 +00:00
|
|
|
647D9A8D2968520300A295DE /* SideMenuView.swift in Sources */,
|
2023-04-17 01:18:49 +00:00
|
|
|
F7F0BA272978E54D009531F3 /* ParticipantsView.swift in Sources */,
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABE32981BC7D00D66079 /* UserView.swift in Sources */,
|
2023-02-20 17:11:39 +00:00
|
|
|
4CE0E2AF29A2E82100DB4CA2 /* EventHolder.swift in Sources */,
|
2024-01-18 01:17:37 +00:00
|
|
|
B51C1CEA2B55A60A00E312A9 /* AddMuteItemView.swift in Sources */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4C5D5C992A6AF8F80024563C /* NdbNote.swift in Sources */,
|
2023-01-28 16:30:06 +00:00
|
|
|
4CF0ABF029857E9200D66079 /* Bech32Object.swift in Sources */,
|
2023-02-04 17:55:16 +00:00
|
|
|
4C3D52B8298DB5C6001C5831 /* TextEvent.swift in Sources */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C216F362870A9A700040376 /* InputDismissKeyboard.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFCF2B155D8C006CF0F4 /* ZapDataModel.swift in Sources */,
|
2023-04-21 21:17:37 +00:00
|
|
|
4C8D1A6F29F31E5000ACDF75 /* FriendsButton.swift in Sources */,
|
2023-07-01 18:42:36 +00:00
|
|
|
3A5E47C52A4A6CF400C0D090 /* Trie.swift in Sources */,
|
2024-02-14 21:31:43 +00:00
|
|
|
D7100C562B76F8E600C59298 /* PurpleViewPrimitives.swift in Sources */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C642B312BFA00A232C0 /* RelayAuthenticationDetail.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED2E2B128E8A0018B19C /* CollectionExtension.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFD62B155F0C006CF0F4 /* WalletConnect+.swift in Sources */,
|
2022-07-03 16:23:08 +00:00
|
|
|
4C216F382871EDE300040376 /* DirectMessageModel.swift in Sources */,
|
2024-01-25 22:11:11 +00:00
|
|
|
BA3759972ABCCF360018D73B /* CameraPreview.swift in Sources */,
|
2022-04-09 15:03:50 +00:00
|
|
|
4C75EFA627FF87A20006080F /* Nostr.swift in Sources */,
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927672A290F8B0098A105 /* RelativeTime.swift in Sources */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883A62975F83C00DC99E7 /* LNUrlPayRequest.swift in Sources */,
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D096D2A0AEA0400943473 /* CodeScanner.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D4B2B11721600AD4105 /* ZapType.swift in Sources */,
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9DE2852768D00C00DD9 /* ConfigView.swift in Sources */,
|
2023-04-08 18:44:50 +00:00
|
|
|
3A48E7B029DFBE9D006E787E /* MutedThreadsManager.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B94E2A9AD44700DC3548 /* Mutable.swift in Sources */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8E28399BFE008A31F1 /* SaveKeysView.swift in Sources */,
|
2023-01-18 20:52:07 +00:00
|
|
|
F7F0BA25297892BD009531F3 /* SwipeToDismiss.swift in Sources */,
|
2023-04-06 23:04:16 +00:00
|
|
|
4C8D00CA29DF80350036AF10 /* TruncatedText.swift in Sources */,
|
2023-07-23 00:15:36 +00:00
|
|
|
4C4DD3DB2A6CA7E8005B4E85 /* ContentParsing.swift in Sources */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694F22A67314D001F4053 /* SuggestedUserView.swift in Sources */,
|
2023-03-14 22:26:52 +00:00
|
|
|
4C9BB83429C12D9900FC4E37 /* EventProfileName.swift in Sources */,
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D09602A098C5D00943473 /* WalletView.swift in Sources */,
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB8838F296F781C00DC99E7 /* ReactionsView.swift in Sources */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C202B530D5100C5ECA7 /* MuteItem.swift in Sources */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFB328049D640006080F /* NostrEvent.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9582A9AD44700DC3548 /* VeriferOptions.swift in Sources */,
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */,
|
2022-04-19 00:33:15 +00:00
|
|
|
4CA2EFA0280E37AC0044ACD8 /* TimelineView.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7629A5770900E2BD5A /* NotificationItemView.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C86F7C42A76C44C00EC0817 /* ZappingNotify.swift in Sources */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C363A8428233689006E126D /* Parser.swift in Sources */,
|
2023-02-04 17:07:27 +00:00
|
|
|
3AAA95CA298DF87B00F3D526 /* TranslationService.swift in Sources */,
|
2022-06-09 20:47:25 +00:00
|
|
|
4CE4F9E328528C5200C00DD9 /* AddRelayView.swift in Sources */,
|
2023-09-19 20:33:41 +00:00
|
|
|
BA3759922ABCCEBA0018D73B /* CameraService+Extensions.swift in Sources */,
|
2023-03-22 13:24:34 +00:00
|
|
|
D74F430C2B23FB9B00425B75 /* StoreObserver.swift in Sources */,
|
2022-05-08 17:45:24 +00:00
|
|
|
4C363A9A28283854006E126D /* Reply.swift in Sources */,
|
2022-12-30 07:39:16 +00:00
|
|
|
BA693074295D649800ADDB87 /* UserSettingsStore.swift in Sources */,
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3E02B538D4200F104C4 /* DamusPurpleURLSheetView.swift in Sources */,
|
2024-03-18 22:21:21 +00:00
|
|
|
4CFF8F6729CC9E3A008DB934 /* FullScreenCarouselView.swift in Sources */,
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927632A290EB10098A105 /* EventTop.swift in Sources */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */,
|
2023-01-11 22:48:35 +00:00
|
|
|
4CB8838B296F6E1E00DC99E7 /* NIP05Badge.swift in Sources */,
|
2023-04-23 16:54:38 +00:00
|
|
|
4CA3FA1029F593D000FDB3C3 /* ZapTypePicker.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B95D2A9AD44700DC3548 /* Documentation.docc in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA66828FF5F9900C48A62 /* hex.c in Sources */,
|
2023-03-04 19:33:01 +00:00
|
|
|
E9E4ED0B295867B900DD7078 /* ThreadView.swift in Sources */,
|
2023-03-16 15:13:03 +00:00
|
|
|
4CD348EF29C3659D00497EB2 /* ImageUploadModel.swift in Sources */,
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D096E2A0AEA0400943473 /* ScannerCoordinator.swift in Sources */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C3BEFDC281DCE6100B3DE84 /* Liked.swift in Sources */,
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
4CF0ABE7298444FD00D66079 /* EventMutingContainerView.swift in Sources */,
|
2023-02-24 18:28:47 +00:00
|
|
|
9C83F89329A937B900136C08 /* TextViewWrapper.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253502A76C5B20004F4B8 /* UnfollowedNotify.swift in Sources */,
|
|
|
|
4C86F7C62A76C51100EC0817 /* AttachedWalletNotify.swift in Sources */,
|
2023-01-25 20:50:04 +00:00
|
|
|
4CF0ABE12981A83900D66079 /* MutelistView.swift in Sources */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883A82975FC1800DC99E7 /* Zaps.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFD42B155ECB006CF0F4 /* Zaps+.swift in Sources */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFB128049D510006080F /* NostrResponse.swift in Sources */,
|
2023-05-05 23:12:03 +00:00
|
|
|
4C7D09592A05BEAD00943473 /* KeyboardVisible.swift in Sources */,
|
2022-04-16 18:32:42 +00:00
|
|
|
4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */,
|
2023-01-23 18:37:35 +00:00
|
|
|
4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */,
|
2024-02-19 20:53:55 +00:00
|
|
|
E02429952B7E97740088B16C /* CameraController.swift in Sources */,
|
2022-12-20 16:39:29 +00:00
|
|
|
31D2E847295218AF006D67F8 /* Shimmer.swift in Sources */,
|
2024-04-04 02:03:46 +00:00
|
|
|
5C14C29F2BBBA5C600079FD2 /* RelayNipList.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D3E2B116DAD00AD4105 /* NotificationsManager.swift in Sources */,
|
2023-09-06 16:23:33 +00:00
|
|
|
50A16FFF2AA76A0900DFEC1F /* VideoController.swift in Sources */,
|
2023-02-01 21:49:32 +00:00
|
|
|
F7908E97298B1FDF00AB113A /* NIPURLBuilder.swift in Sources */,
|
2022-05-20 23:06:13 +00:00
|
|
|
4C285C8228385570008A31F1 /* CarouselView.swift in Sources */,
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040F129A8FF97008A0F29 /* LocalizationUtil.swift in Sources */,
|
2023-02-18 23:41:39 +00:00
|
|
|
F75BA12D29A1855400E10810 /* BookmarksManager.swift in Sources */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FEF2A73FCCB007AEB17 /* IdType.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67F28FFC01D00C48A62 /* InvoiceView.swift in Sources */,
|
2024-03-18 22:21:43 +00:00
|
|
|
D71AC4CC2BA8E3480076268E /* VisibilityTracker.swift in Sources */,
|
2023-02-08 19:07:58 +00:00
|
|
|
4CE8794829941DA700F758CC /* RelayFilters.swift in Sources */,
|
2022-04-16 18:32:42 +00:00
|
|
|
4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C3BEFE0281DE1ED00B3DE84 /* DamusState.swift in Sources */,
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DF529F88D2E004C165C /* ImageMetadata.swift in Sources */,
|
2023-03-05 21:39:00 +00:00
|
|
|
4CCEB7AE29B53D260078AA28 /* SearchingEventView.swift in Sources */,
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABE929844AF100D66079 /* AnyCodable.swift in Sources */,
|
2023-09-19 20:33:41 +00:00
|
|
|
BA3759932ABCCEBA0018D73B /* CameraModel.swift in Sources */,
|
2024-02-14 21:31:50 +00:00
|
|
|
D7100C5A2B76FD5100C59298 /* LogoView.swift in Sources */,
|
2022-04-20 02:46:30 +00:00
|
|
|
4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */,
|
2022-05-16 23:23:34 +00:00
|
|
|
4C3AC79F2833115300E1F516 /* FollowButtonView.swift in Sources */,
|
2023-12-01 21:25:49 +00:00
|
|
|
D7CB5D3B2B112FBB00AD4105 /* NotificationFormatter.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C4E137B2A76D5FB00BDD832 /* MuteThreadNotify.swift in Sources */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CC7AAE7297EFA7B00430951 /* Zap.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C12535A2A76C9960004F4B8 /* UnfollowNotify.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B95C2A9AD44700DC3548 /* String+extension.swift in Sources */,
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD22819DB9B00B3DE84 /* ProfileModel.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352AA2A76BF3A003BB08B /* LocalNotificationNotify.swift in Sources */,
|
storage: Improve clear cache functionality
This patch improves clear cache functionality by:
- Reducing kingfisher cache removal to one command (The two commands running async was leading to warning logs. One was a subset of the other)
- Removing all files under the cache folder where not currently used by other processes
Full Functionality test
-----------------------
PASS
Device: iPhone 13 mini (Physical device)
iOS: 17.0.3
Damus: This commit
Special remarks:
- I had to locally delete other unit tests to be able to build the test target
- Unit test run on an earlier version of the patch. Test coverage should still apply since this newer patch is a subset of the previous.
Setup: Run Damus with debugger connection to Xcode
Test steps:
1. Follow multiple active accounts (Skip if local Damus is already filled up with GBs of data)
2. Scroll down on the feed for a couple of minutes (or until you have seen at least a few images, a few videos, and link previews) (Skip if local Damus is filled up with GBs of data)
3. In Xcode, download a storage container (Window > Devices and Simulators > Select the device > Select Damus > click on (...) > Download container)
- Note: Even though you see the file, it does not download instantly. Monitor the file size until it roughly reaches the size reported in iOS storage settings, as the download may still be in progress. This may take a few minutes in some cases.
- Also take note of storage usage in iOS settings
4. Open the app data package using terminal
5. Run `du -h . | sort -hr`
6. Clear cache and check logs. Logs should indicate the caches being cleared, and there should be no storage-related warning/error logs. PASS
7. Download a new storage container. Remember to wait until it completes download.
8. Run `du -h . | sort -hr` on it.
9. Compare. There should be much less data. Also check iOS settings storage usage. PASS
10. Go back to the home feed and start scrolling, browsing, follow some other people, etc. Look at your own profile as well. Everything should appear to be working as expected with no crashes or important data loss
11. Check bookmarks are still present. PASS
12. Run `DamusCacheManagerTests`. Should pass. PASS* (*See special remarks)
Results:
- Storage usage goes from 3.9GB to 394.7MB
- Damus works as normal after clearing cache, and after restarting the app as well. It becomes slower for a moment, but after a bit it loads as normal again.
- No warning or error logs pertaining to clearing cache
- Unit test passes
My storage container disk usage stats after clearing cache:
```
% du -h | sort -hr
359M ./AppData
359M .
336M ./AppData/Documents
23M ./AppData/Library
20M ./AppData/Library/Caches
7.9M ./AppData/Library/Caches/com.jb55.damus2
2.4M ./AppData/Library/SplashBoard/Snapshots
2.4M ./AppData/Library/SplashBoard
1.8M ./AppData/Library/SplashBoard/Snapshots/com.jb55.damus2 - {DEFAULT GROUP}
1.6M ./AppData/Library/Caches/com.jb55.damus2/fsCachedData
636K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36
596K ./AppData/Library/Caches/com.apple.WebKit.GPU/com.apple.metal
596K ./AppData/Library/Caches/com.apple.WebKit.GPU
452K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal
296K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36/downscaled
224K ./AppData/Library/HTTPStorages/com.jb55.damus2
224K ./AppData/Library/HTTPStorages
164K ./AppData/Library/Caches/com.onevcat.Kingfisher.ImageCache.default
156K ./AppData/Library/Caches/RelayLogs
112K ./AppData/Library/Caches/com.apple.dyld
92K ./AppData/Library/Preferences
60K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal/archiveUsage.db
12K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState
12K ./AppData/Library/Saved Application State
8.0K ./AppData/StoreKit
8.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/ecc156b1-eb9c-4439-b219-e1eebf2b4c36
4.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/KnownSceneSessions
4.0K ./AppData/Library/LanguageModeling/en-dynamic.lm
4.0K ./AppData/Library/LanguageModeling
4.0K ./AppData/Library/Cookies
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit/WebsiteData
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit
0B ./AppData/SystemData/com.apple.SafariViewService/Library
0B ./AppData/SystemData/com.apple.SafariViewService
```
Biggest storage used remaining is in the Documents folder where NostrDB is stored. However, we do not want to clear NostrDB, so this is expected behavior.
Changelog-Changed: Improve clear cache functionality
Closes: https://github.com/damus-io/damus/issues/1472
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 17:44:00 +00:00
|
|
|
D7315A2A2ACDF3B70036E30A /* DamusCacheManager.swift in Sources */,
|
2024-01-30 07:42:04 +00:00
|
|
|
D7373BA82B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift in Sources */,
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D09682A0AE9B200943473 /* NWCScannerView.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D452B116FE800AD4105 /* Contacts+.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352A42A76AFF3003BB08B /* UpdateStatsNotify.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21E2B0858BB00234419 /* MigratedTypes.swift in Sources */,
|
2022-04-20 02:46:30 +00:00
|
|
|
4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4C2B7BF22A71B6540049DEE7 /* Id.swift in Sources */,
|
2023-02-16 03:14:59 +00:00
|
|
|
7C95CAEE299DCEF1009DCB67 /* KFOptionSetter+.swift in Sources */,
|
2023-05-10 01:13:33 +00:00
|
|
|
4C7D09722A0AEF5E00943473 /* DamusGradient.swift in Sources */,
|
2024-03-04 14:03:53 +00:00
|
|
|
4C463CBF2B960B96008A8C36 /* PurpleBackdrop.swift in Sources */,
|
2022-12-25 01:33:34 +00:00
|
|
|
BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */,
|
2022-12-17 22:26:03 +00:00
|
|
|
3169CAE6294E69C000EE4006 /* EmptyTimelineView.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9602A9AD44700DC3548 /* Struct.swift in Sources */,
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAF0297F11C700430951 /* SelectedEventView.swift in Sources */,
|
|
|
|
4CC7AAF8297F1CEE00430951 /* EventProfile.swift in Sources */,
|
2023-09-09 03:11:13 +00:00
|
|
|
5CF2DCCC2AA3AF0B00984B8D /* RelayPicView.swift in Sources */,
|
2023-07-13 14:05:53 +00:00
|
|
|
4C687C242A5FA86D0092C550 /* SearchHeaderView.swift in Sources */,
|
2023-01-03 03:09:56 +00:00
|
|
|
64FBD06F296255C400D9D3B2 /* Theme.swift in Sources */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352AC2A76C07F003BB08B /* NewUnmutesNotify.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA64928FF597700C48A62 /* bech32.c in Sources */,
|
ui: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Summary
-------
This patch fixes the issue where the user might see notes from users that they have muted, if such note has been reposted or quoted.
Furthermore, this patch introduces some improvements on some of the associated views, making them more reusable.
Testing of the fix
------------------
**PASS**
**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Test steps:**
1. Create two test accounts (if not created already). We will use test account "A". Test account "B" is an external test account
2. Make some notes from test account "B" (if non existent)
3. Switch to account "A"
4. Under test account "A", follow account "B"
5. Repost a note from account "B", and quote another note from account "B"
6. Access "account B"'s timeline. Repost and quoted note should all be visible. Layout should look as usual
7. Click on the reposted note. Should appear and it should look normal
8. Click on the note with the quote. Should appear and it should look normal
9. Click on the quoted note. Should appear and it should look normal
10. Now mute account "B"
12. Go back to account "A"'s timeline
13. Repost should appear, but the reposted content should be hidden behind a mute box. Clicking on show/hide should show or hide muted content
14. Note with quoted content should appear, but the quoted content should be hidden behind a mute box. Clicking on show/hide should work as expected
15. Make sure that the layout in steps 13 and 14 look good.
16. Click on the repost to access the thread view. Should be muted as expected.
17. Add a comment to the repost. Comment should appear even if the mute box hides the main note
18. Click on the note with quote to open its thread view. Comments should appear, main note should appear, but quoted content should be behind the mute box
19. Under account "B", add a comment to the quoted notes
20. Under account "A", check in the thread view that "B"'s reply is behind a mute box
21. Reply to the note with the quote. Check that the note appears correctly and that quoted content is behind the mute box (in the post composer view)
22. Find on Nostr a post where one of the replies contains a quoted note. Mute the user of the quoted content, and check that quoted content is now in a mute box
Smoke sanity test
-----------------
**PASS**
**Device:** iPhone 14 pro simulator
**iOS:** 16.4
**Test steps:** Browse a timeline filled with real notes and comments. Go through different notes and threads, mute some users, just to make sure nothing else appears obsviously broken.
Other notes
-----------
I removed this code:
```
.frame(maxWidth: .infinity, minHeight: PFP_SIZE)
```
from `EventShell`, because it was causing the layout to break on "threaded" style event view with muted quoted content (e.g. in a reply with quoted content).
The line of code dates back to `495859e07f`, but I am not sure why this line existed in the first place, or if removing it has any negative impact.
Closes: https://github.com/damus-io/damus/issues/1216
Changelog-Fixed: Hide quoted or reposted notes from people whom the user has muted. (#1216)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-30 03:16:58 +00:00
|
|
|
D7870BC32AC47EBC0080BA88 /* EventLoaderView.swift in Sources */,
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE879522996B68900F758CC /* RelayType.swift in Sources */,
|
2023-02-10 18:50:49 +00:00
|
|
|
4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */,
|
2023-01-02 23:18:42 +00:00
|
|
|
4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67528FF7A5A00C48A62 /* take.c in Sources */,
|
2022-05-19 15:33:37 +00:00
|
|
|
4C3AC7A12835A81400E1F516 /* SetupView.swift in Sources */,
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670128FC7C5900038D2A /* RelayView.swift in Sources */,
|
2022-05-22 02:44:04 +00:00
|
|
|
4C285C8C28398BC7008A31F1 /* Keys.swift in Sources */,
|
2024-03-16 12:20:59 +00:00
|
|
|
4C94D6432BA5AEFE00C26EFF /* QuoteRepostsView.swift in Sources */,
|
2023-12-01 21:26:14 +00:00
|
|
|
D7EDED332B12ACAE0018B19C /* DamusUserDefaults.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352AE2A76C1AC003BB08B /* FollowedNotify.swift in Sources */,
|
2022-04-17 12:31:38 +00:00
|
|
|
4CACA9DC280C38C000D9BBE8 /* Profiles.swift in Sources */,
|
2023-02-10 18:50:49 +00:00
|
|
|
4CE879582996C45300F758CC /* ZapsView.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7429A5680900E2BD5A /* EventGroupView.swift in Sources */,
|
2023-12-04 06:13:46 +00:00
|
|
|
4C9D6D1B2B1D35D7004E5CD9 /* PullDownSearch.swift in Sources */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C633352283D419F00B1C9C3 /* SignalModel.swift in Sources */,
|
2023-03-26 15:35:53 +00:00
|
|
|
4CFF8F6D29CD022E008DB934 /* WideEventView.swift in Sources */,
|
2023-01-10 23:12:34 +00:00
|
|
|
9609F058296E220800069BF3 /* BannerImageView.swift in Sources */,
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A94282704FA006E126D /* Post.swift in Sources */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C216F32286E388800040376 /* DMChatView.swift in Sources */,
|
2023-05-10 01:26:12 +00:00
|
|
|
4C7D09782A0B0CC900943473 /* WalletModel.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253522A76C6130004F4B8 /* ComposeNotify.swift in Sources */,
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09662A0AE62100943473 /* AlbyButton.swift in Sources */,
|
2024-02-14 21:31:50 +00:00
|
|
|
D7100C582B76FC8400C59298 /* MarketingContentView.swift in Sources */,
|
2023-01-30 21:26:04 +00:00
|
|
|
4CAAD8AD298851D000060CEA /* AccountDeletion.swift in Sources */,
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0A29A55429003E4487 /* EventGroup.swift in Sources */,
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D09622A098D0E00943473 /* WalletConnect.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67928FF7ABF00C48A62 /* list.c in Sources */,
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987E286D082C00EAE2B3 /* DirectMessagesModel.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C12535E2A76CA870004F4B8 /* SwitchedTimelineNotify.swift in Sources */,
|
2023-03-22 13:24:34 +00:00
|
|
|
D74F430A2B23F0BE00425B75 /* DamusPurple.swift in Sources */,
|
2023-02-17 20:20:35 +00:00
|
|
|
9CA876E229A00CEA0003B9A3 /* AttachMediaUtility.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C4E137D2A76D63600BDD832 /* UnmuteThreadNotify.swift in Sources */,
|
2023-04-03 20:57:57 +00:00
|
|
|
4CE4F0F829DB7399005914DB /* ThiccDivider.swift in Sources */,
|
2023-03-22 13:24:34 +00:00
|
|
|
4CFF8F5929C9FD1E008DB934 /* DamusPurpleView.swift in Sources */,
|
2023-02-20 17:11:39 +00:00
|
|
|
4CE0E2B629A3ED5500DB4CA2 /* InnerTimelineView.swift in Sources */,
|
2022-05-05 04:33:08 +00:00
|
|
|
4C363A8828236948006E126D /* BlocksView.swift in Sources */,
|
2022-10-16 23:11:27 +00:00
|
|
|
4C06670628FCB08600038D2A /* ImageCarousel.swift in Sources */,
|
2023-06-02 00:51:50 +00:00
|
|
|
3A23838E2A297DD200E5AA2E /* ZapButtonModel.swift in Sources */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694F82A6983AF001F4053 /* GrayGradient.swift in Sources */,
|
2023-08-01 15:27:47 +00:00
|
|
|
4C1D4FB12A7958E60024F453 /* VersionInfo.swift in Sources */,
|
2023-09-30 02:04:04 +00:00
|
|
|
D7FF94002AC7AC5300FD969D /* RelayURL.swift in Sources */,
|
2023-08-22 05:12:01 +00:00
|
|
|
4C64305C2A945AFF00B0C0E9 /* MusicController.swift in Sources */,
|
2023-07-07 12:07:00 +00:00
|
|
|
5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */,
|
2023-04-03 17:57:07 +00:00
|
|
|
F79C7FAD29D5E9620000F946 /* EditPictureControl.swift in Sources */,
|
2023-02-25 20:10:37 +00:00
|
|
|
4C9F18E229AA9B6C008C55EC /* CustomizeZapView.swift in Sources */,
|
2023-05-15 18:57:37 +00:00
|
|
|
4C2859602A12A2BE004746F7 /* SupporterBadge.swift in Sources */,
|
2023-05-26 17:13:58 +00:00
|
|
|
4C1A9A2A29DDF54400516EAC /* DamusVideoPlayer.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352A22A76AEC5003BB08B /* LikedNotify.swift in Sources */,
|
2023-09-19 20:29:40 +00:00
|
|
|
BA37598D2ABCCE500018D73B /* PhotoCaptureProcessor.swift in Sources */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFAF28049D350006080F /* NostrFilter.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA64C28FF59AC00C48A62 /* bech32_util.c in Sources */,
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA9276C2A2910D10098A105 /* ReplyPart.swift in Sources */,
|
2023-12-16 08:28:54 +00:00
|
|
|
D7C6787E2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift in Sources */,
|
2023-04-19 18:08:59 +00:00
|
|
|
4CE1399029F0661A00AC6A0B /* RepostAction.swift in Sources */,
|
|
|
|
4CE1399229F0666100AC6A0B /* ShareActionButton.swift in Sources */,
|
2023-02-03 17:25:07 +00:00
|
|
|
4C42812C298C848200DBF26F /* TranslateView.swift in Sources */,
|
2022-05-08 17:45:24 +00:00
|
|
|
4C363A9C282838B9006E126D /* EventRef.swift in Sources */,
|
2023-08-22 05:12:01 +00:00
|
|
|
4C5E54032A9522F600FF6E60 /* UserStatus.swift in Sources */,
|
2023-05-10 01:50:08 +00:00
|
|
|
4C7D095F2A098C5D00943473 /* ConnectWalletView.swift in Sources */,
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA24802297E3DC20090C62D /* RepostView.swift in Sources */,
|
2023-05-26 19:53:55 +00:00
|
|
|
5C6E1DAF2A194075008FC15A /* PinkGradient.swift in Sources */,
|
2022-08-09 16:32:22 +00:00
|
|
|
4CD7641B28A1641400B6928F /* EndBlock.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA66528FF5F6800C48A62 /* mem.c in Sources */,
|
2023-04-26 17:41:05 +00:00
|
|
|
4C198DEF29F88C6B004C165C /* BlurHashEncode.swift in Sources */,
|
2023-01-25 23:34:33 +00:00
|
|
|
4CF0ABE52981EE0C00D66079 /* EULAView.swift in Sources */,
|
2023-01-22 18:25:12 +00:00
|
|
|
4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */,
|
2023-01-30 23:49:03 +00:00
|
|
|
4CAAD8B029888AD200060CEA /* RelayConfigView.swift in Sources */,
|
2023-04-13 14:12:16 +00:00
|
|
|
50088DA129E8271A008A1FDF /* WebSocket.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA64128FF553900C48A62 /* hash_u5.c in Sources */,
|
2024-02-05 03:24:00 +00:00
|
|
|
5C7389B12B6EFA7100781E0A /* ProxyView.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253542A76C7D60004F4B8 /* LogoutNotify.swift in Sources */,
|
2023-01-28 06:30:57 +00:00
|
|
|
5C513FCC2984ACA60072348F /* QRCodeView.swift in Sources */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FF52A740BB7007AEB17 /* NoteId.swift in Sources */,
|
2023-07-11 01:59:50 +00:00
|
|
|
4C19AE512A5CEF7C00C90DB7 /* NostrScript.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */,
|
2023-10-20 18:16:13 +00:00
|
|
|
D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA64F28FF59F200C48A62 /* tal.c in Sources */,
|
2023-04-03 21:07:22 +00:00
|
|
|
5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */,
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */,
|
2023-09-06 16:25:07 +00:00
|
|
|
50A16FFD2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift in Sources */,
|
2023-03-26 15:35:53 +00:00
|
|
|
4CFF8F6B29CD0079008DB934 /* RepostedEvent.swift in Sources */,
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D78CD5982B8990300014D539 /* DamusAppNotificationView.swift in Sources */,
|
2024-01-30 07:41:49 +00:00
|
|
|
D724D8272B64B40B00ABE789 /* DamusPurpleAccountView.swift in Sources */,
|
2022-04-25 15:28:07 +00:00
|
|
|
4C8682872814DE470026224F /* ProfileView.swift in Sources */,
|
2023-05-26 19:48:07 +00:00
|
|
|
5C0707D12A1ECB38004E7B51 /* DamusLogoGradient.swift in Sources */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4CDD1AE02A6B305F001CD4DF /* NdbTagElem.swift in Sources */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C5F9114283D694D0052CD1C /* FollowTarget.swift in Sources */,
|
2024-01-30 07:41:38 +00:00
|
|
|
D72341192B6864F200E1E135 /* DamusPurpleEnvironment.swift in Sources */,
|
2023-01-25 16:11:21 +00:00
|
|
|
4CF0ABD629817F5B00D66079 /* ReportView.swift in Sources */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A2729DDE31900516EAC /* TranslationSettingsView.swift in Sources */,
|
2023-09-19 20:33:41 +00:00
|
|
|
BA3759942ABCCEBA0018D73B /* CameraService.swift in Sources */,
|
2023-01-04 09:30:37 +00:00
|
|
|
4CB8838629656C8B00DC99E7 /* NIP05.swift in Sources */,
|
2023-01-25 17:53:41 +00:00
|
|
|
4CF0ABD82981980C00D66079 /* Lists.swift in Sources */,
|
2023-10-20 18:15:58 +00:00
|
|
|
F71694EA2A662232001F4053 /* OnboardingSuggestionsView.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C12536A2A76D3850004F4B8 /* RelaysChangedNotify.swift in Sources */,
|
2024-03-10 22:37:13 +00:00
|
|
|
5C7389B92B9E69ED00781E0A /* MutinyGradient.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC8029A6A53F00E2BD5A /* ProfilePicturesView.swift in Sources */,
|
2024-01-30 07:42:18 +00:00
|
|
|
D7373BAA2B68A65A00F7783D /* PurpleAccountUpdateNotify.swift in Sources */,
|
2023-05-26 19:56:54 +00:00
|
|
|
5C6E1DAD2A193EC2008FC15A /* GradientButtonStyle.swift in Sources */,
|
2023-08-20 01:09:30 +00:00
|
|
|
3CCD1E6A2A874C4E0099A953 /* Nip98HTTPAuth.swift in Sources */,
|
2023-03-27 16:26:30 +00:00
|
|
|
4C8EC52529D1FA6C0085D9A8 /* DamusColors.swift in Sources */,
|
2023-06-20 04:54:26 +00:00
|
|
|
3A4647CF2A413ADC00386AD8 /* CondensedProfilePicturesView.swift in Sources */,
|
2024-04-04 02:03:46 +00:00
|
|
|
5C14C29B2BBBA29C00079FD2 /* RelaySoftwareDetail.swift in Sources */,
|
2023-04-29 18:38:28 +00:00
|
|
|
D2277EEA2A089BD5006C3807 /* Router.swift in Sources */,
|
2023-07-01 18:42:36 +00:00
|
|
|
3A90B1812A4EA3AF00000D94 /* UserSearchCache.swift in Sources */,
|
2023-03-22 13:24:34 +00:00
|
|
|
4C9D6D162B1AA9C6004E5CD9 /* DisplayTabBarNotify.swift in Sources */,
|
2023-07-26 15:46:44 +00:00
|
|
|
4CC14FF92A741939007AEB17 /* Referenced.swift in Sources */,
|
2022-06-07 02:26:44 +00:00
|
|
|
4C5C7E6A284EDE2E00A22DF5 /* SearchResultsView.swift in Sources */,
|
2023-04-19 18:08:59 +00:00
|
|
|
4CE1399429F0669900AC6A0B /* BigButton.swift in Sources */,
|
2023-01-27 21:03:17 +00:00
|
|
|
7C60CAEF298471A1009C80D6 /* CoreSVG.swift in Sources */,
|
2023-03-29 22:57:50 +00:00
|
|
|
6439E014296790CF0020672B /* ProfilePicImageView.swift in Sources */,
|
2022-04-09 15:03:50 +00:00
|
|
|
4CE6DF1627F8DEBF00C66700 /* RelayConnection.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253682A76D2470004F4B8 /* MuteNotify.swift in Sources */,
|
2023-04-15 19:40:00 +00:00
|
|
|
4CDA128C29EB19C40006FA5A /* LocalNotification.swift in Sources */,
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD6281D995700B3DE84 /* ActionBarModel.swift in Sources */,
|
2023-05-10 01:15:16 +00:00
|
|
|
4C7D09762A0AF19E00943473 /* FillAndStroke.swift in Sources */,
|
2023-06-01 18:53:12 +00:00
|
|
|
4CA927612A290E340098A105 /* EventShell.swift in Sources */,
|
2022-05-09 17:33:03 +00:00
|
|
|
4C363AA428296DEE006E126D /* SearchModel.swift in Sources */,
|
2023-04-07 00:09:50 +00:00
|
|
|
4C8D00CC29DF92DF0036AF10 /* Hashtags.swift in Sources */,
|
2023-05-10 01:10:56 +00:00
|
|
|
4C7D096F2A0AEA0400943473 /* ScannerViewController.swift in Sources */,
|
2022-04-16 16:33:33 +00:00
|
|
|
4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */,
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAF6297F1A6A00430951 /* EventBody.swift in Sources */,
|
2023-03-22 13:24:34 +00:00
|
|
|
D76556D62B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift in Sources */,
|
2022-12-27 19:38:52 +00:00
|
|
|
3165648B295B70D500C64604 /* LinkView.swift in Sources */,
|
2023-04-10 05:02:55 +00:00
|
|
|
4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D5C2B1176B200AD4105 /* MediaUploader.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253562A76C8C60004F4B8 /* BroadcastNotify.swift in Sources */,
|
2022-04-30 17:37:29 +00:00
|
|
|
4C3BEFD42819DE8F00B3DE84 /* NostrKind.swift in Sources */,
|
2024-02-10 16:36:47 +00:00
|
|
|
B533694E2B66D791008A805E /* MutelistManager.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9532A9AD44700DC3548 /* Verifier.swift in Sources */,
|
2024-04-04 02:03:46 +00:00
|
|
|
5C14C29D2BBBA40B00079FD2 /* RelayAdminDetail.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA66028FF5E7700C48A62 /* node_id.c in Sources */,
|
2023-07-13 01:19:13 +00:00
|
|
|
4C687C212A5F7ED00092C550 /* DamusBackground.swift in Sources */,
|
2023-07-30 17:47:53 +00:00
|
|
|
4CA352A02A76AE80003BB08B /* Notify.swift in Sources */,
|
2023-08-22 05:12:01 +00:00
|
|
|
4CF38C882A9442DC00BE01B6 /* UserStatusView.swift in Sources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEE727F7A08100C66700 /* damusApp.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253582A76C9060004F4B8 /* PresentSheetNotify.swift in Sources */,
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A962827096D006E126D /* PostBlock.swift in Sources */,
|
2023-06-01 18:53:59 +00:00
|
|
|
4CA9275F2A2902B20098A105 /* LongformPreview.swift in Sources */,
|
2022-05-24 21:34:21 +00:00
|
|
|
4C5F9116283D855D0052CD1C /* EventsModel.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B94F2A9AD44700DC3548 /* Int+extension.swift in Sources */,
|
2022-04-12 13:47:54 +00:00
|
|
|
4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */,
|
2022-10-17 22:20:38 +00:00
|
|
|
4C06670E28FDEAA000038D2A /* utf8.c in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA66D28FF782800C48A62 /* amount.c in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9562A9AD44700DC3548 /* TableVerifier.swift in Sources */,
|
2023-09-09 03:06:01 +00:00
|
|
|
5CF2DCCE2AABE1A500984B8D /* DamusLightGradient.swift in Sources */,
|
2023-08-22 05:12:01 +00:00
|
|
|
4C5E54062A9671F800FF6E60 /* UserStatusSheet.swift in Sources */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694F42A6732B7001F4053 /* GradientFollowButton.swift in Sources */,
|
2022-05-19 21:38:25 +00:00
|
|
|
4C3AC7A728369BA200E1F516 /* SearchHomeView.swift in Sources */,
|
2024-02-28 03:32:34 +00:00
|
|
|
E0EE9DD42B8E5FEA00F3002D /* ImageProcessing.swift in Sources */,
|
2023-10-23 23:32:43 +00:00
|
|
|
4CB883B0297705DD00DC99E7 /* NoteZapButton.swift in Sources */,
|
2022-05-07 20:50:19 +00:00
|
|
|
4C363A922825FCF2006E126D /* ProfileUpdate.swift in Sources */,
|
2022-05-04 23:26:10 +00:00
|
|
|
4C3BEFDA281DCA1400B3DE84 /* LikeCounter.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9502A9AD44700DC3548 /* FlatBufferBuilder.swift in Sources */,
|
2023-07-09 13:45:33 +00:00
|
|
|
50A60D142A28BEEE00186190 /* RelayLog.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED212B117DCA0018B19C /* SequenceUtils.swift in Sources */,
|
2023-09-19 20:24:11 +00:00
|
|
|
BA37598A2ABCCDE40018D73B /* ImageResizer.swift in Sources */,
|
2024-01-18 01:17:37 +00:00
|
|
|
B51C1CEB2B55A60A00E312A9 /* MuteDurationMenu.swift in Sources */,
|
2023-01-10 16:12:04 +00:00
|
|
|
4CB88389296AF99A00DC99E7 /* EventDetailBar.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9512A9AD44700DC3548 /* FlatbuffersErrors.swift in Sources */,
|
2023-02-10 17:35:59 +00:00
|
|
|
4CE8794E2996B16A00F758CC /* RelayToggle.swift in Sources */,
|
2022-05-15 18:08:36 +00:00
|
|
|
4C3AC79B28306D7B00E1F516 /* Contacts.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA63D28FF52D600C48A62 /* bolt11.c in Sources */,
|
2023-03-14 22:26:52 +00:00
|
|
|
4C9BB83129C0ED4F00FC4E37 /* DisplayName.swift in Sources */,
|
2023-02-17 17:34:41 +00:00
|
|
|
7CFF6317299FEFE5005D382A /* SelectableText.swift in Sources */,
|
2024-03-18 22:21:21 +00:00
|
|
|
50A16FFB2AA6C06600DFEC1F /* DamusAVPlayerView.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4CA352A82A76B37E003BB08B /* NewMutesNotify.swift in Sources */,
|
2023-03-23 14:54:25 +00:00
|
|
|
4CFF8F6929CC9ED1008DB934 /* ImageContainerView.swift in Sources */,
|
2023-08-21 21:17:21 +00:00
|
|
|
7527271E2A93FF0100214108 /* Block.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C54AA0729A540BA003E4487 /* NotificationsModel.swift in Sources */,
|
2023-03-29 23:24:06 +00:00
|
|
|
4CE4F0F229D4FCFA005914DB /* DebouncedOnChange.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B9592A9AD44700DC3548 /* Table.swift in Sources */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4C5D5C9D2A6B2CB40024563C /* AsciiCharacter.swift in Sources */,
|
2023-01-27 18:16:56 +00:00
|
|
|
4CF0ABEC29844B4700D66079 /* AnyDecodable.swift in Sources */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C9146FE2A2A87C200DDEA40 /* nostrscript.c in Sources */,
|
2022-05-24 22:29:28 +00:00
|
|
|
4C5F9118283D88E40052CD1C /* FollowingModel.swift in Sources */,
|
2023-04-04 19:03:31 +00:00
|
|
|
4C1A9A1A29DCA17E00516EAC /* ReplyCounter.swift in Sources */,
|
2023-04-28 19:24:34 +00:00
|
|
|
50B5685329F97CB400A23243 /* CredentialHandler.swift in Sources */,
|
2023-02-08 19:07:58 +00:00
|
|
|
643EA5C8296B764E005081BB /* RelayFilterView.swift in Sources */,
|
2023-07-20 19:45:10 +00:00
|
|
|
F71694EC2A662292001F4053 /* SuggestedUsersViewModel.swift in Sources */,
|
2024-01-18 19:59:30 +00:00
|
|
|
E04A37C62B544F090029650D /* URIParsing.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67D28FFBBA300C48A62 /* InvoicesView.swift in Sources */,
|
2022-05-05 04:33:08 +00:00
|
|
|
4C363A8E28236FE4006E126D /* NoteContentView.swift in Sources */,
|
2023-08-03 00:07:55 +00:00
|
|
|
4C2B10282A7B0F5C008AA43E /* Log.swift in Sources */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */,
|
2022-12-23 17:27:39 +00:00
|
|
|
E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */,
|
2023-06-20 13:30:48 +00:00
|
|
|
4CB8FC232A41ABA800763C51 /* AboutView.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFCC2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */,
|
2023-01-24 01:45:35 +00:00
|
|
|
5C513FBA297F72980072348F /* CustomPicker.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253622A76D00B0004F4B8 /* PostNotify.swift in Sources */,
|
2022-04-17 15:49:02 +00:00
|
|
|
4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */,
|
2023-02-01 21:49:32 +00:00
|
|
|
F7908E92298B0F0700AB113A /* RelayDetailView.swift in Sources */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C9147002A2A891E00DDEA40 /* error.c in Sources */,
|
2023-02-10 18:01:17 +00:00
|
|
|
4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253602A76CF890004F4B8 /* ScrollToTopNotify.swift in Sources */,
|
|
|
|
4CA3529E2A76AE67003BB08B /* FollowNotify.swift in Sources */,
|
2023-01-25 16:11:21 +00:00
|
|
|
4CF0ABD42980996B00D66079 /* Report.swift in Sources */,
|
2022-10-17 22:20:38 +00:00
|
|
|
4C06670B28FDE64700038D2A /* damus.c in Sources */,
|
2023-07-30 17:48:56 +00:00
|
|
|
4C1253642A76D08F0004F4B8 /* ReportNotify.swift in Sources */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A2529DDDF2600516EAC /* ZapSettingsView.swift in Sources */,
|
2023-02-15 17:35:47 +00:00
|
|
|
4C2CDDF7299D4A5E00879FD5 /* Debouncer.swift in Sources */,
|
2023-02-04 17:07:27 +00:00
|
|
|
3AAA95CC298E07E900F3D526 /* DeepLPlan.swift in Sources */,
|
2022-12-30 07:39:16 +00:00
|
|
|
4FE60CDD295E1C5E00105A1F /* Wallet.swift in Sources */,
|
2023-01-23 04:24:10 +00:00
|
|
|
3AA247FF297E3D900090C62D /* RepostsView.swift in Sources */,
|
2023-01-20 02:59:37 +00:00
|
|
|
3AE45AF6297BB2E700C1D842 /* LibreTranslateServer.swift in Sources */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4C5D5C9A2A6AF8F80024563C /* NdbTagIterator.swift in Sources */,
|
2024-02-14 21:31:59 +00:00
|
|
|
D7100C5E2B7709ED00C59298 /* PurpleStoreKitManager.swift in Sources */,
|
2023-06-17 12:20:50 +00:00
|
|
|
4CE879502996B2BD00F758CC /* RelayStatusView.swift in Sources */,
|
2023-01-23 20:13:58 +00:00
|
|
|
4CC7AAF4297F18B400430951 /* ReplyDescription.swift in Sources */,
|
2022-04-03 22:40:18 +00:00
|
|
|
4C75EFA427FA577B0006080F /* PostView.swift in Sources */,
|
2023-02-21 20:27:03 +00:00
|
|
|
4C30AC7229A5677A00E2BD5A /* NotificationsView.swift in Sources */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A2129DDD3E100516EAC /* KeySettingsView.swift in Sources */,
|
filters: add "Do not show #nsfw tagged posts" setting
This commit adds a setting where the user can choose to hide notes with
a #nsfw hashtag. This setting was implemented to allow users to filter
out adult or other unsafe content.
I moved the code logic for content filtering into a new file, and
defined a protocol for content filters. Although the logic is still
simple, this might help in developing a flexible API in case we have
more complex filtering needs in the future.
I also modified the name of the "Appearance" setting to "Appearance and
filters", to make it easier for users to intuitively find this setting.
(Note: Re-translations of this string might be necessary)
**PASS**
**iOS:**
- iOS 17.0 (iPhone 14 Pro)
**Damus:** (This commit)
**Steps:**
1. Follow another account that you control (Account B)
2. On account B, post a note saying "#test this is a test". This note should show up on the home feed.
3. On account B, post a note saying "#nsfw this is a test". This note should NOT show up on the home feed
4. Go to settings and disable the NSFW filter. Go back to the home view. The #nsfw post should now show up.
5. Close app and reopen. NSFW post should still show up (i.e. Setting should be persistent)
6. Unfollow account B
7. Close app and reopen.
8. Follow the "#grownostr" hashtag
9. Turn on the NSFW filter
10. On account B, post a note saying "#grownostr this is a test". This note should show up on the home view.
11. On account B, post a note saying "#grownostr #nsfw this is a test". This note should NOT show up.
12. Double-check the "notes and replies" tab. Note should NOT show up there either.
12. Turn off NSFW filter
13. Note from step 11 should now show up.
14. Go to Universe view and find a post with a hashtag. Remember where the post is.
14. Locally change the tag keyword from "nsfw" to that hashtag (Note: I had to test this way because my posts were not showing up in the Universe view)
15. Turn off the filter. Check post is there, in the Universe view.
16. Turn on the filter. Check post is no longer there in the Universe view. (Check the neighboring posts are the same, to make sure)
17. Bring back the code to its normal state.
18. Search for "#nsfw". Make sure that #nsfw appears (I believe this is ok, because it means the person is purposefully searching for it)
Closes: https://github.com/damus-io/damus/issues/1412
Changelog-Added: Add "Do not show #nsfw tagged posts" setting
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-18 23:27:15 +00:00
|
|
|
D723C38E2AB8D83400065664 /* ContentFilters.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B95A2A9AD44700DC3548 /* Verifiable.swift in Sources */,
|
2023-06-22 08:15:28 +00:00
|
|
|
4C73C5142A4437C10062CAC0 /* ZapUserView.swift in Sources */,
|
2023-05-04 11:40:04 +00:00
|
|
|
501F8C802A0220E1001AFC1D /* KeychainStorage.swift in Sources */,
|
2023-04-05 15:49:15 +00:00
|
|
|
4C1A9A1D29DDCF9B00516EAC /* NotificationSettingsView.swift in Sources */,
|
2023-09-09 03:06:31 +00:00
|
|
|
5CC868DD2AA29B3200FB22BA /* NeutralButtonStyle.swift in Sources */,
|
2022-04-11 17:34:35 +00:00
|
|
|
4C75EFB528049D790006080F /* Relay.swift in Sources */,
|
2022-04-16 16:36:19 +00:00
|
|
|
4CEE2AF1280B216B00AB5EEF /* EventDetailView.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D4E2B11728000AD4105 /* NewEventsBits.swift in Sources */,
|
2023-01-25 16:11:21 +00:00
|
|
|
4CC7AAFA297F64AC00430951 /* EventMenu.swift in Sources */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B57B4C622B312BD700A232C0 /* ReconnectRelaysNotify.swift in Sources */,
|
2024-01-14 21:55:04 +00:00
|
|
|
D7ADD3DE2B53854300F104C4 /* DamusPurpleURL.swift in Sources */,
|
2023-05-29 12:02:12 +00:00
|
|
|
E4FA1C032A24BB7F00482697 /* SearchSettingsView.swift in Sources */,
|
2022-04-11 18:32:30 +00:00
|
|
|
4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */,
|
2022-05-19 15:33:37 +00:00
|
|
|
4C3AC7A52836987600E1F516 /* MainTabView.swift in Sources */,
|
2023-10-23 23:32:43 +00:00
|
|
|
D76874F32AE3632B00FB0F68 /* ProfileZapLinkView.swift in Sources */,
|
2023-10-21 04:44:36 +00:00
|
|
|
D77BFA0B2AE3051200621634 /* ProfileActionSheetView.swift in Sources */,
|
2023-04-05 17:23:07 +00:00
|
|
|
4C1A9A1F29DDD24B00516EAC /* AppearanceSettingsView.swift in Sources */,
|
2023-03-31 17:01:31 +00:00
|
|
|
3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */,
|
2022-12-18 23:37:53 +00:00
|
|
|
3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */,
|
2023-06-23 08:01:30 +00:00
|
|
|
4C9AA14A2A4587A6003F49FD /* NotificationStatusModel.swift in Sources */,
|
2024-02-14 21:31:50 +00:00
|
|
|
D7100C5C2B77016700C59298 /* IAPProductStateView.swift in Sources */,
|
2023-02-07 18:51:08 +00:00
|
|
|
4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */,
|
2023-03-31 22:14:55 +00:00
|
|
|
4CE4F0F429D779B5005914DB /* PostBox.swift in Sources */,
|
2023-09-19 20:29:40 +00:00
|
|
|
BA37598E2ABCCE500018D73B /* VideoCaptureProcessor.swift in Sources */,
|
2023-07-17 20:25:17 +00:00
|
|
|
4C9B0DF32A65C46800CBDA21 /* ProfileEditButton.swift in Sources */,
|
2023-08-27 03:43:54 +00:00
|
|
|
4C32B95F2A9AD44700DC3548 /* Enum.swift in Sources */,
|
2023-05-15 18:57:37 +00:00
|
|
|
4C2859622A12A7F0004746F7 /* GoldSupportGradient.swift in Sources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
4CE6DEEF27F7A08200C66700 /* Sources */ = {
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2024-04-25 21:03:34 +00:00
|
|
|
4C2D34412BDAF1B300F9FB44 /* NIP10Tests.swift in Sources */,
|
2023-08-06 16:02:18 +00:00
|
|
|
4C684A572A7FFAE6005E6031 /* UrlTests.swift in Sources */,
|
2023-07-01 18:42:36 +00:00
|
|
|
3A90B1832A4EA3C600000D94 /* UserSearchCacheTests.swift in Sources */,
|
2023-07-17 17:15:26 +00:00
|
|
|
4C9B0DEE2A65A75F00CBDA21 /* AttrStringTestExtensions.swift in Sources */,
|
2023-07-11 14:21:16 +00:00
|
|
|
4C19AE552A5D977400C90DB7 /* HashtagTests.swift in Sources */,
|
2024-03-22 16:55:35 +00:00
|
|
|
D72927AD2BAB515C00F93E90 /* RelayURLTests.swift in Sources */,
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040ED29A5CB86008A0F29 /* ReplyDescriptionTests.swift in Sources */,
|
2023-08-19 19:04:18 +00:00
|
|
|
D71DC1EC2A9129C3006E207C /* PostViewTests.swift in Sources */,
|
2023-07-14 04:21:08 +00:00
|
|
|
3AAC7A022A60FE72002B50DF /* LocalizationUtilTests.swift in Sources */,
|
Add Damus Purple impending expiry notification support
This commit adds Damus Purple expiry notification support.
How it works: Whenever the app initiates or enters the foreground, it
checks the user's account expiry, and calculates what notifications to
display (It is functional, not imperative, to better match how
the notifications view works)
The notification handlers work the same as every other notification
handler for Nostr events. However, local iOS notifications were not
implemented to maintain these reminders more discreet.
Current limitations:
- Notifications cannot be dismissed
- Notifications are dismissed only when Damus Purple is extended
- After making a purchase, notifications are not dismissed right away
- Bell icon with purple badge shows up on every app restart if user's account is expired
Testing
-------
Device: iPhone 13 Mini
iOS: 17.3.1
Damus: This commit
damus-api: d3801376fa204433661be6de8b7974f12b0ad25f
Setup:
- Local servers Setup
- Debug endpoints enabled for changing expiry date on the fly
Coverage:
1. Expired account
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. 4 notifications appear on notifications view (7,3,1,0 days to expiry). PASS
3. Notifications appear in correct chronological order. PASS
4. Notifications look consistent in appearance. PASS
5. Expiry notifications' text size follows text size settings. PASS
6. Clicking on notification CTA takes user to account info page. PASS
2. Non-expired account (set expiry, restart app)
1. No expiry notifications, no bell icon. PASS
3. Expiry in 6 days (set expiry, restart app)
1. Starting the app on home screen shows bell icon with purple badge. PASS
2. Starting the app on the notification screen renders notifications the same way. PASS
3. Only one notification (7 days remaining) appears. PASS
4. Expiry in 2 days. PASS
5. General
1. Clicking bell icon clears away "new notifications" badge. PASS
2. Performance of notifications view does not seem affected. PASS
3. Performance of app on startup does not seem affected. PASS
6. IAP
1. Active IAP + expiry date in 2 days does not trigger reminder notification (Because it is auto-renewed). PASS
Closes: https://github.com/damus-io/damus/issues/1973
Changelog-Added: Notification reminders for Damus Purple impending expiration
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2024-02-29 07:16:34 +00:00
|
|
|
D7CBD1D62B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift in Sources */,
|
2023-08-15 21:33:47 +00:00
|
|
|
D7DEEF2F2A8C021E00E0C99F /* NostrEventTests.swift in Sources */,
|
2023-04-10 05:02:55 +00:00
|
|
|
4C8D00D429E3C5D40036AF10 /* NIP19Tests.swift in Sources */,
|
2023-02-26 18:01:23 +00:00
|
|
|
3A30410129AB12AA008A0F29 /* EventGroupViewTests.swift in Sources */,
|
2023-05-04 11:40:04 +00:00
|
|
|
501F8C822A0224EB001AFC1D /* KeychainStorageTests.swift in Sources */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B5B4D1432B37D47600844320 /* NdbExtensions.swift in Sources */,
|
2022-12-31 04:32:33 +00:00
|
|
|
3ACBCB78295FE5C70037388A /* TimeAgoTests.swift in Sources */,
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D072AD9C1FB002AFF62 /* MockProfiles.swift in Sources */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5A75C2A2B546D94007AFBC0 /* MuteItemTests.swift in Sources */,
|
2023-06-03 01:51:49 +00:00
|
|
|
4C4F14A72A2A61A30045A0B9 /* NostrScriptTests.swift in Sources */,
|
2023-08-03 03:38:49 +00:00
|
|
|
D78525252A7B2EA4002FA637 /* NoteContentViewTests.swift in Sources */,
|
2022-10-19 14:46:05 +00:00
|
|
|
4C3EA67B28FF7B3900C48A62 /* InvoiceTests.swift in Sources */,
|
2022-05-09 02:01:42 +00:00
|
|
|
4C363A9E2828A822006E126D /* ReplyTests.swift in Sources */,
|
2023-05-10 23:23:54 +00:00
|
|
|
4C7D097E2A0C58B900943473 /* WalletConnectTests.swift in Sources */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883AA297612FF00DC99E7 /* ZapTests.swift in Sources */,
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D022AD9C136002AFF62 /* EventViewTests.swift in Sources */,
|
2023-01-15 01:23:35 +00:00
|
|
|
4CB8839A297322D200DC99E7 /* DMTests.swift in Sources */,
|
storage: Improve clear cache functionality
This patch improves clear cache functionality by:
- Reducing kingfisher cache removal to one command (The two commands running async was leading to warning logs. One was a subset of the other)
- Removing all files under the cache folder where not currently used by other processes
Full Functionality test
-----------------------
PASS
Device: iPhone 13 mini (Physical device)
iOS: 17.0.3
Damus: This commit
Special remarks:
- I had to locally delete other unit tests to be able to build the test target
- Unit test run on an earlier version of the patch. Test coverage should still apply since this newer patch is a subset of the previous.
Setup: Run Damus with debugger connection to Xcode
Test steps:
1. Follow multiple active accounts (Skip if local Damus is already filled up with GBs of data)
2. Scroll down on the feed for a couple of minutes (or until you have seen at least a few images, a few videos, and link previews) (Skip if local Damus is filled up with GBs of data)
3. In Xcode, download a storage container (Window > Devices and Simulators > Select the device > Select Damus > click on (...) > Download container)
- Note: Even though you see the file, it does not download instantly. Monitor the file size until it roughly reaches the size reported in iOS storage settings, as the download may still be in progress. This may take a few minutes in some cases.
- Also take note of storage usage in iOS settings
4. Open the app data package using terminal
5. Run `du -h . | sort -hr`
6. Clear cache and check logs. Logs should indicate the caches being cleared, and there should be no storage-related warning/error logs. PASS
7. Download a new storage container. Remember to wait until it completes download.
8. Run `du -h . | sort -hr` on it.
9. Compare. There should be much less data. Also check iOS settings storage usage. PASS
10. Go back to the home feed and start scrolling, browsing, follow some other people, etc. Look at your own profile as well. Everything should appear to be working as expected with no crashes or important data loss
11. Check bookmarks are still present. PASS
12. Run `DamusCacheManagerTests`. Should pass. PASS* (*See special remarks)
Results:
- Storage usage goes from 3.9GB to 394.7MB
- Damus works as normal after clearing cache, and after restarting the app as well. It becomes slower for a moment, but after a bit it loads as normal again.
- No warning or error logs pertaining to clearing cache
- Unit test passes
My storage container disk usage stats after clearing cache:
```
% du -h | sort -hr
359M ./AppData
359M .
336M ./AppData/Documents
23M ./AppData/Library
20M ./AppData/Library/Caches
7.9M ./AppData/Library/Caches/com.jb55.damus2
2.4M ./AppData/Library/SplashBoard/Snapshots
2.4M ./AppData/Library/SplashBoard
1.8M ./AppData/Library/SplashBoard/Snapshots/com.jb55.damus2 - {DEFAULT GROUP}
1.6M ./AppData/Library/Caches/com.jb55.damus2/fsCachedData
636K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36
596K ./AppData/Library/Caches/com.apple.WebKit.GPU/com.apple.metal
596K ./AppData/Library/Caches/com.apple.WebKit.GPU
452K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal
296K ./AppData/Library/SplashBoard/Snapshots/sceneID:com.jb55.damus2-ecc156b1-eb9c-4439-b219-e1eebf2b4c36/downscaled
224K ./AppData/Library/HTTPStorages/com.jb55.damus2
224K ./AppData/Library/HTTPStorages
164K ./AppData/Library/Caches/com.onevcat.Kingfisher.ImageCache.default
156K ./AppData/Library/Caches/RelayLogs
112K ./AppData/Library/Caches/com.apple.dyld
92K ./AppData/Library/Preferences
60K ./AppData/Library/Caches/com.jb55.damus2/com.apple.metal/archiveUsage.db
12K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState
12K ./AppData/Library/Saved Application State
8.0K ./AppData/StoreKit
8.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/ecc156b1-eb9c-4439-b219-e1eebf2b4c36
4.0K ./AppData/Library/Saved Application State/com.jb55.damus2.savedState/KnownSceneSessions
4.0K ./AppData/Library/LanguageModeling/en-dynamic.lm
4.0K ./AppData/Library/LanguageModeling
4.0K ./AppData/Library/Cookies
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit/WebsiteData
0B ./AppData/SystemData/com.apple.SafariViewService/Library/WebKit
0B ./AppData/SystemData/com.apple.SafariViewService/Library
0B ./AppData/SystemData/com.apple.SafariViewService
```
Biggest storage used remaining is in the Documents folder where NostrDB is stored. However, we do not want to clear NostrDB, so this is expected behavior.
Changelog-Changed: Improve clear cache functionality
Closes: https://github.com/damus-io/damus/issues/1472
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 17:44:00 +00:00
|
|
|
D7315A2C2ACDF4DA0036E30A /* DamusCacheManagerTests.swift in Sources */,
|
2023-07-21 21:54:03 +00:00
|
|
|
4C9054852A6AEAA000811EEC /* NdbTests.swift in Sources */,
|
2023-09-01 15:32:01 +00:00
|
|
|
75AD872B2AA23A460085EF2C /* Block+Tests.swift in Sources */,
|
2024-02-14 03:20:18 +00:00
|
|
|
E0E024112B7C19C20075735D /* TranslationTests.swift in Sources */,
|
2023-04-15 09:40:56 +00:00
|
|
|
F944F56E29EA9CCC0067B3BF /* DamusParseContentTests.swift in Sources */,
|
2023-07-01 18:42:36 +00:00
|
|
|
3A5E47C72A4A76C800C0D090 /* TrieTests.swift in Sources */,
|
2023-12-24 21:22:25 +00:00
|
|
|
B501062D2B363036003874F5 /* AuthIntegrationTests.swift in Sources */,
|
2023-01-16 20:57:31 +00:00
|
|
|
4CB883AE2976FA9300DC99E7 /* FormatTests.swift in Sources */,
|
2023-10-13 19:28:41 +00:00
|
|
|
D72A2D052AD9C1B5002AFF62 /* MockDamusState.swift in Sources */,
|
2024-02-19 20:53:54 +00:00
|
|
|
E06336AA2B75832100A88E6B /* ImageMetadataTest.swift in Sources */,
|
2022-05-09 02:01:42 +00:00
|
|
|
4C363AA02828A8DD006E126D /* LikeTests.swift in Sources */,
|
2022-05-24 19:57:40 +00:00
|
|
|
4C90BD1C283AC38E008EE7EF /* Bech32Tests.swift in Sources */,
|
2023-02-18 06:27:15 +00:00
|
|
|
50A50A8D29A09E1C00C01BE7 /* RequestTests.swift in Sources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
4CE6DEF827F7A08200C66700 /* damusTests.swift in Sources */,
|
2023-02-24 17:26:43 +00:00
|
|
|
3A3040F329A91366008A0F29 /* ProfileViewTests.swift in Sources */,
|
2023-01-25 17:53:41 +00:00
|
|
|
4CF0ABDC2981A19E00D66079 /* ListTests.swift in Sources */,
|
2023-08-06 01:33:01 +00:00
|
|
|
4C684A552A7E91FE005E6031 /* LongPostTests.swift in Sources */,
|
2024-01-13 19:19:44 +00:00
|
|
|
E02B54182B4DFADA0077FF42 /* Bech32ObjectTests.swift in Sources */,
|
2022-04-02 23:57:42 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
|
|
|
4CE6DEF927F7A08200C66700 /* Sources */ = {
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
|
|
|
4CE6DF0227F7A08200C66700 /* damusUITests.swift in Sources */,
|
|
|
|
4CE6DF0427F7A08200C66700 /* damusUITestsLaunchTests.swift in Sources */,
|
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C102AFEB061003A41B4 /* Sources */ = {
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
files = (
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21F2B0858D600234419 /* MigratedTypes.swift in Sources */,
|
|
|
|
D7CE1B472B0BE719002EDAD4 /* NativeObject.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D552B11758A00AD4105 /* UnmuteThreadNotify.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CCFC0E2B0587C300323D86 /* EventRef.swift in Sources */,
|
|
|
|
D7CCFC192B058A3F00323D86 /* Block.swift in Sources */,
|
|
|
|
D7CCFC112B05884E00323D86 /* AsciiCharacter.swift in Sources */,
|
|
|
|
D798D2202B08592000234419 /* NdbTagIterator.swift in Sources */,
|
|
|
|
D7CE1B1D2B0BE14A002EDAD4 /* verifier.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D4F2B11728000AD4105 /* NewEventsBits.swift in Sources */,
|
|
|
|
D7CB5D412B116F0900AD4105 /* StringCodable.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B1F2B0BE1B8002EDAD4 /* damus.c in Sources */,
|
|
|
|
D7CE1B1B2B0BE144002EDAD4 /* emitter.c in Sources */,
|
2023-12-01 21:26:14 +00:00
|
|
|
D7EDED342B12ACAE0018B19C /* DamusUserDefaults.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFC72B155BD0006CF0F4 /* Zap.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D562B11759900AD4105 /* MuteThreadNotify.swift in Sources */,
|
|
|
|
D7EDED182B1177A00018B19C /* LNUrlPayRequest.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21C2B0857E400234419 /* Bech32Object.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFD02B155D8C006CF0F4 /* ZapDataModel.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D572B11762900AD4105 /* UserStatus.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B402B0BE719002EDAD4 /* FlatBufferObject.swift in Sources */,
|
|
|
|
D7CE1B442B0BE719002EDAD4 /* Mutable.swift in Sources */,
|
|
|
|
D798D2212B08594800234419 /* NdbTagElem.swift in Sources */,
|
|
|
|
D7CE1B432B0BE719002EDAD4 /* String+extension.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D3F2B116DAD00AD4105 /* NotificationsManager.swift in Sources */,
|
|
|
|
D7CB5D602B11770C00AD4105 /* FollowState.swift in Sources */,
|
|
|
|
D7CB5D402B116E8A00AD4105 /* UserSettingsStore.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B1C2B0BE147002EDAD4 /* refmap.c in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFC92B155CA5006CF0F4 /* UpdateStatsNotify.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B242B0BE1F1002EDAD4 /* hash_u5.c in Sources */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C172AFEB061003A41B4 /* NotificationService.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D522B1174D100AD4105 /* FriendFilter.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B362B0BE702002EDAD4 /* FbConstants.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFD12B155DA4006CF0F4 /* RelayURL.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED272B117FF10018B19C /* CompatibleAttribute.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B222B0BE1EB002EDAD4 /* utf8.c in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFCD2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CCFC072B05833200323D86 /* NdbNote.swift in Sources */,
|
|
|
|
D7CE1B3F2B0BE719002EDAD4 /* Enum.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFD22B155E78006CF0F4 /* WalletConnect.swift in Sources */,
|
2023-12-01 21:26:54 +00:00
|
|
|
D7CD35132B1A72B800D63139 /* Constants.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED222B117DCA0018B19C /* SequenceUtils.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B422B0BE719002EDAD4 /* Offset.swift in Sources */,
|
Migrate NostrDB files to shared app group file container
This change was made so that NostrDB data can be accessed from different build targets such as the notification service extension.
Upon initialization of NostrDB, it will check both DB file locations (the old documents directory, and the new shared app group container). If it sees the DB is present on the old location, and not on the new location, it will move the files to the new location. In any other condition it will keep the files intact to prevent data loss.
In order to avoid any conflicts between the damusApp's Ndb instance and the extension's Ndb instance when writing or moving the file, a new parameter called "owns_db_file" was added, and set to "false" for the extension. This ensures that the extension will not attempt to move DB files or create a new DB file on its own. Only the main app can move or create the DB file.
Testing
-------
PASS
Device: iPhone 15 Pro simulator
iOS: 17.0.1
Damus: This commit
Steps:
1. Run with the debugger attached to the extension target.
2. Using Apple's push notification testing dashboard, send a test push notification with a real payload (that includes the nostr event under `nostr_event`. Payload generated by strfry-push-notify).
3. Watch logs. It should show a message like "Got push notification from <DISPLAY_NAME>", where `DISPLAY_NAME` is the correct profile name of the user who generated the event. PASS
Regression testing
------------------
Device: iPhone 13 Mini (Real device)
iOS: 17.1.1
Damus: This commit
Other preconditions:
- Damus is at 1.6 (29) at the start of the test
- NostrDB filled with real data on the old location
Steps:
1. Flash (upgrade) the new Damus version (this commit) (This will be the first time upgrading, shared file container is empty)
2. Try to use the app normally. Scroll and navigate to several locations. Interact with some notes. App should be stable, work, and appear to have profile names already (i.e. It shouldn't start with a bunch of npubs in the place of profile names on known contacts). PASS
3. Downgrade back to the App store version (v1.6 (29))
4. Try to use the app normally. Scroll and navigate, interact, etc. App should work and be stable, but profile name cache is expected to be lost (i.e. shows npubs for a bit until profile is reloaded into NostrDB). PASS
5. Upgrade app again to the version in this commit.
6. Repeat step 2. Everything should work as normal and all profiles should be preloaded from the start. PASS
Closes: https://github.com/damus-io/damus/issues/1744
2023-11-21 01:31:35 +00:00
|
|
|
D7FB10A72B0C371A00FA8D42 /* Log.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B232B0BE1EE002EDAD4 /* bolt11.c in Sources */,
|
|
|
|
D7CE1B182B0BDFDD002EDAD4 /* mdb.c in Sources */,
|
|
|
|
D7CCFC162B05894300323D86 /* Pubkey.swift in Sources */,
|
|
|
|
D7CE1B292B0BE239002EDAD4 /* node_id.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED2C2B128CFA0018B19C /* DamusColors.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B2E2B0BE25C002EDAD4 /* talstr.c in Sources */,
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC52B1538DF006CF0F4 /* NotificationExtensionState.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D2292B08686C00234419 /* ContentParsing.swift in Sources */,
|
|
|
|
D798D2242B0859C900234419 /* LocalizationUtil.swift in Sources */,
|
|
|
|
D7CE1B322B0BE6C3002EDAD4 /* NdbTxn.swift in Sources */,
|
|
|
|
D7CE1B372B0BE719002EDAD4 /* Verifier.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFC82B155C9D006CF0F4 /* InsertSort.swift in Sources */,
|
2024-01-30 07:41:38 +00:00
|
|
|
D723411A2B6864F200E1E135 /* DamusPurpleEnvironment.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED292B1182060018B19C /* AttachMediaUtility.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21A2B0856CC00234419 /* Mentions.swift in Sources */,
|
|
|
|
D7CE1B212B0BE1CB002EDAD4 /* wasm.c in Sources */,
|
|
|
|
D7CE1B3B2B0BE719002EDAD4 /* Int+extension.swift in Sources */,
|
2023-12-01 21:26:27 +00:00
|
|
|
D74AAFC62B155B8B006CF0F4 /* Zaps.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CCFC0B2B0585EA00323D86 /* nostrdb.c in Sources */,
|
|
|
|
D7CE1B252B0BE1F4002EDAD4 /* sha256.c in Sources */,
|
|
|
|
D7CE1B262B0BE1F8002EDAD4 /* bech32.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED232B117DFB0018B19C /* NoteContent.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D21B2B0856F200234419 /* NdbTagsIterator.swift in Sources */,
|
|
|
|
D7CE1B352B0BE6FA002EDAD4 /* ByteBuffer.swift in Sources */,
|
|
|
|
D7CE1B2F2B0BE260002EDAD4 /* list.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D422B116F8900AD4105 /* Contacts.swift in Sources */,
|
|
|
|
D7CB5D5D2B1176B200AD4105 /* MediaUploader.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B342B0BE6EE002EDAD4 /* NdbProfile.swift in Sources */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D7DBD41F2B02F15E002A6197 /* NostrKind.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B3C2B0BE719002EDAD4 /* TableVerifier.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED2F2B128E8A0018B19C /* CollectionExtension.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CCFC082B05834500323D86 /* NoteId.swift in Sources */,
|
|
|
|
D7CE1B1A2B0BE135002EDAD4 /* json_parser.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED2A2B128CB40018B19C /* Nip98HTTPAuth.swift in Sources */,
|
|
|
|
D7CB5D592B11764000AD4105 /* NewUnmutesNotify.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D2252B0859D700234419 /* Post.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED172B1177960018B19C /* TranslationService.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CCFC0F2B0587F600323D86 /* Keys.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D542B1174F700AD4105 /* NIP05.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D2232B0859B700234419 /* KeychainStorage.swift in Sources */,
|
2023-12-01 21:26:21 +00:00
|
|
|
D74AAFC32B153395006CF0F4 /* HeadlessDamusState.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B272B0BE224002EDAD4 /* bech32_util.c in Sources */,
|
|
|
|
D7CCFC102B05880F00323D86 /* Id.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D532B1174E900AD4105 /* DeepLPlan.swift in Sources */,
|
|
|
|
D7EDED282B1180940018B19C /* ImageUploadModel.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B2A2B0BE23E002EDAD4 /* mem.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D4C2B11721600AD4105 /* ZapType.swift in Sources */,
|
|
|
|
D7EDED2B2B128CDB0018B19C /* Hashtags.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B332B0BE6DE002EDAD4 /* Nostr.swift in Sources */,
|
|
|
|
D7CE1B3D2B0BE719002EDAD4 /* Verifiable.swift in Sources */,
|
|
|
|
D7CE1B382B0BE719002EDAD4 /* VeriferOptions.swift in Sources */,
|
|
|
|
D7CCFC152B05891000323D86 /* Referenced.swift in Sources */,
|
|
|
|
D7CE1B2B2B0BE243002EDAD4 /* hex.c in Sources */,
|
|
|
|
D798D2222B08598A00234419 /* ReferencedId.swift in Sources */,
|
|
|
|
D7CE1B492B0BE729002EDAD4 /* DisplayName.swift in Sources */,
|
|
|
|
D7CE1B192B0BE132002EDAD4 /* builder.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED1F2B11797D0018B19C /* LongformEvent.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B282B0BE226002EDAD4 /* tal.c in Sources */,
|
|
|
|
D7CCFC122B05886D00323D86 /* IdType.swift in Sources */,
|
|
|
|
D7CE1B312B0BE69D002EDAD4 /* Ndb.swift in Sources */,
|
|
|
|
D7CE1B3A2B0BE719002EDAD4 /* Struct.swift in Sources */,
|
2023-11-14 07:21:39 +00:00
|
|
|
D70A3B172B02DCE5008BD568 /* NotificationFormatter.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B462B0BE719002EDAD4 /* FlatBufferBuilder.swift in Sources */,
|
|
|
|
D7CE1B3E2B0BE719002EDAD4 /* FlatbuffersErrors.swift in Sources */,
|
|
|
|
D7CE1B2C2B0BE24B002EDAD4 /* amount.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED152B11776B0018B19C /* LibreTranslateServer.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B202B0BE1C8002EDAD4 /* error.c in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D582B11763C00AD4105 /* NewMutesNotify.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D22D2B086DC400234419 /* NostrEvent.swift in Sources */,
|
|
|
|
D798D22E2B086E4800234419 /* NostrResponse.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED162B1177840018B19C /* LNUrls.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B302B0BE263002EDAD4 /* nostr_bech32.c in Sources */,
|
|
|
|
D7CCFC132B05887C00323D86 /* ProofOfWork.swift in Sources */,
|
|
|
|
D7CE1B392B0BE719002EDAD4 /* Table.swift in Sources */,
|
|
|
|
D7CE1B452B0BE719002EDAD4 /* Root.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D472B11718700AD4105 /* Wallet.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B412B0BE719002EDAD4 /* FlatBuffersUtils.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D482B11719300AD4105 /* Profiles.swift in Sources */,
|
2024-01-18 01:17:36 +00:00
|
|
|
B5C60C212B530D5600C5ECA7 /* MuteItem.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D798D2262B085C4200234419 /* Bech32.swift in Sources */,
|
|
|
|
D7CE1B482B0BE719002EDAD4 /* Message.swift in Sources */,
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7CB5D462B11703D00AD4105 /* Notify.swift in Sources */,
|
|
|
|
D7EDED262B117FC80018B19C /* StringUtil.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B1E2B0BE190002EDAD4 /* midl.c in Sources */,
|
2023-12-01 21:25:49 +00:00
|
|
|
D7CB5D3C2B1130C600AD4105 /* LocalNotification.swift in Sources */,
|
2023-11-16 02:09:28 +00:00
|
|
|
D7CE1B2D2B0BE250002EDAD4 /* take.c in Sources */,
|
2024-02-10 16:36:47 +00:00
|
|
|
B59CAD4D2B688D1000677E8B /* MutelistManager.swift in Sources */,
|
2023-11-14 07:21:39 +00:00
|
|
|
);
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXSourcesBuildPhase section */
|
|
|
|
|
|
|
|
/* Begin PBXTargetDependency section */
|
|
|
|
4CE6DEF527F7A08200C66700 /* PBXTargetDependency */ = {
|
|
|
|
isa = PBXTargetDependency;
|
|
|
|
target = 4CE6DEE227F7A08100C66700 /* damus */;
|
|
|
|
targetProxy = 4CE6DEF427F7A08200C66700 /* PBXContainerItemProxy */;
|
|
|
|
};
|
|
|
|
4CE6DEFF27F7A08200C66700 /* PBXTargetDependency */ = {
|
|
|
|
isa = PBXTargetDependency;
|
|
|
|
target = 4CE6DEE227F7A08100C66700 /* damus */;
|
|
|
|
targetProxy = 4CE6DEFE27F7A08200C66700 /* PBXContainerItemProxy */;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C1A2AFEB061003A41B4 /* PBXTargetDependency */ = {
|
|
|
|
isa = PBXTargetDependency;
|
|
|
|
target = D79C4C132AFEB061003A41B4 /* DamusNotificationService */;
|
|
|
|
targetProxy = D79C4C192AFEB061003A41B4 /* PBXContainerItemProxy */;
|
|
|
|
};
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED252B117F7C0018B19C /* PBXTargetDependency */ = {
|
|
|
|
isa = PBXTargetDependency;
|
|
|
|
productRef = D7EDED242B117F7C0018B19C /* MarkdownUI */;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End PBXTargetDependency section */
|
|
|
|
|
2022-12-31 21:27:17 +00:00
|
|
|
/* Begin PBXVariantGroup section */
|
|
|
|
3A4325AA2961E11400BFCD9D /* Localizable.stringsdict */ = {
|
|
|
|
isa = PBXVariantGroup;
|
|
|
|
children = (
|
2023-02-02 14:28:41 +00:00
|
|
|
3AC524F0298C000B00693EBF /* ar */,
|
2023-03-11 22:06:34 +00:00
|
|
|
3AA5E70729B9E84A002701ED /* bg */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A8624DB299E82BE00BD8BE9 /* cs */,
|
|
|
|
3AB5B86C2986D8A3006599D2 /* de */,
|
|
|
|
3A25EF152992DA5D008ABE69 /* el-GR */,
|
|
|
|
3A2B8B0A296A8982009CC16D /* en-US */,
|
|
|
|
3A5C4575296A879E0032D398 /* es-419 */,
|
|
|
|
3A325AC929C9E0CF002BE7ED /* es-ES */,
|
2023-03-11 22:06:34 +00:00
|
|
|
3AD5662C29BD2F5300BF77C5 /* fa */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A47CB792BDA05A200728A7C /* fi */,
|
|
|
|
3A821C4029E819D500B4BCA7 /* fr */,
|
2023-03-17 02:55:54 +00:00
|
|
|
3AD14EB529C40F38009D2D9C /* hu-HU */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A41E55B299D52BE001FA465 /* id */,
|
|
|
|
3A929C22297F2CF80090925E /* it-IT */,
|
|
|
|
3A66D929299472FA008B44F4 /* ja */,
|
|
|
|
3AD5663229C0DA4B00BF77C5 /* ko */,
|
|
|
|
3A185A06297F2C3800F4BDC0 /* lv-LV */,
|
|
|
|
3A96D41C298DA94500388A2A /* nl */,
|
|
|
|
3A93342B29884CA600D6A8F3 /* pl-PL */,
|
2023-03-21 12:53:57 +00:00
|
|
|
3AC59CA929CDDB78007E04A6 /* pt-BR */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3AF6336A29884C6B0005672A /* pt-PT */,
|
|
|
|
3A827A1A299FC69D00C4D171 /* ru */,
|
|
|
|
3AD14EB829C40F3F009D2D9C /* sv-SE */,
|
2023-07-09 19:18:50 +00:00
|
|
|
3ABACEC02A5B3ED10037A847 /* sw */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A994C4C2BE5B9370019F632 /* th */,
|
|
|
|
3AEB8005297CCEA900713A25 /* tr-TR */,
|
|
|
|
3AA5E70429B682B3002701ED /* uk */,
|
|
|
|
3A325AC629C9E0B8002BE7ED /* vi */,
|
|
|
|
3A5CAE1F298DC0DB00B5334F /* zh-CN */,
|
|
|
|
3A3040FB29A91F03008A0F29 /* zh-HK */,
|
|
|
|
3A3040FD29A91F31008A0F29 /* zh-TW */,
|
2022-12-31 21:27:17 +00:00
|
|
|
);
|
|
|
|
name = Localizable.stringsdict;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2023-01-17 01:44:41 +00:00
|
|
|
3ACB685A297633BC00C46468 /* InfoPlist.strings */ = {
|
|
|
|
isa = PBXVariantGroup;
|
|
|
|
children = (
|
2023-02-02 14:28:41 +00:00
|
|
|
3AC524EE298C000B00693EBF /* ar */,
|
2023-03-11 22:06:34 +00:00
|
|
|
3AA5E70529B9E83E002701ED /* bg */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A8624D9299E82BE00BD8BE9 /* cs */,
|
|
|
|
3AB5B86A2986D8A3006599D2 /* de */,
|
|
|
|
3A25EF132992DA5D008ABE69 /* el-GR */,
|
|
|
|
3ACB685B297633BC00C46468 /* es-419 */,
|
|
|
|
3A325AC829C9E0CF002BE7ED /* es-ES */,
|
2023-03-11 22:06:34 +00:00
|
|
|
3AD5662B29BD2F5300BF77C5 /* fa */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A47CB772BDA05A200728A7C /* fi */,
|
|
|
|
3A821C3F29E819D500B4BCA7 /* fr */,
|
2023-03-17 02:55:54 +00:00
|
|
|
3AD14EB629C40F38009D2D9C /* hu-HU */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A41E559299D52BE001FA465 /* id */,
|
|
|
|
3A929C20297F2CF80090925E /* it-IT */,
|
|
|
|
3A66D927299472FA008B44F4 /* ja */,
|
|
|
|
3AD5663329C0DA4B00BF77C5 /* ko */,
|
|
|
|
3A96D41A298DA94500388A2A /* nl */,
|
|
|
|
3A185A04297F2C3800F4BDC0 /* lv-LV */,
|
|
|
|
3A93342929884CA600D6A8F3 /* pl-PL */,
|
2023-03-21 12:53:57 +00:00
|
|
|
3AC59CA829CDDB78007E04A6 /* pt-BR */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3AF6336829884C6B0005672A /* pt-PT */,
|
|
|
|
3A827A18299FC69D00C4D171 /* ru */,
|
|
|
|
3AD14EB929C40F3F009D2D9C /* sv-SE */,
|
2023-07-09 19:18:50 +00:00
|
|
|
3ABACEBF2A5B3ED10037A847 /* sw */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A994C4D2BE5B9370019F632 /* th */,
|
|
|
|
3AEB8003297CCEA800713A25 /* tr-TR */,
|
|
|
|
3AA5E70329B682AD002701ED /* uk */,
|
|
|
|
3A325AC529C9E0B8002BE7ED /* vi */,
|
|
|
|
3A5CAE1D298DC0DB00B5334F /* zh-CN */,
|
|
|
|
3A3040F929A91ED6008A0F29 /* zh-HK */,
|
|
|
|
3A3040FC29A91F31008A0F29 /* zh-TW */,
|
2023-01-17 01:44:41 +00:00
|
|
|
);
|
|
|
|
name = InfoPlist.strings;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
|
|
|
3ACB685D297633BC00C46468 /* Localizable.strings */ = {
|
|
|
|
isa = PBXVariantGroup;
|
|
|
|
children = (
|
2023-02-02 14:28:41 +00:00
|
|
|
3AC524EF298C000B00693EBF /* ar */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3AA5E70629B9E844002701ED /* bg */,
|
2023-02-16 15:17:09 +00:00
|
|
|
3A8624DA299E82BE00BD8BE9 /* cs */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3AB5B86B2986D8A3006599D2 /* de */,
|
|
|
|
3A25EF142992DA5D008ABE69 /* el-GR */,
|
2023-02-26 18:01:23 +00:00
|
|
|
3A3040FF29AB02D1008A0F29 /* en-US */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3ACB685E297633BC00C46468 /* es-419 */,
|
|
|
|
3A325AC729C9E0CF002BE7ED /* es-ES */,
|
2023-03-11 22:06:34 +00:00
|
|
|
3AD5662D29BD2F5300BF77C5 /* fa */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A47CB782BDA05A200728A7C /* fi */,
|
|
|
|
3A821C3E29E819D500B4BCA7 /* fr */,
|
|
|
|
3A41E55A299D52BE001FA465 /* id */,
|
2023-03-17 02:55:54 +00:00
|
|
|
3AD14EB729C40F38009D2D9C /* hu-HU */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A929C21297F2CF80090925E /* it-IT */,
|
|
|
|
3A66D928299472FA008B44F4 /* ja */,
|
|
|
|
3AD5663129C0DA4B00BF77C5 /* ko */,
|
|
|
|
3A185A05297F2C3800F4BDC0 /* lv-LV */,
|
|
|
|
3A96D41B298DA94500388A2A /* nl */,
|
|
|
|
3A93342A29884CA600D6A8F3 /* pl-PL */,
|
2023-03-21 12:53:57 +00:00
|
|
|
3AC59CA729CDDB78007E04A6 /* pt-BR */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3AF6336929884C6B0005672A /* pt-PT */,
|
|
|
|
3A827A19299FC69D00C4D171 /* ru */,
|
|
|
|
3AD14EBA29C40F3F009D2D9C /* sv-SE */,
|
2023-07-09 19:18:50 +00:00
|
|
|
3ABACEC12A5B3ED10037A847 /* sw */,
|
2024-05-04 01:02:47 +00:00
|
|
|
3A994C4E2BE5B9370019F632 /* th */,
|
|
|
|
3AEB8004297CCEA800713A25 /* tr-TR */,
|
|
|
|
3AA5E70229B682A5002701ED /* uk */,
|
|
|
|
3A325AC429C9E0B8002BE7ED /* vi */,
|
|
|
|
3A5CAE1E298DC0DB00B5334F /* zh-CN */,
|
|
|
|
3A3040FA29A91EFC008A0F29 /* zh-HK */,
|
|
|
|
3A3040FE29A91F31008A0F29 /* zh-TW */,
|
2023-01-17 01:44:41 +00:00
|
|
|
);
|
|
|
|
name = Localizable.strings;
|
|
|
|
sourceTree = "<group>";
|
|
|
|
};
|
2022-12-31 21:27:17 +00:00
|
|
|
/* End PBXVariantGroup section */
|
|
|
|
|
2022-04-02 23:57:42 +00:00
|
|
|
/* Begin XCBuildConfiguration section */
|
|
|
|
4CE6DF0527F7A08200C66700 /* Debug */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
2024-01-24 17:39:42 +00:00
|
|
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
2023-01-08 05:24:35 +00:00
|
|
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
|
|
|
CLANG_ENABLE_MODULES = YES;
|
|
|
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
|
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
|
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
|
|
CLANG_WARN_COMMA = YES;
|
|
|
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
|
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
|
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
|
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
|
|
CLANG_WARN_EMPTY_BODY = YES;
|
|
|
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
|
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
|
|
CLANG_WARN_INT_CONVERSION = YES;
|
|
|
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
|
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
|
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
|
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
|
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
|
|
COPY_PHASE_STRIP = NO;
|
2024-03-11 09:38:29 +00:00
|
|
|
CURRENT_PROJECT_VERSION = 1;
|
2022-04-02 23:57:42 +00:00
|
|
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
|
|
ENABLE_TESTABILITY = YES;
|
2023-08-01 15:27:47 +00:00
|
|
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
2022-04-02 23:57:42 +00:00
|
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
|
|
GCC_DYNAMIC_NO_PIC = NO;
|
|
|
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
|
|
GCC_OPTIMIZATION_LEVEL = 0;
|
|
|
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
|
|
"DEBUG=1",
|
|
|
|
"$(inherited)",
|
|
|
|
);
|
|
|
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
|
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
|
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
|
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
|
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
|
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
2023-07-17 20:21:03 +00:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2022-04-03 22:40:18 +00:00
|
|
|
MACOSX_DEPLOYMENT_TARGET = 12.3;
|
2024-03-11 09:59:21 +00:00
|
|
|
MARKETING_VERSION = 1.8;
|
2022-04-02 23:57:42 +00:00
|
|
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
|
|
|
MTL_FAST_MATH = YES;
|
|
|
|
ONLY_ACTIVE_ARCH = YES;
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
2023-01-08 05:24:35 +00:00
|
|
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
|
|
};
|
|
|
|
name = Debug;
|
|
|
|
};
|
|
|
|
4CE6DF0627F7A08200C66700 /* Release */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
2024-01-24 17:39:42 +00:00
|
|
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
2023-01-08 05:24:35 +00:00
|
|
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
|
|
|
CLANG_ENABLE_MODULES = YES;
|
|
|
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
|
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
|
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
|
|
CLANG_WARN_COMMA = YES;
|
|
|
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
|
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
|
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
|
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
|
|
CLANG_WARN_EMPTY_BODY = YES;
|
|
|
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
|
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
|
|
CLANG_WARN_INT_CONVERSION = YES;
|
|
|
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
|
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
|
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
|
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
|
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
|
|
COPY_PHASE_STRIP = NO;
|
2024-03-11 09:38:29 +00:00
|
|
|
CURRENT_PROJECT_VERSION = 1;
|
2022-04-02 23:57:42 +00:00
|
|
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
|
|
ENABLE_NS_ASSERTIONS = NO;
|
|
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
2023-08-01 15:27:47 +00:00
|
|
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
2022-04-02 23:57:42 +00:00
|
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
|
|
GCC_NO_COMMON_BLOCKS = YES;
|
2023-07-21 21:55:23 +00:00
|
|
|
"GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "";
|
2022-04-02 23:57:42 +00:00
|
|
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
|
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
|
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
|
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
|
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
|
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
2023-07-17 20:21:03 +00:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2022-04-03 22:40:18 +00:00
|
|
|
MACOSX_DEPLOYMENT_TARGET = 12.3;
|
2024-03-11 09:59:21 +00:00
|
|
|
MARKETING_VERSION = 1.8;
|
2022-04-02 23:57:42 +00:00
|
|
|
MTL_ENABLE_DEBUG_INFO = NO;
|
|
|
|
MTL_FAST_MATH = YES;
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
SWIFT_COMPILATION_MODE = wholemodule;
|
2023-01-08 05:24:35 +00:00
|
|
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
|
|
|
VALIDATE_PRODUCT = YES;
|
|
|
|
};
|
|
|
|
name = Release;
|
|
|
|
};
|
|
|
|
4CE6DF0827F7A08200C66700 /* Debug */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
2023-11-14 07:21:39 +00:00
|
|
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
|
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
2022-10-17 22:20:38 +00:00
|
|
|
CLANG_ENABLE_MODULES = YES;
|
2022-07-22 00:54:11 +00:00
|
|
|
CODE_SIGN_ENTITLEMENTS = damus/damus.entitlements;
|
2022-04-02 23:57:42 +00:00
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\"";
|
2023-01-28 18:52:34 +00:00
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
2022-04-02 23:57:42 +00:00
|
|
|
ENABLE_PREVIEWS = YES;
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
2022-04-11 16:29:30 +00:00
|
|
|
INFOPLIST_FILE = damus/Info.plist;
|
2022-04-30 17:37:29 +00:00
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = Damus;
|
2023-01-01 19:47:15 +00:00
|
|
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
2023-11-15 20:48:56 +00:00
|
|
|
INFOPLIST_KEY_NSCameraUsageDescription = "Damus needs access to your camera if you want to scan QR codes and upload photos from it";
|
2023-02-05 04:11:36 +00:00
|
|
|
INFOPLIST_KEY_NSFaceIDUsageDescription = "Local authentication to access private key";
|
2023-03-31 03:59:24 +00:00
|
|
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Damus needs access to your microphone if you want to upload recorded videos from it";
|
2023-01-21 01:49:28 +00:00
|
|
|
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "Granting Damus access to your photos allows you to save images.";
|
2022-04-02 23:57:42 +00:00
|
|
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
|
|
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
|
|
|
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
2023-05-20 17:38:06 +00:00
|
|
|
INFOPLIST_KEY_UILaunchStoryboardName = Launch.storyboard;
|
2022-04-02 23:57:42 +00:00
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
2023-04-29 18:38:28 +00:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2022-04-02 23:57:42 +00:00
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
"$(inherited)",
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
);
|
2022-04-12 13:47:54 +00:00
|
|
|
LIBRARY_SEARCH_PATHS = (
|
|
|
|
"$(inherited)",
|
|
|
|
"$(PROJECT_DIR)",
|
|
|
|
);
|
2024-04-13 01:23:30 +00:00
|
|
|
MARKETING_VERSION = 1.9;
|
2022-06-09 18:40:41 +00:00
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
|
2022-04-02 23:57:42 +00:00
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
2023-04-15 00:32:00 +00:00
|
|
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
|
|
|
SUPPORTS_MACCATALYST = YES;
|
|
|
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
2024-01-28 23:13:39 +00:00
|
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
2022-04-02 23:57:42 +00:00
|
|
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
2022-10-17 22:20:38 +00:00
|
|
|
SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h";
|
|
|
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
2022-04-02 23:57:42 +00:00
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
};
|
|
|
|
name = Debug;
|
|
|
|
};
|
|
|
|
4CE6DF0927F7A08200C66700 /* Release */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
2023-11-14 07:21:39 +00:00
|
|
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
|
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
2022-10-17 22:20:38 +00:00
|
|
|
CLANG_ENABLE_MODULES = YES;
|
2022-07-22 00:54:11 +00:00
|
|
|
CODE_SIGN_ENTITLEMENTS = damus/damus.entitlements;
|
2022-04-02 23:57:42 +00:00
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
DEVELOPMENT_ASSET_PATHS = "\"damus/Preview Content\"";
|
2022-12-20 04:58:41 +00:00
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
2022-04-02 23:57:42 +00:00
|
|
|
ENABLE_PREVIEWS = YES;
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
2022-04-11 16:29:30 +00:00
|
|
|
INFOPLIST_FILE = damus/Info.plist;
|
2022-04-30 17:37:29 +00:00
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = Damus;
|
2023-01-01 19:47:15 +00:00
|
|
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
2023-11-15 20:48:56 +00:00
|
|
|
INFOPLIST_KEY_NSCameraUsageDescription = "Damus needs access to your camera if you want to scan QR codes and upload photos from it";
|
2023-02-05 04:11:36 +00:00
|
|
|
INFOPLIST_KEY_NSFaceIDUsageDescription = "Local authentication to access private key";
|
2023-03-31 03:59:24 +00:00
|
|
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Damus needs access to your microphone if you want to upload recorded videos from it";
|
2023-01-21 01:49:28 +00:00
|
|
|
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "Granting Damus access to your photos allows you to save images.";
|
2022-04-02 23:57:42 +00:00
|
|
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
|
|
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
|
|
|
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
2023-05-20 17:38:06 +00:00
|
|
|
INFOPLIST_KEY_UILaunchStoryboardName = Launch.storyboard;
|
2022-04-02 23:57:42 +00:00
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
2023-04-29 18:38:28 +00:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2022-04-02 23:57:42 +00:00
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
"$(inherited)",
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
);
|
2022-04-12 13:47:54 +00:00
|
|
|
LIBRARY_SEARCH_PATHS = (
|
|
|
|
"$(inherited)",
|
|
|
|
"$(PROJECT_DIR)",
|
|
|
|
);
|
2024-04-13 01:23:30 +00:00
|
|
|
MARKETING_VERSION = 1.9;
|
2022-06-09 18:40:41 +00:00
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2;
|
2022-04-02 23:57:42 +00:00
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
2023-04-15 00:32:00 +00:00
|
|
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
|
|
|
SUPPORTS_MACCATALYST = YES;
|
|
|
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
2022-04-02 23:57:42 +00:00
|
|
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
2022-10-17 22:20:38 +00:00
|
|
|
SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h";
|
2022-04-02 23:57:42 +00:00
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
};
|
|
|
|
name = Release;
|
|
|
|
};
|
|
|
|
4CE6DF0B27F7A08200C66700 /* Debug */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
|
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
2023-07-02 14:08:32 +00:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2022-04-02 23:57:42 +00:00
|
|
|
MARKETING_VERSION = 1.0;
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damusTests;
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/damus.app/damus";
|
|
|
|
};
|
|
|
|
name = Debug;
|
|
|
|
};
|
|
|
|
4CE6DF0C27F7A08200C66700 /* Release */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
|
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
2023-07-02 14:08:32 +00:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2022-04-02 23:57:42 +00:00
|
|
|
MARKETING_VERSION = 1.0;
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damusTests;
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/damus.app/damus";
|
|
|
|
};
|
|
|
|
name = Release;
|
|
|
|
};
|
|
|
|
4CE6DF0E27F7A08200C66700 /* Debug */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
|
|
MARKETING_VERSION = 1.0;
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damusUITests;
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
TEST_TARGET_NAME = damus;
|
|
|
|
};
|
|
|
|
name = Debug;
|
|
|
|
};
|
|
|
|
4CE6DF0F27F7A08200C66700 /* Release */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
|
|
MARKETING_VERSION = 1.0;
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damusUITests;
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
TEST_TARGET_NAME = damus;
|
|
|
|
};
|
|
|
|
name = Release;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C1E2AFEB061003A41B4 /* Debug */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
2023-11-16 02:09:28 +00:00
|
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
2023-11-14 07:21:39 +00:00
|
|
|
CODE_SIGN_ENTITLEMENTS = DamusNotificationService/DamusNotificationService.entitlements;
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
|
|
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
2023-11-16 02:09:28 +00:00
|
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
2023-11-14 07:21:39 +00:00
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
|
|
INFOPLIST_FILE = DamusNotificationService/Info.plist;
|
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = DamusNotificationService;
|
|
|
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
"$(inherited)",
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
"@executable_path/../../Frameworks",
|
|
|
|
);
|
|
|
|
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2.DamusNotificationService;
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
SKIP_INSTALL = YES;
|
|
|
|
SUPPORTS_MACCATALYST = YES;
|
|
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
|
|
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
2023-11-16 02:09:28 +00:00
|
|
|
SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h";
|
2023-11-14 07:21:39 +00:00
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
};
|
|
|
|
name = Debug;
|
|
|
|
};
|
|
|
|
D79C4C1F2AFEB061003A41B4 /* Release */ = {
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
buildSettings = {
|
|
|
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
2023-11-16 02:09:28 +00:00
|
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
2023-11-14 07:21:39 +00:00
|
|
|
CODE_SIGN_ENTITLEMENTS = DamusNotificationService/DamusNotificationService.entitlements;
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
DEVELOPMENT_TEAM = XK7H4JAB3D;
|
|
|
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
2023-11-16 02:09:28 +00:00
|
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
2023-11-14 07:21:39 +00:00
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
|
|
INFOPLIST_FILE = DamusNotificationService/Info.plist;
|
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = DamusNotificationService;
|
|
|
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
"$(inherited)",
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
"@executable_path/../../Frameworks",
|
|
|
|
);
|
|
|
|
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2.DamusNotificationService;
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
SKIP_INSTALL = YES;
|
|
|
|
SUPPORTS_MACCATALYST = YES;
|
|
|
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
2023-11-16 02:09:28 +00:00
|
|
|
SWIFT_OBJC_BRIDGING_HEADER = "damus-c/damus-Bridging-Header.h";
|
2023-11-14 07:21:39 +00:00
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
};
|
|
|
|
name = Release;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End XCBuildConfiguration section */
|
|
|
|
|
|
|
|
/* Begin XCConfigurationList section */
|
|
|
|
4CE6DEDE27F7A08100C66700 /* Build configuration list for PBXProject "damus" */ = {
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
buildConfigurations = (
|
|
|
|
4CE6DF0527F7A08200C66700 /* Debug */,
|
|
|
|
4CE6DF0627F7A08200C66700 /* Release */,
|
|
|
|
);
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
defaultConfigurationName = Release;
|
|
|
|
};
|
|
|
|
4CE6DF0727F7A08200C66700 /* Build configuration list for PBXNativeTarget "damus" */ = {
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
buildConfigurations = (
|
|
|
|
4CE6DF0827F7A08200C66700 /* Debug */,
|
|
|
|
4CE6DF0927F7A08200C66700 /* Release */,
|
|
|
|
);
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
defaultConfigurationName = Release;
|
|
|
|
};
|
|
|
|
4CE6DF0A27F7A08200C66700 /* Build configuration list for PBXNativeTarget "damusTests" */ = {
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
buildConfigurations = (
|
|
|
|
4CE6DF0B27F7A08200C66700 /* Debug */,
|
|
|
|
4CE6DF0C27F7A08200C66700 /* Release */,
|
|
|
|
);
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
defaultConfigurationName = Release;
|
|
|
|
};
|
|
|
|
4CE6DF0D27F7A08200C66700 /* Build configuration list for PBXNativeTarget "damusUITests" */ = {
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
buildConfigurations = (
|
|
|
|
4CE6DF0E27F7A08200C66700 /* Debug */,
|
|
|
|
4CE6DF0F27F7A08200C66700 /* Release */,
|
|
|
|
);
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
defaultConfigurationName = Release;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D79C4C202AFEB061003A41B4 /* Build configuration list for PBXNativeTarget "DamusNotificationService" */ = {
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
buildConfigurations = (
|
|
|
|
D79C4C1E2AFEB061003A41B4 /* Debug */,
|
|
|
|
D79C4C1F2AFEB061003A41B4 /* Release */,
|
|
|
|
);
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
defaultConfigurationName = Release;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End XCConfigurationList section */
|
|
|
|
|
|
|
|
/* Begin XCRemoteSwiftPackageReference section */
|
2024-04-20 18:27:24 +00:00
|
|
|
3AFE89C12BD4156F00AD31EF /* XCRemoteSwiftPackageReference "MCEmojiPicker" */ = {
|
|
|
|
isa = XCRemoteSwiftPackageReference;
|
|
|
|
repositoryURL = "https://github.com/izyumkin/MCEmojiPicker";
|
|
|
|
requirement = {
|
|
|
|
kind = upToNextMajorVersion;
|
|
|
|
minimumVersion = 1.2.3;
|
|
|
|
};
|
|
|
|
};
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670228FC7EC500038D2A /* XCRemoteSwiftPackageReference "Kingfisher" */ = {
|
|
|
|
isa = XCRemoteSwiftPackageReference;
|
|
|
|
repositoryURL = "https://github.com/onevcat/Kingfisher";
|
|
|
|
requirement = {
|
|
|
|
kind = upToNextMajorVersion;
|
|
|
|
minimumVersion = 7.0.0;
|
|
|
|
};
|
|
|
|
};
|
2023-07-16 21:35:06 +00:00
|
|
|
4C27C9302A64766F007DBC75 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */ = {
|
|
|
|
isa = XCRemoteSwiftPackageReference;
|
|
|
|
repositoryURL = "https://github.com/damus-io/swift-markdown-ui";
|
|
|
|
requirement = {
|
|
|
|
branch = 76bb7971da7fbf429de1c84f1244adf657242fee;
|
|
|
|
kind = branch;
|
|
|
|
};
|
|
|
|
};
|
2022-06-30 14:16:48 +00:00
|
|
|
4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */ = {
|
2022-04-02 23:57:42 +00:00
|
|
|
isa = XCRemoteSwiftPackageReference;
|
2022-06-30 14:16:48 +00:00
|
|
|
repositoryURL = "https://github.com/jb55/secp256k1.swift";
|
2022-04-02 23:57:42 +00:00
|
|
|
requirement = {
|
2022-06-30 14:16:48 +00:00
|
|
|
kind = revision;
|
|
|
|
revision = 40b4b38b3b1c83f7088c76189a742870e0ca06a9;
|
2022-04-02 23:57:42 +00:00
|
|
|
};
|
|
|
|
};
|
2023-05-26 17:00:29 +00:00
|
|
|
4CCF9AB02A1FE80B00E03CFB /* XCRemoteSwiftPackageReference "GSPlayer" */ = {
|
|
|
|
isa = XCRemoteSwiftPackageReference;
|
|
|
|
repositoryURL = "https://github.com/wxxsw/GSPlayer";
|
|
|
|
requirement = {
|
|
|
|
kind = upToNextMajorVersion;
|
|
|
|
minimumVersion = 0.2.26;
|
|
|
|
};
|
|
|
|
};
|
2023-10-07 01:21:53 +00:00
|
|
|
D7A343EC2AD0D77C00CED48B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = {
|
|
|
|
isa = XCRemoteSwiftPackageReference;
|
|
|
|
repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing";
|
|
|
|
requirement = {
|
|
|
|
kind = upToNextMajorVersion;
|
|
|
|
minimumVersion = 1.14.1;
|
|
|
|
};
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End XCRemoteSwiftPackageReference section */
|
|
|
|
|
|
|
|
/* Begin XCSwiftPackageProductDependency section */
|
2024-04-20 18:27:24 +00:00
|
|
|
3AFE89C22BD4156F00AD31EF /* MCEmojiPicker */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 3AFE89C12BD4156F00AD31EF /* XCRemoteSwiftPackageReference "MCEmojiPicker" */;
|
|
|
|
productName = MCEmojiPicker;
|
|
|
|
};
|
2022-10-16 18:09:29 +00:00
|
|
|
4C06670328FC7EC500038D2A /* Kingfisher */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 4C06670228FC7EC500038D2A /* XCRemoteSwiftPackageReference "Kingfisher" */;
|
|
|
|
productName = Kingfisher;
|
|
|
|
};
|
2023-07-16 21:35:06 +00:00
|
|
|
4C27C9312A64766F007DBC75 /* MarkdownUI */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 4C27C9302A64766F007DBC75 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */;
|
|
|
|
productName = MarkdownUI;
|
|
|
|
};
|
2022-06-30 14:16:48 +00:00
|
|
|
4C649880286E0EE300EAE2B3 /* secp256k1 */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */;
|
|
|
|
productName = secp256k1;
|
|
|
|
};
|
2023-11-14 07:21:39 +00:00
|
|
|
D789D11F2AFEFBF20083A7AB /* secp256k1 */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */;
|
|
|
|
productName = secp256k1;
|
|
|
|
};
|
2023-10-07 01:21:53 +00:00
|
|
|
D7A343ED2AD0D77C00CED48B /* InlineSnapshotTesting */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = D7A343EC2AD0D77C00CED48B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */;
|
|
|
|
productName = InlineSnapshotTesting;
|
|
|
|
};
|
|
|
|
D7A343EF2AD0D77C00CED48B /* SnapshotTesting */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = D7A343EC2AD0D77C00CED48B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */;
|
|
|
|
productName = SnapshotTesting;
|
|
|
|
};
|
Bring local notification logic into the push notification target
This commit brings key local notification logic into the notification
extension target to allow the extension to reuse much of the
functionality surrounding the processing and formatting of
notifications. More specifically, the functions
`process_local_notification` and `create_local_notification` were
brought into the extension target.
This will enable us to reuse much of the pre-existing notification logic
(and avoid having to reimplement all of that)
However, those functions had high dependencies on other parts of the
code, so significant refactorings were needed to make this happen:
- `create_local_notification` and `process_local_notification` had its
function signatures changed to avoid the need to `DamusState` (which
pulls too many other dependecies)
- Other necessary dependencies, such as `Profiles`, `UserSettingsStore`
had to be pulled into the extension target. Subsequently,
sub-dependencies of those items had to be pulled in as well
- In several cases, files were split to avoid pulling too many
dependencies (e.g. Some Model files depended on some functions in View
files, so in those cases I moved those functions into their own
separate file to avoid pulling in view logic into the extension
target)
- Notification processing logic was changed a bit to remove dependency
on `EventCache` in favor of using ndb directly (As instructed in a
TODO comment in EventCache, and because EventCache has too many other
dependencies)
tldr: A LOT of things were moved around, a bit of logic was changed
around local notifications to avoid using `EventCache`, but otherwise
this commit is meant to be a no-op without any new features or
user-facing functional changes.
Testing
-------
Device: iPhone 15 Pro
iOS: 17.0.1
Damus: This commit
Coverage:
1. Ran unit tests to check for regressions (none detected)
2. Launched the app and navigated around and did some interactions to
perform a quick functional smoke test (no regressions found)
3. Sent a few push notifications to check they still work as expected (PASS)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 21:26:06 +00:00
|
|
|
D7EDED242B117F7C0018B19C /* MarkdownUI */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 4C27C9302A64766F007DBC75 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */;
|
|
|
|
productName = MarkdownUI;
|
|
|
|
};
|
|
|
|
D7EDED302B1290B80018B19C /* MarkdownUI */ = {
|
|
|
|
isa = XCSwiftPackageProductDependency;
|
|
|
|
package = 4C27C9302A64766F007DBC75 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */;
|
|
|
|
productName = MarkdownUI;
|
|
|
|
};
|
2022-04-02 23:57:42 +00:00
|
|
|
/* End XCSwiftPackageProductDependency section */
|
|
|
|
};
|
|
|
|
rootObject = 4CE6DEDB27F7A08100C66700 /* Project object */;
|
|
|
|
}
|