Compare commits

..

1663 Commits

Author SHA1 Message Date
tyiu 85185f189e Use opacity modifier instead of conditionals to hide unselected timelines to retain scroll positions
Changelog-Fixed: Use opacity modifier instead of conditionals to hide unselected timelines to retain scroll positions
2023-12-08 16:01:39 -08:00
ericholguin 3e5029a4ad ui: allow users to collapse suggested hashtag view
Closes: https://github.com/damus-io/damus/pull/1789
Changelog-Added: Add ability to hide suggested hashtags
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-05 13:56:52 -08:00
ericholguin 05b2cb6376 ux: minor improvements to qrcode scanning in images
Closes: https://github.com/damus-io/damus/pull/1787
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-05 13:56:52 -08:00
William Casarin c4af40e64f textsearch: don't clear results if we get no results while typing
When you are searching for results, don't wipe the current result set if
there are some previous results and the current query is returning 0
results. This is pretty common when you start typing, it's weird for the
results to randomly clear when looking for stuff.
2023-12-05 12:33:16 -08:00
William Casarin afc42d1952 nostrdb/writer: make sure we don't write a note if we already have it
I'm noticing duplicate notes in the database, which might happen when
the ingester and writer get spammed with the same note rapidly. Add a
sanity check during the write so that we only ever write a note once.

Fixes: 1cf898e0b2 ("ndb: update nostrdb")
Changelog-Fixed: Fix duplicate notes getting written to nostrdb
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-04 14:54:28 -08:00
William Casarin 579303f741 ndb: fix minor text search result bug 2023-12-04 14:51:58 -08:00
William Casarin 104f490e86 v1.7
Set the version at the project level so that our extension inherits it
as well
2023-12-04 13:26:24 -08:00
William Casarin a07b78e47f ndb: add safemode so we don't instantly crash on bad dbs
Fixes: https://github.com/damus-io/damus/issues/1741
2023-12-04 13:26:24 -08:00
William Casarin 4e447ddbed ndb/txn: inherit active transactions on the same thread
Many different parts of the codebase could be opening transactions when
somewhere higher in the heirarchy on the main thread might already have
an active transaction. This can lead to failed transaction opening which
is bad.

Instead of relying on passing down the transaction to subviews, lets
keep track of the active transactions in a thread-local dictionary. That
way whenever we create a new transaction we can inherit the one that is
already active in the current thread.

Inherited transactions don't end the query when they are garbage
collected, we still expect the first-opened query to do this.
2023-12-04 13:26:24 -08:00
William Casarin f6b59b3f5d search: debounce when searching
so we don't spawn tons of searching tasks for no reason
2023-12-04 13:26:24 -08:00
William Casarin e40d5b3e83 damus/c: fix a few warnings 2023-12-04 13:26:24 -08:00
William Casarin 4bf8a68c9c search: add damus search ui 2023-12-03 22:13:46 -08:00
William Casarin 0a9ac9cb0d ndb: more dumb results building 2023-12-03 22:13:11 -08:00
William Casarin 9c3b052de2 ndb/note: always track note size, add to_owned 2023-12-03 22:12:31 -08:00
William Casarin 59cde41764 build: fix a few warnings 2023-12-03 22:12:00 -08:00
William Casarin 9502fc30ba ndb: add initial search interface
Still needs updating because of the tuple array
2023-12-02 15:05:15 -08:00
William Casarin 6b8cf51720 nostrdb/search: fix another newest-first bug
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 15:04:23 -08:00
William Casarin f72b297d77 nostrdb: add cpu helper 2023-12-02 13:47:17 -08:00
William Casarin dd78272a5e Ndb: update to use new nostrdb config struct 2023-12-02 13:44:03 -08:00
William Casarin 65be56ba7c fix some incompatibility between nostrdb and damus' 2023-12-02 13:44:03 -08:00
William Casarin 8e361a9586 nostrdb/search: fix subtle bug with some newest-first text search
Due to the way the range queries work for newest-first searches, we can
have a situation where the MDB_SET_RANGE gets placed on either the
correct place or just after the correct place. To position the cursor
correctly, we jump back one if the search result prefix doesn't match.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 9bbeffe320 nostrdb/search: also index longform
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 3e5d7581ba nostrdb/refactor: move search key printer in case we need it
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 06445de197 nostrdb/search: make sure we break instead of return
so the cursor has a chance to close

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin e537c7cef4 nostrdb/search: allow searching from newest-to-oldest and oldest-to-newest
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 01c239c0eb nostrdb/search: add limit param
If we only care to have a certain number of results

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin bec92249f9 nostrdb/search: remove result printing, move to util/ndb
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
hakkadaikon aa0b9bde8f nostrdb/Delete unuse argument (destsize)
Closes: https://github.com/damus-io/nostrdb/pull/18
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 4e4e8ed460 nostrdb/rename get_physical_cores to get_cpu_cores
less wrong

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 3605edad8b nostrdb/config: fix ingester thread settings
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 04c207a11a nostrdb/ingest: add configurable ingest filter
This allows users of nostrdb to selectively filter notes of any kind during
ingest.

Contact lists too big? Create a filter to reject them.

You only care about notes with specific kinds? Reject everything else.

Damus will use this for rejecting large events that might take up too
much space for storage, such as contact lists.

This commit also switched to ndb_config for configuring nostrdb, because
the arguments to ndb_init were getting out of hand.

Changelog-Added: Added ingest filter setting
Changelog-Changed: Switch to ndb_config for per-session ndb settings
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 9d208284c6 nostrdb/search: phrase searching working
This changes the search algorithm to be much smarter and more efficient
at searching phrases.

It is also much simpler, using less intermediate data structures.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 213a26cd01 nostrdb/flag: add ndb config flag for skipping note verification
makes some large imports a bit faster

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin b74bde5cc4 nostrdb/search: fix infinite loop when parsing some notes
Our word parser gets stuck on some notes with utf8 chars. Make sure we
are always advancing so we don't get stuck.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 0e0c53145f nostrdb/segfault: fix weird crash in ispunct
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 76aa1d3450 nostrdb/db: remove the DUPFIXED flag from the fulltext db
I don't think this technically makes any sense

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin fa0d5e7d03 nostrdb/debug: fix some debug-mode compile issues
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 8446db7cbc nostrdb/search: prepare text search for accurate phrase results
This patch sets the stage for phrase searching. It collects data into
result sets based on words and the word's associated key. We can use
this data to select the best search results based on adjacent
word_indices.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 8679c9f293 nostrdb/search: make search case insensitive
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin d541153e4c nostrdb/Add fulltext search index
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 53fc1b6945 nostrdb/Fix invalid db selection when writing kind index
Fixes: ebe92071af18 ("index: write kind index when processing notes")
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin ff60f8a2db nostrdb/index: write kind index when processing notes
We have a kind index database now, so write to it when processing notes

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin bfd78c01ca nostrdb/refactor: move write id index to its own function
We will be writing more indices so I'm trying to clean this up a bit
before this function gets too messy

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin a2af030367 nostrdb/refactor: move profile index writing to its own function
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 3c2e8b728f nostrdb/index: create kind+timestamp index database
We don't build the index yet, but create the database like the others.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 8269ca59cd nostrdb/index: add u64_timestamp lmdb comparator
custom kind+timestamp comparison function. This is used by lmdb to
perform b+ tree searches over the kind+timestamp index.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 0f9d55d4f9 nostrdb/debug: use mdb_strerror in more places
instead of codes

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 4109649dc2 nostrdb/filter: make sure we only match single chars
Without this, we could accidently match `pr` for `#p` filters

Fixes: 30ed801285dd ("filters: add initial filter interface")
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 466dfcb7d7 nostrdb/filters: add initial filter interface
This adds a way to construct filters and match them against notes. This
will be used by our query interface in the future.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-02 13:44:03 -08:00
William Casarin 27905d24b4 cursor: add cursor_memset 2023-12-02 13:44:03 -08:00
Kieran 7a5aef94a8 relays: Publish kind 10_002
Closes: https://github.com/damus-io/damus/pull/1783
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-12-01 09:58:07 -08:00
Jing维 9e4f0122f5 update testdata URL path
Closes: https://github.com/damus-io/damus/pull/1767
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-11-26 13:06:10 -08:00
ericholguin a80ddc08ec settings: add media previews setting
Closes: https://github.com/damus-io/damus/pull/1757
Signed-off-by: William Casarin <jb55@jb55.com>
2023-11-23 10:57:23 -08:00
Daniel D’Aquino 6daa4f7e13 Add regional relays for Thailand and Germany.
This commit adds region-specific relays for Thailand and Germany. The list was blindly copied and pasted from the tickets.

Testing
-------

Device: iPhone 15 Pro simulator
iOS: 17.0.1
Damus: A locally modded version combining these changes with changes made in #1730 (A bit hacky, but makes testing faster)
Steps:
1. Change region to Canada. Only international relays should be shown in recommended relay list. PASS
2. Change region to Japan. International + Japanese relays should be shown in the recommended list. PASS
3. Repeat step (2) for Thailand and Germany. International + corresponding regional relays should be shown. PASS

Changelog-Added: Add regional relays for Thailand
Closes: https://github.com/damus-io/damus/issues/1698
Changelog-Added: Add regional relays for Germany
Closes: https://github.com/damus-io/damus/issues/1750
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-11-23 10:42:18 -08:00
ericholguin 9686f82e8f ux: only handle one qr code in an image and add copy functionality
Closes: https://github.com/damus-io/damus/pull/1758
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-11-22 12:52:25 -08:00
Daniel D’Aquino a1e6be214e 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 10:39:27 -08:00
Daniel D’Aquino 87860a7151 Make NostrDB (and related) code build under the new extension target as well.
This change includes several source files related to NostrDB into the extension target as well, so that we can use it from that context (and thus enable more advanced push notification formatting and suppression)

To make this change possible, I had to split some source files as well as to move some functions to different files, to ensure we don't have to pull too much unnecessary code into the extension.

Testing
-------

PASS

Device: iPhone 15 Pro simulator
iOS: 17.0.1
Damus: This commit
Test steps:
1. Build DamusNotificationService. Should succeed. PASS
2. Build Damus (the app). PASS
3. Run app, scroll around some notes, go to a few different views, post a note. Should work as normal. PASS
2023-11-21 10:39:27 -08:00
Daniel D’Aquino ad75d8546c Add experimental push notification support
I added support for the experimental push notifications feature. There are many improvements to be made, so this feature is currently opt-in only. If the user does not opt-in, their device tokens will not be sent out and thus they will receive no push notifications.

We should perform more testing on real-life staging environments before fully releasing this feature.

Testing
-------

Testing was done gradually during development.

Device: iOS simulators
iOS: 17
Damus version: A few different but recent prototypes
Rough coverage:
1. Checked that no device tokens are sent out when setting is off
2. Checked that I can successfully receive device tokens when feature is ON and set to localhost.
3. Checked sending test push notifications of types "note" (kind: 1), reaction (kind: 7) and DMs (kind 4) works and shows a generic but reasonable push notification message
4. Checked that clicking on the notifications above take the user to the correct screen

Closes: https://github.com/damus-io/damus/issues/67
Changelog-Added: Add experimental push notification support
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-11-20 10:32:33 -08:00
Daniel D’Aquino 878b1caa95 Fix onboarding post view not being dismissed
This commit fixes the issue where clicking "post" on the onboarding sheet does not dismisses itself under certain device/iOS combos.

The root cause is that the behavior of `dismiss` calls under a deeply nested view (i.e. not a direct subview of the sheet) is inconsistent depending on the device or iOS.

This fix does two things:
1. It upgrades the usage of `presentationMode` (which is deprecated) to the new `dismiss` API
2. It makes the onboarding sheet view (A direct subview of the sheet) to listen to signals from the post view and use that to also call `dismiss()`, which is explicitly supported by Apple in their docs (https://developer.apple.com/documentation/swiftui/environmentvalues/dismiss)

Testing
-------

PASS

Device: iPhone 13 mini (physical device)
iOS: 17.1
Damus: This commit (Local build, no local mods)
Setting: "Always show onboarding" is set to ON
Coverage:
1. Clicking "post" on onboarding post view publishes the post and dismisses the view. PASS
2. Clicking "cancel" on onboarding post view dismisses the view without publishing. PASS
3. Dragging the onboarding post view down dismisses the view without publishing. PASS
4. Making a normal post (I replied to a thread) still publishes the post and dismisses the normal post view sheet. PASS

Testing on other Device/iOS combos
---------------------------------

PASS

Preconditions:
- iPhone 15 Pro (simulator) on iOS 17.0.1
- iPhone SE 3rd gen (simulator) on iOS 16.4
Damus: This commit (Local build, no local mods)
Setting: "Always show onboarding" is set to ON
Coverage:
1. Clicking "post" on onboarding post view publishes the post and dismisses the view. PASS

Closes: https://github.com/damus-io/damus/issues/1726
Changelog-Fixed: Fix onboarding post view not being dismissed under certain conditions
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-11-20 08:35:37 -08:00
William Casarin 1fcbba5041 parser: fix url parse regression 2023-11-17 08:57:36 -08:00
William Casarin 20299615ba parser: always convert damus.io links to bech32 mentions
Update our note parse to always interpret damus.io links as bech32
mentions (nostr:npub...)

This means links will get converted to nostr: on post composition, and
if we ever see a link it will also get converted to nostr: visually

Changelog-Added: Always convert damus.io links to inline mentions
Fixes: https://github.com/damus-io/damus/issues/690
2023-11-17 08:09:28 -08:00
William Casarin 972a183ed8 damus-c: add cursor_skip helper
This is a cursor util for skipping over bytes
2023-11-17 08:07:53 -08:00
William Casarin f976f23854 v1.6 (29)
Almost there!!!
2023-11-15 12:50:44 -08:00
William Casarin cf13e1ca61 Actually fix camera descriptions 2023-11-15 12:48:56 -08:00
William Casarin 309cbaccce Manually update camera description translation
Just so we can get on the appstore.
2023-11-15 12:23:41 -08:00
William Casarin d8640e2a1e Update Translations 2023-11-15 12:02:45 -08:00
William Casarin bc330ab5de update nostrdb
to include potential ingester thread crash fix
2023-11-14 10:26:09 -08:00
William Casarin 41c76d9de0 tests: disable snapshot tests for now
Until they are working on macos and xcode cloud
2023-11-14 07:13:51 -08:00
William Casarin eaaf802157 test: attempt to fix broken tests 2023-11-13 15:03:17 -08:00
William Casarin bf59b5850c ci: remove xcode github action
We're using xcode cloud now which seems much more reliable
2023-11-13 15:02:00 -08:00
William Casarin 2585a375ab v1.6 (28) 2023-11-13 10:31:28 -08:00
William Casarin 29fa4ecf2e build: fix invalid function name 2023-11-13 10:31:28 -08:00
William Casarin 518fdffce9 ndb: potential fix for a crash in some nostrdb queries 2023-11-13 10:31:28 -08:00
William Casarin 289e051202 v1.6 (26) 2023-11-13 10:31:28 -08:00
Daniel D’Aquino 2a6c4d0b61 storage: Set more aggressive cache expiration values
I am setting the expiration values lower because it seems that the previous values were not keeping storage usage low enough.

Testing: Testing will be performed as a long-term test on Github issue #1689 (https://github.com/damus-io/damus/issues/1689)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-11-11 20:23:37 -08:00
Daniel D’Aquino 386a28455a permissions: Update camera usage string to be more accurate
This changes the text that appears on the camera permission dialog, and makes it clear that camera access is also needed for the scanning of QR codes. This change was made to address a concern raised during the Apple app review process.

Testing
-------

PASS

Device: iPhone 13 Mini (physical)
iOS: 17.1
Damus: This commit
Special remarks: I locally modified the bundle identifier to be able to install a fresh copy of Damus from scratch and go through the prompt, without having to uninstall my own copy of Damus

Steps:
1. Install a fresh copy of Damus
2. On account creation, try to scan an nsec.
3. Make sure the camera usage prompt message is modified to the new string.

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-11-11 20:23:34 -08:00
Daniel D’Aquino b2e555284b Add "Always show onboarding suggestions" developer setting
This commit adds a new setting that can be used by developers to test onboarding suggestions without having to make local changes to code or reinstall the app.

Testing
-------

Device: iPhone 15 Pro (Simulator)
iOS: 17.0.1
Damus: This commit
Coverage:
1. Starting the existing app under the default setting does not show onboarding suggestions
2. Turning the setting ON causes the app to show onboarding suggestions on every app restart
3. Turning the setting back OFF causes the app to no longer show onboarding suggestions

Changelog-Added: Add "Always show onboarding suggestions" developer setting
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-11-11 20:23:29 -08:00
William Casarin cc385d3c3f nostrdb: add migration to fix local japanese profile names 2023-11-02 14:17:17 +09:00
ericholguin 2895c374c0 fix: relay filter button fix
Closes: https://github.com/damus-io/damus/pull/1678
Tested-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-11-02 13:21:19 +09:00
William Casarin 6863e74c0f nostrdb: fix japanese profile names not loading
update flatcc, including the patch that fixes japanese usenames

Changelog-Fixed: Fix japanese profiles names not loading
2023-11-02 10:20:40 +09:00
William Casarin 280d889f25 v1.6 (25) changelog 2023-10-31 10:27:55 +09:00
William Casarin d1d830fca1 v1.6 (25) 2023-10-31 10:26:12 +09:00
Daniel D’Aquino d2bb013db7 relays: automatically load extra regional bootstrap relays
Depending on user's locale. currently only supported for Japanese users.

This change allows Japanese users to automatically connect with popular
Japanese regional relays during account creation, thus allowing Japanese
users to better connect with the Japanese Nostr community.

More specifically, 3 Japanese regional relays will be automatically
added to the user's relay list (on top of the usual relays) under the
following conditions:

1. User's region (As configured in iOS settings) is Japan, AND
2. The user is creating a new Nostr account through Damus.

In the case the Nostr account is not new, Damus will not add any
regional relays (It will respect the user's relay list).

Testing
-------

PASS

Device: iPhone 15 Pro (Simulator)
iOS: 17.0.1
Damus: This commit
Test steps:

1. With the US region set, install Damus
2. Go through onboarding and create a new account.
3. Once the onboarding is complete, look at the connected relays. Should only be connected with popular international relays. PASS
4. Uninstall Damus
5. On iOS settings, go to Location & Region settings and change the region to Japan.
6. Install Damus
7. Go through onboarding and create a new account.
8. Once the onboarding is complete, look at the connected relays. User should be connected with intl relays as well as Japanese relays. PASS
9. Quit Damus and restart
10. Ensure the Japanese relays are still on the list. PASS
11. Quit Damus
12. Change region back to US
13. Restart Damus and check the relay list. Relay list should not be affected. PASS
14. Reinstall Damus
15. Check relay list. Only intl relays should be shown. PASS
16. Change region to Japan (JP)
17. Restart Damus and check the relay list. Relay list should not be affected. PASS
18. Reinstall Damus
19. This time, login with a pre-existing account (One that is not connected to Japanese relays).
20. After onboarding, check relay list. The relay list should be unaffected (i.e. Japanese relays should not have been added since this account is pre-existing). PASS

Note: The actual network connection with some of the Japanese relays
failed, but that is likely due to the Geo-based IP restrictions imposed
by some of those Japanese relays. The relay list has been copied
verbatim from @mattn's suggestions.

Reference ticket: https://github.com/damus-io/damus/issues/1447

Changelog-Changed: Automatically load extra regional Japanese relays during account creation if user's region is set to Japan.
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-31 10:03:13 +09:00
ericholguin c437a05ec0 ux: add long press to profile to navigate to profile page
Closes: https://github.com/damus-io/damus/pull/1665
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-30 11:59:13 +09:00
ericholguin a2fdb61013 ui: change post view background to be all black
Closes: https://github.com/damus-io/damus/pull/1666
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-30 11:59:10 +09:00
ericholguin 4dd800e6b9 ui: make qrcode view font color white
Currently when in light mode the font is black which blends into the background
Changelog-Fixed: use white font color in qrcode view

Closes: https://github.com/damus-io/damus/pull/1653
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-30 11:59:07 +09:00
ericholguin 34c0728f21 ui: update the customize zap view
This PR updates the customize zap view by:

- replacing the old gradient button to the pink style
- show cursor on text field
- show textfield by default
- change custom zap grid to 4x2 instead of 3x3

Changelog-Changed: Updated customize zap view
Closes: https://github.com/damus-io/damus/pull/1656
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-30 11:58:36 +09:00
ericholguin ec604664d8 ui: status view fixes for smaller screen devices
Changelog-Added: Tap to dismiss keyboard on user status view
Closes: https://github.com/damus-io/damus/pull/1652
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-27 09:21:43 +08:00
William Casarin 7710839261 noting: users are now notified when you quote repost them
Changelog-Changed: Users are now notified when you quote repost them
2023-10-27 09:02:05 +08:00
William Casarin 4389cc2128 load_profiles: add context for debugging
This is useful to see where the load_profiles request is coming from

We may need to switch to a central dispatch for profile loading, I
suspect there is a lot of redundancy between requests.
2023-10-24 13:02:41 +08:00
William Casarin 76508dbbfd perf: don't continuously attempt to fetch old profiles
Changelog-Changed: Save bandwidth by only fetching new profiles after a certain amount of time
2023-10-24 13:02:41 +08:00
Daniel D’Aquino bbccc27a26 ui: Add setting that allows users to optionally disable profile action sheets.
Tested on iOS 17.0.1 on an iPhone 15 Pro simulator.

Closes: https://github.com/damus-io/damus/issues/1641
Changelog-Added: Add setting that allows users to optionally disable the new profile action sheet feature
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-10-24 12:18:20 +08:00
Daniel D’Aquino 9969e70b5f ui: Add follow button to profile action sheet
Testing: Tested on iPhone 15 Pro simulator with iOS 17.0.1

Closes: https://github.com/damus-io/damus/issues/1636
Changelog-Added: Add follow button to profile action sheet
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-10-24 12:18:20 +08:00
Daniel D’Aquino 692d29942b zaps: Implement single-tap zap on profile action sheet and fix zap fallthrough on default settings
This commit implements a single-tap zap on the profile action sheet and fixes an issue where zapping would silently fail on default settings if the user had no lightning wallet installed in their system.

Testing
-------

Configurations:
- iPhone 13 Mini (physical device) on iOS 17.0.2 with NWC wallet attached
- iPhone 15 Pro (simulator) on iOS 17.0.1 with no lightning wallet nor NWC

Damus: This commit

Coverage:
- Zapping using NWC connected wallet: PASS (Zaps and shows UX feedback of the completed action)
- Zapping under default settings and no lightning wallet: PASS (Shows the wallet selector invoice view)
- Long press on zap button brings custom zap view

Regression testing
------------------

Preconditions: iPhone 15 Pro (simulator) on iOS 17.0.1 with no lightning wallet nor NWC

Coverage:
- Zapping user on their full profile shows wallet selector. PASS
- On-post invoice shows wallet selector. PASS

Closes: https://github.com/damus-io/damus/issues/1634
Changelog-Changed: Zap button on profile action sheet now zaps with a single click, while a long press brings custom zap view
Changelog-Fixed: Fixed an issue where zapping would silently fail on default settings if the user does not have a lightning wallet preinstalled on their device.
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-10-24 12:18:20 +08:00
Daniel D’Aquino 139df33cb7 Rename ZapButton to NoteZapButton and ZapButtonView to ProfileZapLinkView (no-op)
This is a non-functional refactor to rename two views with similar names, to avoid confusion.

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-10-24 12:18:20 +08:00
William Casarin a324523b85 ndb: new methods for profile fetched_at
This adds a few methods to Ndb for reading and writing fetched_at stats.
These are a way of tracking when we last tried to fetch profiles so that
we don't need to keep fetching them.
2023-10-23 10:44:54 +08:00
William Casarin 1cf898e0b2 ndb: update nostrdb
This includes the new profile fetched_at logic and reaction stats.

When receiving new profiles, nostrdb will record when it was last
received in a new database. This database is a mapping from Pubkey to
timestamp.

You can manually read/write to this table using:

ndb_read_last_profile_fetch
ndb_write_last_profile_fetch

This patch also includes the new reaction counting metadata table. It is
not used yet (but reactions are still counted!)

Changelog-Added: Added reaction counters to nostrdb
Changelog-Added: Record when profile is last fetched in nostrdb
2023-10-23 10:40:11 +08:00
William Casarin 502ceee6d4 ndb: update bindings
This adds new bindings from nostrdb related to tracking reaction stats.
We aren't using this yet but it's a part of the latest nostrdb update.
2023-10-23 10:39:27 +08:00
William Casarin 4f628ec733 Merge remote-tracking branch 'github/translations' 2023-10-23 09:18:45 +08:00
William Casarin 29915159db v1.6 (24) changelog 2023-10-22 14:27:56 +08:00
William Casarin 2b102671e5 smol fix 2023-10-22 10:41:36 +08:00
Daniel D’Aquino e70f270c5c zaps: Improve discoverability of profile zaps
via zappability badges and profile action sheets

This commit improves discoverability of zaps with the following changes:

1. New zap icon appears on profile pictures of events where the author of such event has zaps setup
2. Clicking on a profile picture from an event shows an action sheet that makes it easier to see a preview of their profile, and a zap button

Testing
-------

Devices:
- iPhone 14 Pro simulator
- iPad 10 simulator

iOS:
- 17.0.1
- 16.4

Damus: This commit

Coverage:
1. Checked that zap icon appears on profile pictures on events in different feeds and threads
2. Checked that this zap icon only appears for profiles that have zaps enabled
3. Checked that profile action sheet looks good on both light mode and dark mode
4. Checked that long descriptions are truncated and the "see more" "see less" buttons work
5. Checked that clicking "see more" or "see less" adapts the size of the action sheet (on iPhone)
6. Checked that action sheet looks good whether or not the user has a website link setup
7. Checked that long presses on the zap button in the action sheet bring the same options as the normal profile view
8. Checked all the buttons in the action sheet take the user to the expected place
9. Checked that the original profile view looks good (on both light and dark mode)

Notes:
- Action sheet cannot be resized on iPad.
- Could not test on Mac Catalyst because there seems to be a crash on the creation of a new account

Reference ticket: https://github.com/damus-io/damus/issues/1596

Changelog-Added: Improve discoverability of profile zaps with zappability badges and profile action sheets
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-22 10:40:31 +08:00
William Casarin 4ed79ff3c3 ui: reduce size of event menu hitbox
Changelog-Fixed: Reduce size of event menu hitbox
2023-10-22 10:40:29 +08:00
William Casarin 17331301da Clarified camera and mic usage strings
Fixes: https://github.com/damus-io/damus/issues/1628
2023-10-22 10:25:03 +08:00
Davide De Rosa 45904e1bf2 nav: compare searches for navigation decisions
In 7c98489, routes are compared to the stack top before push.
Problem is, search comparison is not looking at the NostrFilter.

Instead, hash value involves two UUID-based fields (sub_id,
profiles_subid), so equality will always fail and result in a
"duplicated push".

As I do not know the context of such fields to deliberately
drop them, this patch is sent as a draft.

The basic idea is using the filter for comparison, so I added
a Hashable extension to NostrFilter where the subject of the
comparison may be fine-tuned.

Adding `hashtag` resolves #1367 but it's only a starting point.

Signed-off-by: Davide De Rosa <keeshux@gmail.com>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-22 08:56:42 +08:00
Daniel D’Aquino 7ae66b8490 ui: Add suggested hashtags to universe view
This commit adds a suggested hashtag section to the universe view tab. The method for suggesting hashtags is currently simple:
1. It contains a list of many possible hashtags that we could recommend
2. It calculates how many users have been talking about it in the events fetched by the Universe tab
3. It selects the Top-N most mentioned suggested hashtags in the Universe tab

This has the following properties:
1. It has some spam resistance as it ranks by unique users mentioning the tag (instead of events)
2. It is a simple way to curate good hashtags
3. It shows the ones with the most amount of people talking about it among the notes fecthed in the Universe view

Testing
-------

PASS

Device: iPhone 14 Pro simulator
iOS: 17.0
Damus: This commit
Coverage:

1. Suggested hashtags are displayed
2. Layout looks similar to Figma
3. User count goes up (does not stay at zero)
4. Clicking on a suggested hashtag takes you to that hashtag view
5. Only the top 5 hashtags are displayed

Notes: The counts seem low, probably because there are not enough notes loaded in Universe View

Changelog-Added: Add suggested hashtags to universe view
Closes: https://github.com/damus-io/damus/issues/1569
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-21 08:42:00 +08:00
Daniel D’Aquino bf43842590 onboarding: Suggest first post during onboarding
Testing of standard flow
------------------------

PASS

Device: iPhone 14 Pro simulator
iOS: 17.0
Damus: This commit
Steps:
1. Delete and reinstall Damus
2. Go through onboarding until suggested users appear
3. Click "continue". Should slide into the post view. PASS
4. Post view should look similar to the Figma design file, but with examples as placeholders. PASS
5. Examples should switch every 3 seconds. PASS
6. Typing a first character causes the #introductions hashtag to be automatically added. PASS
7. Uploading an image makes progress view show up and not break layout. PASS
8. Clicking on "post" should post this note and dismiss onboarding view. PASS

Testing of other flows
----------------------

PASS

Device: iPhone 14 Pro simulator
iOS: 17.0
Damus: This commit
Special remark: Made local change to always show the onboarding suggestions, and speed up testing
Coverage:

1. Clicking "skip" on suggested users view will skip into the post view. PASS
2. Clicking "cancel" on post view and then going to the normal post view reveals a blank draft. PASS
3. Clicking "cancel" dismisses onboarding view and does not post anything. PASS
4. Normal post view looks normal (not broken). PASS
5. Changing initial suggested post during onboarding, cancelling the post, and then re-entering normal post view reveals the draft with user modifications. PASS

Changelog-Added: Suggest first post during onboarding
Closes: https://github.com/damus-io/damus/issues/1338
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-21 08:42:00 +08:00
Davide De Rosa 7c98489904 nav: fix pushing duplicate routes
Skip push if matches top route.

Fixes: https://github.com/damus-io/damus/issues/104
Closes: https://github.com/damus-io/damus/pull/1625
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-20 12:41:53 +08:00
transifex-integration[bot] 0277303da7 Translate Localizable.stringsdict in pl_PL
100% translated source file: 'Localizable.stringsdict'
on 'pl_PL'.
2023-10-19 19:16:26 +00:00
transifex-integration[bot] 63fee80c53 Translate Localizable.stringsdict in pl_PL
100% translated source file: 'Localizable.stringsdict'
on 'pl_PL'.
2023-10-19 19:16:15 +00:00
transifex-integration[bot] 2aaedd077e Translate Localizable.stringsdict in pl_PL
100% translated source file: 'Localizable.stringsdict'
on 'pl_PL'.
2023-10-19 19:16:01 +00:00
Daniel D’Aquino 06eb9d4a0e dm: Do not show DMs from muted users
This commits causes DMs from muted users to be filtered out. It also fixes an issue where the DM list would appear completely blank in certain scenarios.

Testing
-------

CONDITIONAL PASS

Device: iPhone 14 Pro simulator
iOS: 17.0
Damus: This commit
Setup:
- Three test accounts (A, B, and C). "A" will be the account running on the device under test.
- Account "A" should start with no DMs

1. Send a direct message from "B" to "A", and reply from "A".
2. Go to DMs -> DMs tab. Conversation with "B" should appear. PASS
3. Mute user "B" (I did it via profiles page).
4. Go back to DMs view via back button. DMs from "B" should not appear. PASS
5. Since there are no DMs, the screen should display "Nothing to see here". PASS
5. Close Damus app via iOS app switcher and reopen Damus
6. Check DMs list. Should only show "Nothing to see here". PASS
7. Send a DM from account "C" to "A" and reply.
8. Go back to DMs -> DMs tab. Only the message from account "C" should appear.
9. Unmute user "B"
10. Go back to DMs. Messages from "B" and "C" should appear. PASS

Notes:
- There was one instance when the first DM from account "C" appeared in the "DMs" tab (Not "requests") momentarily. After a bit it went into requests as expected.
- When unmuting user "B", I had to refresh the DM list by switching tabs, meaning that the view did not immediately update.

Upon inspection, the two behaviors above are not caused by this change, so this is a conditional pass.

Closes: https://github.com/damus-io/damus/issues/1350
Changelog-Fixed: Do not show DMs from muted users
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-10-18 07:04:17 +08:00
Daniel D’Aquino 3b76fcb743 test: Add basic snapshot test coverage for EventView
This commit adds a basic snapshot test for EventView, and also adds some testing infrastructure to help with mocking NostrDB behavior.

Test
----

PASS

Device: iOS 17.0 Simulator
iOS: 17.0
Damus: This commit
Steps: Run `EventViewTests`
Results: Snapshot matches baseline reference added
2023-10-16 03:13:28 +02:00
Daniel D’Aquino edb23e4e70 ui: prefix username with @ character, fix spacing
Closes: https://github.com/damus-io/damus/issues/1559
Changelog-Fixed: Add more spacing between display name and username, and prefix username with `@` character
2023-10-16 03:13:28 +02:00
Daniel D’Aquino 82fba88cc4 storage: set disk cache expiry dates for images
This commit adds expiry dates for images added to the Kingfisher cache.
The expiry date depends on the context of the image:

- Images from notes expire after a week
- Images from profile banners expire after two weeks
- Profile pictures never expire.

Test
----

Device: iPhone 14 Pro (Simulator), iOS: 17.0
Special remarks: Requires minor local mods and debugger connection
Steps:

1. Locally change the note image expiry to 5 seconds
2. Set a breakpoint in `removeExpiredValues` function in `DiskStorage.swift` in Kingfisher
3. Disable breakpoints for now
4. Start Damus and go to the profile feed of someone new
5. Scroll down through the images for about a minute
6. Turn on breakpoints
7. Switch to a different app in the simulator (Make Damus go to background mode)
8. Wait for a few seconds. Debugger should hit the breakpoint set. PASS
9. Take note of the fileURLs of the images being deleted
10. Go to that directory where the fileURLs are in via Finder
11. Look at some of the images being deleted. Perhaps save a copy for comparison.
12. Turn off breakpoints, resume execution and go back to Damus
13. Scroll back up. Some images there should match the images being automatically deleted from the cache. PASS

Closes: https://github.com/damus-io/damus/issues/1565
Changelog-Added: Add expiry date for images in cache to be auto-deleted after a preset time to save space on storage
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-10-16 03:13:28 +02:00
Jericho Hasselbush 439f9974c5 login: add nsec qr-scanning
- Allow scanning of QR codes, and if detects a nsec, will provide it to
  the login prompt.

- If nsec is found, provides option to keep nsec in keychain; default is
  to not store

- User stays logged in until they logout, or app is force-quit if nsec
  is not stored.

damusApp.swift:
  Obtains keypair from the notification generated to allow login.

LoginView.swift:
  New views allowing for adding and logic handling the QR reader in
  QRScanNSECView.swift to enable QR scan for nsec.

QRScanNSECView.swift:
  New view to scan for QR code. The sparkling magnifying glass is enabled
  if the view calling the QR view changes the privKeyFound bound variable.

Tipjar: npub1el277q4kesp8vhs7rq6qkwnhpxfp345u7tnuxykwr67d9wg0wvyslam5n0
Closes: https://github.com/damus-io/damus/issues/1291
Changelog-Added: Add QR scan nsec logins.
Signed-off-by: Jericho Hasselbush <jericho@sal-et-lucem.com>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-16 03:12:53 +02:00
ericholguin cf243e39c9 ui: improve status view
Changelog-Changed: Improved status view design
Closes: https://github.com/damus-io/damus/pull/1606
2023-10-16 02:51:07 +02:00
ericholguin 76f6ed0f86 colors: add an adapatable white color 2023-10-16 02:50:25 +02:00
transifex-integration[bot] ef035b6300 Translate Localizable.stringsdict in lv_LV
100% translated source file: 'Localizable.stringsdict'
on 'lv_LV'.
2023-10-11 17:28:36 +00:00
transifex-integration[bot] 769f03943c Translate Localizable.strings in lv_LV
100% translated source file: 'Localizable.strings'
on 'lv_LV'.
2023-10-11 17:19:54 +00:00
transifex-integration[bot] 6cdf2dca53 Translate InfoPlist.strings in lv_LV
100% translated source file: 'InfoPlist.strings'
on 'lv_LV'.
2023-10-11 16:19:17 +00:00
ericholguin 05dee129b5 relays: allow users to hide the recommended relay view
Closes: https://github.com/damus-io/damus/pull/1587
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-10 22:07:57 -07:00
Daniel D’Aquino 7bed47c919 test: Setup Snapshot testing library and add a snapshot test (testTextWrapperViewWillWrapText)
This change adds `https://github.com/pointfreeco/swift-snapshot-testing` as a package dependency and links it to the `damusTests` target.
It also adds one snapshot test to demonstrate its usefulness, by adding coverage to one particular aspect that we have never been able to test before: Whether or not the post text editor will wrap the text once the text gets long.

Testing of the test
-------------------

PASS

iOS: 17.0
Device: Simulator
Damus: This commit
Test steps:

1. Run `testTextWrapperViewWillWrapText`. PASS
2. Change TextViewWrapper.swift and remove this line:
```
textView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
```
3. Rerun. It fails. PASS (This is expected)

Closes: https://github.com/damus-io/damus/issues/1562
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-10 22:05:45 -07:00
transifex-integration[bot] 7f5707294c Translate Localizable.stringsdict in pl_PL
100% translated source file: 'Localizable.stringsdict'
on 'pl_PL'.
2023-10-08 13:47:07 +00:00
William Casarin 7a6a6dffbc camera: actually add CameraPreview to project 2023-10-07 17:00:25 -07:00
Suhail Saqan 472f81b311 add CameraModel and CameraService for interacting with the camera 2023-10-07 16:52:38 -07:00
Daniel D’Aquino 7744787c51 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-07 16:42:08 -07:00
ericholguin 5d90b497f0 images: add scan for qr code to image context menu
Closes: https://github.com/damus-io/damus/pull/1566
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-07 15:27:52 -07:00
Daniel D’Aquino a06be64894 network: Broadcast quoted notes when posting a note with quotes
This change addresses an issue where notes with quotes sometimes are not loaded correctly because the quoted note was not available in the same relay. Now whenever a user posts a note with a quoted note, the quoted note is also broadcast to the user's selected relays.

Issue repro
-----------

ISSUE REPRODUCED

Device: iPhone 14 Pro Simulator
iOS: 17.0
Damus: `1fabd4c0fe98d1f47b1fa0f76984ad78095bd49c`
Setup:
- Make sure you have a debugger connected
- Have a test note that you can quote

Steps:

1. Start Damus and let logs settle
2. Observe where the last log is
3. Quote the test note
4. Copy newly generated logs and paste on a text editor.
5. Analyze those logs. Pay attention to the new note id, as well as the note id of the quoted event (`["q", <QUOTED_NOTE_ID>]`)

Results: Logs show that the newly posted event is being flushed to the relays, but not the note that is being quoted.

Testing of the fix
------------------

PASS

Device: iPhone 14 Pro Simulator
iOS: 17.0
Damus: This commit
Setup:
- Make sure you have a debugger connected
- Have a test note that you can quote

Steps:

1. Start Damus and let logs settle
2. Observe where the last log is
3. Quote the test note
4. Copy newly generated logs and paste on a text editor.
5. Analyze those logs. Pay attention to the new note id, as well as the note id of the quoted event (`["q", <QUOTED_NOTE_ID>]`)

Results:
- Logs show the new event being flushed to the relays. PASS
- Logs show the quoted event also being flushed to the relays. PASS

Closes: https://github.com/damus-io/damus/issues/1495
Changelog-Fixed: Broadcast quoted notes when posting a note with quotes
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-10-07 14:49:53 -07:00
Daniel D’Aquino 0f9e87cb37 test: temporarily disable UserCacheManagerTests
Resolves build errors on the test target while we work on #1586

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-10-07 14:35:24 -07:00
William Casarin 1fabd4c0fe v1.6 (23) changelog 2023-10-06 12:57:54 -07:00
William Casarin f90a485b5e v1.6 (23) final 2023-10-06 12:56:31 -07:00
Daniel D’Aquino a18304f4a3 ui: Add merch store button to sidebar menu
Features:
- Merch button on sidebar menu
- Damus icon at the top opens sidebar
- Merch link passes `ref` param, to help with website analytics

Testing
-------

1. Ensured that link appears correctly with image on both iOS versions
2. Ensured that link takes user to the store
3. Ensured that ref param is passed to the store
4. Ensured that Damus icon opens sidebar menu
5. Ensured that when sidebar is open, clicking where the damus icon would be does not close the sidebar menu (it is behind the sidebar menu)

Closes: https://github.com/damus-io/damus/issues/845
Changelog-Added: Added merch store button to sidebar menu
Changelog-Changed: Damus icon now opens sidebar
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 12:54:51 -07:00
Daniel D’Aquino 5e3afd0b16 ui: keep location in timeline when returning from a thread
Stop tab buttons from causing the root view to scroll to the top unless
user is coming from another tab or already at the root view

This fixes an issue where if you navigated within a tab and then clicked
the tab button, it would scroll to the top. Users want to be able to
navigate back to the root of a given tab without losing the scroll
position.

Now tab buttons only scroll to the top if:

- User is coming from a different tab
- User is already at the root view of the tab, and they click on the tab button again.

Issue repro
----------

1. Scroll down the home feed a bit
2. Click on one of the posts
3. Click on the home tab button at the bottom left.

**Desired behavior:**
1. First click on home button should go to home view but not scroll to top
2. Clicking on home button should only scroll to top when user is already at the root home feed view

**Current behavior:** Clicking on home button scrolls to top on step 3 (shouldn't have)

Fix testing
-----------

Steps:

1. Scroll down the home feed a bit
2. Click on one of the posts.
3. Click on the home tab button. Should go back to home view but keep scroll position. PASS
4. Click on the home tab button again. Should scroll to the top. PASS
5. Scroll down on the home tab.
6. Switch to another tab, then switch back to the home tab. Should scroll to the top of the home view. PASS
7. Scroll down on the home tab
8. Click on the home tab button. Should scroll to the top. PASS
9. Repeat steps 1–8 for DMs, Universe view, and notifications. PASS

Closes: https://github.com/damus-io/damus/issues/1580
Changelog-Fixed: Stop tab buttons from causing the root view to scroll to the top unless user is coming from another tab or already at the root view
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-06 12:50:45 -07:00
William Casarin b1c7ef9bd9 Fix profiles not updating
Timestamped IDs were not being initialized properly when writing profile
indices. This means that every profile was indexed with timestamp 0.
derp. Fix this!

Changelog-Fixed: Fix profiles not updating
2023-10-06 10:42:17 -07:00
William Casarin 7ecb9aad62 nostrdb: only process sent note events, not subs 2023-10-06 10:42:17 -07:00
William Casarin d0daa9fafa nostrdb: add last fetched records for profiles 2023-10-06 10:42:17 -07:00
William Casarin 76f3cd4edc 21 2023-10-06 10:42:17 -07:00
transifex-integration[bot] 04917cfbe4 Translate Localizable.strings in pt_PT
100% translated source file: 'Localizable.strings'
on 'pt_PT'.
2023-10-05 23:18:35 +00:00
transifex-integration[bot] 641b255a71 Translate InfoPlist.strings in pt_PT
100% translated source file: 'InfoPlist.strings'
on 'pt_PT'.
2023-10-05 21:35:08 +00:00
transifex-integration[bot] 9f2eafc3cb Translate Localizable.strings in de
100% translated source file: 'Localizable.strings'
on 'de'.
2023-10-05 20:26:25 +00:00
transifex-integration[bot] e62ee11b06 Translate Localizable.strings in de
100% translated source file: 'Localizable.strings'
on 'de'.
2023-10-05 20:23:46 +00:00
Daniel D’Aquino bd94b76d1e ui: remove unnecessary url string manipulations
This is a follow up commit to `768ab3e9e4f55b872253d55c53983c19ab4c3d8b` in issue #1531

Testing
-------

**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit

**Steps:**
1. Remove all relays.
2. Add the Damus relay.
3. Add `wss://relay.snort.social/` relay **(with trailing slash)**. Shows up on the relay list. (PASS)
4. Add `wss://relay.snort.social/v1` and `wss://relay.snort.social/v2` to the list. Both show up as separate relays (PASS)
4. Watch logs and wait for the relay list event to be sent out
5. Restart Damus (to help ensure the repro is stable)
6. Try removing the Snort relay by swiping. Relay is removed successfully (PASS)
7. Try removing the "v1" relay by clicking on "Disconnect relay" in the detail page. "v1" relay (and NOT "v2") is removed (PASS)
8. Try adding `nos.lol` from the recommended list. Added successfully. (PASS)
9. Remove `nos.lol` with a long press. (PASS)

Changelog-Fixed: Fix issue where relays with trailing slashes cannot be removed (#1531)
Closes: https://github.com/damus-io/damus/issues/1531
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-04 15:28:10 -07:00
William Casarin 5fa138d050 v1.6 (20) changelog 2023-10-04 14:55:47 -07:00
William Casarin deb75df54e v1.6 (20) 2023-10-04 14:54:48 -07:00
transifex-integration[bot] 3365c72832 Translate Localizable.strings in es_419
100% translated source file: 'Localizable.strings'
on 'es_419'.
2023-10-04 16:54:02 +00:00
transifex-integration[bot] ca2960cc73 Translate Localizable.stringsdict in es_419
100% translated source file: 'Localizable.stringsdict'
on 'es_419'.
2023-10-04 16:52:27 +00:00
transifex-integration[bot] ce5855fe3d Translate InfoPlist.strings in es_419
100% translated source file: 'InfoPlist.strings'
on 'es_419'.
2023-10-04 16:52:02 +00:00
transifex-integration[bot] f56b35972d Translate Localizable.strings in es_419
100% translated source file: 'Localizable.strings'
on 'es_419'.
2023-10-04 16:51:33 +00:00
Daniel D’Aquino 24c2be02bb ui: Improve UX around clearing cache
Testing
-------

PASS

Device: iPhone 14 Pro simulator
iOS: Tested on iOS 17.0 and 16.4
Steps:

1. Go to appearance settings
2. Enable animations. Shows confirmation dialog. PASS
3. Click cancel. Setting is toggled back. PASS
4. Enable animations again. This time click "OK". Setting stays at what was set, and cache is visibly cleared. PASS
5. Restart app. Changes are persistent. PASS
6. Disable animations. Dialog appears like before. PASS
7. Cancel. Toggles back as expected. PASS
8. Disable animations again. This time click "OK". Cache is cleared. PASS
7. Restart app. Changes are persistent. PASS
9. Click on "clear cache". Confirmation dialog appears. PASS
10. Cancel action. We do not see cache being cleared. PASS
11. Click on "clear cache" and click "OK" this time.
12. We can see the cache being visibly cleared. It shows a loading spinner and "clearing cache", and then we see a checkmark icon with a "cache cleared" indicator. We cannot click the button again for now. PASS
13. Go to home view, scroll through some views, then come back to the setting. Clear cache button is visible again.

Closes: https://github.com/damus-io/damus/issues/1301
Changelog-Changed: Improve UX around clearing cache
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-03 19:17:22 -07:00
transifex-integration[bot] 5395c45df2 Translate InfoPlist.strings in sw
100% translated source file: 'InfoPlist.strings'
on 'sw'.
2023-10-03 13:51:03 +00:00
Daniel D’Aquino 1150a144bc composer: Make text editor more robust
This change makes the text editor/composer more robust and simple and solves Github issue #1558

It builds on the changes made for #1211, and on Jericho's (Jericho Hasselbush <jericho@sal-et-lucem.com>) discovery during his work on #1544

It uses setContentCompressionResistance, disabled text box scrolling, and dynamic height adjustments (based on more accurate layout calculations) to allow several improvements:
- It ensures lines get wrapped and not overflown
- It uses system native "scroll cursor into view" when typing, eliminating the need to a ghost caret
- It ensures we do not have a scroll view within a scroll view (which is confusing)
- It ensures that we set the height of the text box to its ideal value using a native layout calculation (Removes some issues with copying and pasting larger text)
- It resolves other small issues, such as #1558

Issue #1558 repro
-----------------

Result: VERIFIED

Device: iPhone 14 Pro Simulator
iOS: 17.0
Damus: `476f52562a70c2615ad084640dd1a0ba5c4c12e3`

Issue #1558 steps:

1. Type "hello world, hello @da"
2. Select "Damus" in contact list
3. Try moving cursor to the end of "world". Cursor should have gone there, but it immediately goes back to the end of "@damus " instead.

Testing for #1558
-----------------

Result: PASS

Device: iPhone 14 Pro Simulator
iOS: 17.0
Damus: This commit
Steps:

1. Type "hello world, hello @da"
2. Select "Damus" in contact list
3. Try moving cursor to the end of "world". Cursor goes there.

General functionality testing
-----------------------------

Result: CONDITIONAL PASS.
Summary: Behaviour is improved from #1211 patch, and #1558 is fixed. There are a few remaining issues, but they do not look like regressions from these changes. More details below.

Device: iPhone 14 Pro Simulator
iOS: 17.0
Damus: This commit
Coverage:

1. Basic typing works. PASS
2. Basic user tagging works. PASS
3. Typing long text line wraps the line. PASS
4. Adding newlines to the end of the text works and text is visible (i.e. Text box is expanding with text). PASS
5. Adding lots of newlines causes the text box and inner PostView content to expand, and those contents can be scrolled. PASS
6. Typing text when cursor is out of view (both up and down) causes PostView to scroll the cursor into view. PASS
7. Tagging user on a line positioned at the middle of the screen causes view to scroll cursor into view. PASS
8. Tagging user on a very long line positioned causes view to scroll cursor into view. PASS
9. Pasting very long text (5 paragraphs of Lorem Ipsum) expands the text box as necessary, wraps all long lines, scrolls cursor at the end into view. PASS
10. Scrolling through very long text shows that there is only one scroll view active (PostView's). PASS
11. Typing text that expands text box does not cause jitters. PASS
12. Typing mentions do not cause jitter. PASS
13. Adding newline from the end of a mid paragraph unfortunately still causes cursor to jump to the end of the text. This is an existing bug (https://github.com/damus-io/damus/issues/1521). EXISTING ISSUE.
14. Tagging a user at the end of a line when there are other lines below it may cause the cursor to jump a few characters forward. It is unclear whether this is a regression because prior to this change the cursor would get stuck at the end of the mention. But since this is a very specific edge case that might not be a regression, it might be a good idea to address this on a separate ticket. CONDITIONAL PASS
15. Could not run PostView unit tests due to various build errors on the test target.

Closes: https://github.com/damus-io/damus/issues/1558
Changelog-Fixed: Fix situations where the note composer cursor gets stuck in one place after tagging a user
Changelog-Fixed: Fix some note composer issues, such as when copying/pasting larger text, and make the post composer more robust.
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 13:30:08 -07:00
Daniel D’Aquino 89acde1b90 filters: Add filter to hashtag search timeline view (#1412)
Applied the content filters to the hashtag search timeline view, to filter out #nsfw-tagged posts on that view if the user has that setting enabled.

Testing of the fix
------------------

**PASS**

**iOS:** 17.0 (iPhone 14 Pro simulator)
**Damus:** This commit
**Test steps:**
1. Search for #sauna hashtag
2. Pick one post from results that contains multiple hashtags
3. Locally change nsfw filter in the code to another hashtag (I picked #homestead in this example) (This is to make testing easier)
4. Run app on simulator
5. Disable nsfw filtering
6. Search for the #sauna hashtag
7. Ensure that the post from step 2 is there
8. Turn on nsfw filtering
9. Search for the #sauna hashtag again. Ensure that post from step 2 is no longer visible
10. Switch keyword back to #nsfw in the code. Re-run app
11. Search for the #nsfw hashtag. No posts appear (timeline view is empty). (Not sure if this is the desired behavior, but seems reasonable)
12. Turn off nsfw filtering
13. Search for the #nsfw hashtag again. #nsfw posts should appear.

Closes: https://github.com/damus-io/damus/issues/1412
Changelog-Fixed: Apply filters to hashtag search timeline view
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-10-02 12:34:08 -07:00
transifex-integration[bot] ed98fd06e6 Update translations
- Translate Localizable.strings in pl_PL
- Translate Localizable.strings in sv_SE
- Translate Localizable.strings in nl
- Translate Localizable.strings in ja
- Translate Localizable.strings in hu_HU
- Translate Localizable.strings in es_ES
- Translate Localizable.strings in el_GR
- Translate Localizable.strings in de
- Translate Localizable.stringsdict in sv_SE
- Translate Localizable.stringsdict in nl
- Translate Localizable.stringsdict in ja
- Translate Localizable.stringsdict in hu_HU
- Translate Localizable.stringsdict in es_ES
- Translate Localizable.stringsdict in el_GR
- Translate Localizable.stringsdict in de
- Translate InfoPlist.strings in sv_SE
- Translate InfoPlist.strings in pl_PL
- Translate InfoPlist.strings in nl
- Translate InfoPlist.strings in ja
- Translate InfoPlist.strings in hu_HU
- Translate InfoPlist.strings in es_ES
- Translate InfoPlist.strings in el_GR
- Translate InfoPlist.strings in de
2023-10-02 12:34:08 -07:00
Fishcake 35c581066a fix video size detection, and audio track detection to work with HLS, add live stream indicator
Closes: https://github.com/damus-io/damus/pull/1560
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 12:34:08 -07:00
Fishcake d6c72403a3 include m3u8 files for video playback
Closes: https://github.com/damus-io/damus/pull/1560
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 12:34:08 -07:00
Daniel D’Aquino 768ab3e9e4 ui: Fix issue where relays with trailing slashes cannot be removed (#1531)
Summary
-------

This fixes the issue at Github #1531 where relays with trailing slashes cannot be removed.

The root cause (Identified by @fishcakeday) was that for a relay to be removed, a certain dictionary entry containing the relay url needed to be removed prior to sending the updated relay list. However those dictionary keys used `String` objects, which cannot tell that two URLs are the same with or without a trailing slash.

To fix the issue, I have used a dictionary with the type `[RelayURL: RelayInfo]`, and made the necessary protocol conformance implementations for RelayURL. This way, URLs are handled with higher accuracy (e.g. Trailing slashes do not matter, URLs that resolve to the same location will match no matter what).

This allows us to leverage the existing parsing and handling logic that comes with the `URL` type, instead of manually handling URL strings.

Generally speaking it is preferrable to work with higher level `URL` or `RelayURL` objects than handle URLs via `String`. There is an opportunity to refactor more code, but I intentionally kept the changes to `RelayURL` limited to the functionality in this issue, because otherwise the changeset becomes very big and risky.

Issue reproduction
------------------

**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** Local build from `476f52562` with the following local change:
``` diff

Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 12:34:08 -07:00
Daniel D’Aquino 66d731ad0a ui: Filter out reposts where the inner event is from a person whom the user has muted. (#1216)
Issue reproduction
------------------

**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** `bb2eb904cc`
**Steps:**

1. Repost a note from another account (Account "B")
2. Mute user "B"
3. Check home page and your own profile page. Repost shows up with a muted box.

Fix

Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 12:34:08 -07:00
Daniel D’Aquino 0f86a41c4a 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-10-02 12:34:08 -07:00
Mazin 957ac1dc03 Add translate.nostr.wine to available translation services
Closes: https://github.com/damus-io/damus/pull/1113
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 12:34:08 -07:00
tyiu a58ca2918a Remove nonfunctional LibreTranslate servers
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-10-02 12:34:08 -07:00
Daniel D’Aquino b86bac2e42 ui: Show muted thread replies at the bottom of the thread view (#1522)
Testing
-------

**PASS**

**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Steps:**

1. Setup accounts "A" and "B" that you control. Account "A" will be on our device under test.
2. Post something
3. Make a reply using Account A (Reply 1)
4. Make a reply using Account B (Reply 2)
5. Make another reply using account A (Reply 3)
6. Order of replies should be (top to bottom): 1, 2, 3
7. Mute user B
8. Order of replies should be: 1, 3, 2

Performance check
-----------------

**Device:** iPhone 14 Pro simulator
**iOS:** 17.0
**Damus:** This commit
**Steps:**

1. Locally change the code and add a print statement right before the sorting begins. In that print statement, include the number of events that will be sorted
2. Run Damus and go to a busy thread (I found one with 45 replies)
3. Go to the thread, and monitor the logs.
4. Navigate a bit between replies and monitor logs.

**Results:** I only saw a few print statements being printed with each navigation action, which indicates that we are not constantly re-sorting this object (which would be inefficient). Therefore, it seems like performance/efficiency would not be a problem.

Changelog-Changed: Show muted thread replies at the bottom of the thread view (#1522)
Closes: https://github.com/damus-io/damus/issues/1522
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-10-02 12:34:08 -07:00
Suhail Saqan 8a2e87718b camera: add CameraPreview for displaying the view the camera is reading 2023-10-02 12:34:08 -07:00
Suhail Saqan 88b3c6fe8d camera: add PhotoCaptureProcessor and VideoCaptureProcessor 2023-10-02 12:34:08 -07:00
transifex-integration[bot] 94d448e8d4 Translate InfoPlist.strings in zh_TW
100% translated source file: 'InfoPlist.strings'
on 'zh_TW'.
2023-10-02 18:06:45 +00:00
transifex-integration[bot] dda94cc1c1 Translate Localizable.strings in zh_TW
100% translated source file: 'Localizable.strings'
on 'zh_TW'.
2023-10-02 18:06:25 +00:00
transifex-integration[bot] 7f3cc8b7a1 Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-10-02 18:02:15 +00:00
transifex-integration[bot] 077d1aa1fd Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-10-02 18:00:07 +00:00
transifex-integration[bot] 7297db946d Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-10-02 17:59:57 +00:00
transifex-integration[bot] cc59e149d5 Translate InfoPlist.strings in zh_HK
100% translated source file: 'InfoPlist.strings'
on 'zh_HK'.
2023-10-02 17:46:53 +00:00
transifex-integration[bot] aca7dde889 Translate InfoPlist.strings in zh_CN
100% translated source file: 'InfoPlist.strings'
on 'zh_CN'.
2023-10-02 17:46:19 +00:00
transifex-integration[bot] b2584476ac Translate Localizable.strings in es_ES
100% translated source file: 'Localizable.strings'
on 'es_ES'.
2023-09-30 00:34:41 +00:00
transifex-integration[bot] 88fc8e41f7 Translate InfoPlist.strings in es_ES
100% translated source file: 'InfoPlist.strings'
on 'es_ES'.
2023-09-30 00:27:25 +00:00
transifex-integration[bot] a955b7beb8 Translate Localizable.stringsdict in es_ES
100% translated source file: 'Localizable.stringsdict'
on 'es_ES'.
2023-09-30 00:05:03 +00:00
transifex-integration[bot] 36c0307ebd Translate Localizable.strings in pl_PL
100% translated source file: 'Localizable.strings'
on 'pl_PL'.
2023-09-29 09:32:25 +00:00
transifex-integration[bot] c0377d630b Translate Localizable.strings in pl_PL
100% translated source file: 'Localizable.strings'
on 'pl_PL'.
2023-09-29 09:32:15 +00:00
transifex-integration[bot] 7390808630 Translate Localizable.strings in pl_PL
100% translated source file: 'Localizable.strings'
on 'pl_PL'.
2023-09-29 09:32:07 +00:00
transifex-integration[bot] 7444656043 Translate Localizable.strings in el_GR
100% translated source file: 'Localizable.strings'
on 'el_GR'.
2023-09-29 09:16:08 +00:00
transifex-integration[bot] 481280f006 Translate InfoPlist.strings in el_GR
100% translated source file: 'InfoPlist.strings'
on 'el_GR'.
2023-09-29 08:55:24 +00:00
transifex-integration[bot] aaf587c3a9 Translate InfoPlist.strings in pl_PL
100% translated source file: 'InfoPlist.strings'
on 'pl_PL'.
2023-09-29 08:55:05 +00:00
transifex-integration[bot] 641049f6b4 Translate Localizable.stringsdict in el_GR
100% translated source file: 'Localizable.stringsdict'
on 'el_GR'.
2023-09-29 08:50:47 +00:00
transifex-integration[bot] 433d186f67 Translate Localizable.strings in nl
100% translated source file: 'Localizable.strings'
on 'nl'.
2023-09-28 08:55:56 +00:00
transifex-integration[bot] d157d72ca1 Translate Localizable.stringsdict in sv_SE
100% translated source file: 'Localizable.stringsdict'
on 'sv_SE'.
2023-09-27 06:03:31 +00:00
transifex-integration[bot] 3a459c83df Translate Localizable.strings in sv_SE
100% translated source file: 'Localizable.strings'
on 'sv_SE'.
2023-09-27 06:03:00 +00:00
transifex-integration[bot] 945604afce Translate InfoPlist.strings in sv_SE
100% translated source file: 'InfoPlist.strings'
on 'sv_SE'.
2023-09-27 05:50:30 +00:00
transifex-integration[bot] 3945f20ae4 Translate Localizable.strings in hu_HU
100% translated source file: 'Localizable.strings'
on 'hu_HU'.
2023-09-26 12:07:48 +00:00
transifex-integration[bot] f3449ecaed Translate InfoPlist.strings in hu_HU
100% translated source file: 'InfoPlist.strings'
on 'hu_HU'.
2023-09-26 11:58:14 +00:00
transifex-integration[bot] 19857c12b7 Translate Localizable.stringsdict in hu_HU
100% translated source file: 'Localizable.stringsdict'
on 'hu_HU'.
2023-09-26 11:56:49 +00:00
transifex-integration[bot] 61612121f4 Translate InfoPlist.strings in nl
100% translated source file: 'InfoPlist.strings'
on 'nl'.
2023-09-25 15:37:45 +00:00
transifex-integration[bot] 9dac31d713 Translate Localizable.stringsdict in nl
100% translated source file: 'Localizable.stringsdict'
on 'nl'.
2023-09-25 15:37:24 +00:00
transifex-integration[bot] 9540016eee Translate Localizable.stringsdict in de
100% translated source file: 'Localizable.stringsdict'
on 'de'.
2023-09-25 09:37:28 +00:00
transifex-integration[bot] 22fe9f3dfd Translate InfoPlist.strings in de
100% translated source file: 'InfoPlist.strings'
on 'de'.
2023-09-25 09:36:14 +00:00
transifex-integration[bot] c469e07ff7 Translate Localizable.strings in de
100% translated source file: 'Localizable.strings'
on 'de'.
2023-09-25 09:35:22 +00:00
transifex-integration[bot] 201e4420d1 Translate Localizable.strings in ja
100% translated source file: 'Localizable.strings'
on 'ja'.
2023-09-25 03:20:17 +00:00
transifex-integration[bot] e7a948d362 Translate InfoPlist.strings in ja
100% translated source file: 'InfoPlist.strings'
on 'ja'.
2023-09-25 03:08:33 +00:00
transifex-integration[bot] 375d454b16 Translate Localizable.stringsdict in ja
100% translated source file: 'Localizable.stringsdict'
on 'ja'.
2023-09-25 03:06:37 +00:00
William Casarin 476f52562a nostrdb: fix profiles not updating
Send relay pool events to nostrdb as well

Whenever we send events to relays, make sure we send them to nostrdb
at the same time.

Changelog-Fixed: Fix profile not updating
2023-09-24 17:07:09 -07:00
William Casarin f591ad2dff ndb: add process_client_event helper
This is a quick helper for the new client event processing functionality
2023-09-24 17:06:35 -07:00
William Casarin dacade299d ndb: bump nostrdb to support client->relay note processing 2023-09-24 17:06:04 -07:00
Suhail Saqan cdacbcfdca util: add ImageResizer to change size of images 2023-09-24 11:58:16 -07:00
Daniel D’Aquino 41e036cff2 Remove toolbar background from profile view for better looks
Device: iPhone 13 mini (Physical device)
iOS: iOS 17.0.1
Remarks: Some entitlements removed locally to be able to build to device without access to development certificate

Steps
-----

1. Go to the home timeline view.
2. Click on a profile on any post
3. Swipe back to the home timeline view (Do not press "back" button)
4. Click on that same profile again
5. Scroll down the profile
6. Make sure that toolbar looks good (Does not have a white background)

Results: Swiping back from profile does not cause any issues. View layout of the custom navbar looks good

Changelog-Fixed: Fix small graphical toolbar bug when scrolling profiles
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-24 11:55:31 -07:00
tyiu eb901a4d84 Fix localization issues and export strings for translation
Changelog-Fixed: Fix localization issues and export strings for translation
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-24 11:33:51 -07:00
William Casarin 9f15688699 v1.6 (19) 2023-09-24 11:33:40 -07:00
Daniel D’Aquino 6d055be3cd Fix UI freeze after swiping back from profile (#1449)
On iOS 17.0, swiping back from a view that uses
`.navigationBarHidden(true)` caused the `NavigationStack` view to
freeze. This fixes the issue by creating a custom toolbar using
`.toolbar` instead.

Issue reproduction steps
------------------------

I found a very good clue to reproduce this issue from
[https://damus.io/note162rt4fctxepnj9cdtr9a82k7jtw3e33hj742ejly3q84tkwsfars4k9glr](https://damus.io/note162rt4fctxepnj9cdtr9a82k7jtw3e33hj742ejly3q84tkwsfars4k9glr)

**Device:** iPhone 13 mini (Physical device)
**iOS:** 17.0.1
**Damus:** 1.6 (18) 4377cf28ef
**Steps:**
1. Go to the home timeline view.
2. Click on a profile on any post
3. Swipe back to the home timeline view (Do not press "back" button)
4. Click on that same profile again

**Ideal behaviour:** On step 4, you should be taken to the profile view
**Actual behaviour:** The whole timeline view, top bar, etc seems to "freeze" and no longer respond.

Root causing investigation
--------------------------

I attempted various things until I could narrow it down. Here is a
summary of what I discovered:
1. First I attempted to investigate where the deadlock would live, by
   analyzing the thread states in the debugger. However:
    1. I did not find much differences between the thread states of a
       normal app running and the app running after the issue
    2. **I noticed that the tab bar at the bottom was still working, so
       unless those views are running on different threads, it might not
       have been a deadlock**
    3. NostrDB ingested and writer threads seemed to be waiting on a
       mutex most of the time I paused execution, but that also happened
       under normal conditions
    4. The crux of what made this difficult is that most of the UI
       related threads were in assembly, which was harder to interpret.
       However, the top of the stack in those threads were usually
       `mach_msg_trap`, which I believe is just the debugger
       interrupting execution. Below it, there were usually normal
       assembly instructions being run, such as `mov` and `ldp`
       instructions _(Move value and load a pair of registers)_, and
       stepping through some of those seemed to move the program
       counter. So I believe that the threads are running
    5. Running `thread info` on some of the threads (e.g. main) revealed
       that it seemed to be waiting on `mach_msg2_trap`, which again I
       believe is just the debugger pausing execution.
2. **After some more testing, I realized that swiping back only breaks
   when swiping back from the `ProfileView`, but not other views**
2. I tried to check if the issue was incorrect hashing of `Router`
   objects: `NavigationStack` uses `NavigationPath`, which needs a
   collection of hashable elements. I thought that if hashing was done
   incorrectly, the NavigationStack might have issues managing views.
   But that did not seem to be it either.
    1. I tried experimenting with the hashing logic for the Profile
       router. No changes
    2. I tried purposefully messing up with the hashing logic of a good,
       working view by adding random numbers into the hash. No issues on
       swiping out of that view either.
3. That lead me to the possibility that the issue is within the
   `ProfileView` body. I commented parts of the code out and tested each
   portion of it in a binary search fashion, and narrowed it down a
   specific line:

```
.navigationBarHidden(true)
```

Whenever I remove this line or set this to `false`, the freezing no
longer occurs. According to the Apple developer docs, this is
deprecated:
[https://developer.apple.com/documentation/swiftui/view/navigationbarhidden(_:)](https://developer.apple.com/documentation/swiftui/view/navigationbarhidden(_:))

I tried to replace it with its newer replacement: `.toolbar(.hidden,
for: .automatic)`, but that also causes the freeze.

So, just removing that line fixes the freeze, however it breaks the
layout by showing the unwanted back button.

Fix
---

I was able to fix it by implementing the custom toolbar under `.toolbar`
modifier, and hiding the back button (as opposed to the whole nav bar)

Testing of the fix
------------------

**PASS**

**Device:** iPhone 13 mini (Physical device)
**iOS:** iOS 17.0.1
**Damus:** This commit

**Special remarks:** Some entitlements removed locally to be able to
build to device without access to development certificate

**Test steps:** Same as reproduction steps

**Results:** Swiping back from profile does not cause any issues. View
layout of the custom navbar is unaltered in appearance.

iOS 16 smoke test
-----------------

**PASS**

**Device:** iPhone 14 Pro simulator
**iOS:** 16.4
**Damus:** This commit
**Special remarks:** Same as test above

**Test steps:** Same as reproduction steps. However here we are not
checking the freezing (as it was not reproducible in the simulator). We
are checking that the changes did not break navigation, nor layout, nor
caused any build issues.

**Results:** Working as expected

Closes: https://github.com/damus-io/damus/issues/1449
Changelog-Fixed: Fix UI freeze after swiping back from profile (#1449)
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-23 08:03:32 -07:00
William Casarin 01c6e3e9ab v1.6 (18) changelog 2023-09-21 18:08:56 -04:00
William Casarin 4377cf28ef v1.6 (18) 2023-09-21 18:05:59 -04:00
William Casarin 6f67c159ff ndb: switch to case-insensitive profile searches 2023-09-21 18:03:22 -04:00
William Casarin 7a85ae29ca search: switch to nostrdb profile searching
Changelog-Changed: Switch to nostrdb for @'s and user search
2023-09-21 13:19:22 -04:00
William Casarin fafe3b4b3e ndb: add nostrdb migrations 2023-09-21 09:10:06 -04:00
William Casarin 69c7acea76 tests: add ndb support to tests
stops it from crashing
2023-09-21 09:10:06 -04:00
William Casarin 22d635d850 ndb: don't verify flatbuffers in release builds 2023-09-21 09:10:06 -04:00
William Casarin fc9b9f2940 ndb: switch profile queries to use transactions
this should ensure no crashing occurs when querying profiles
2023-09-21 09:10:06 -04:00
William Casarin 622a436589 ndb: add NdbTxn transaction class
This will be used for transactions
2023-09-21 09:10:06 -04:00
William Casarin 9398877415 nostrdb/c: update to include transaction support 2023-09-21 09:10:06 -04:00
William Casarin 129d3ff101 ids: introduce NoteKey
These will be used to reference nostr notes from nostrdb
2023-09-21 09:10:06 -04:00
William Casarin bb4fd75576 nostrdb: add profiles to nostrdb
This adds profiles to nostrdb

- Remove in-memory Profiles caches, nostrdb is as fast as an in-memory cache
- Remove ProfileDatabase and just use nostrdb directly

Changelog-Changed: Use nostrdb for profiles
2023-09-21 09:10:06 -04:00
Daniel D’Aquino 8586eed635 ui: add followed hashtags to FollowingView
When users view who a certain person follows, now they will see an extra
tab to see the hashtags that they follow.

This new tab contains a list of followed hashtags, each of which
includes an option to follow/unfollow the hashtag, as well as the
ability to visit the hashtag timeline

Testing

**iOS:** 17.0 (iPhone 14 Pro Simulator)
**Damus:** (This commit)
**Test steps:**
1. Go to search view, search for a couple of hashtags: #apple, #orange, #kiwi
2. Go to the test accounts own profile via the drawer menu
3. Click on "Following". Make sure there are two tabs now.
4. Scroll down, switch tabs between "People" and "Hashtags". Make sure that scrolling and switching tabs work
5. Unfollow and follow a user. Make sure that this still works
6. Make sure that #apple, #orange, #kiwi hashtags are visible under the "Hashtags" tab
7. Unfollow "#kiwi". Check that the button label now switches from "Unfollow" to "Follow"
8. Click on "#kiwi". Make sure that it takes you to the page where posts with that hashtag appears
9. Go to @jb55's profile
10. Click on "Following"
11. Ensure that there is a "Hashtags" tab
12. Check that @jb55's followed hashtags are shown (not your own)
13. Follow one of the same hashtags as @jb55's
14. Go back to your own profile and go to your own following view again.
15. Make sure that this newly added tag is present on the list, and that #kiwi is not.

Closes: https://github.com/damus-io/damus/issues/606
Changelog-Added: Add followed hashtags to your following list
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-21 09:10:06 -04:00
William Casarin 440e37c1d3 filters: generalize ContentFilter
This simplifies our content filters so that it is a bit more flexible
for future additions.

Fixes: 0957cc896cc8 ("Add "Do not show #nsfw tagged posts" setting")
2023-09-21 09:10:06 -04:00
Daniel D’Aquino 49283f2bb2 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-21 09:10:06 -04:00
William Casarin 305ee03b0e relays: fix tld extraction performance issues
This uses a simpler variant that doesn't require a library. It is also
much faster and doesn't cause a delay when you open the relay view.

Not sure why I needed to touch other parts of the code to make the build
work. Probably xcode beta thing?
2023-09-21 09:10:06 -04:00
William Casarin a88f5db10b Revert "deps: add tldextract"
This reverts commit 4263b9690f.
2023-09-21 08:48:20 -04:00
Suhail Saqan d39a3da3b7 util: add separate_images and separate_invoices 2023-09-21 08:37:42 -04:00
ericholguin 40459e247e relays: user relay design 2023-09-16 14:15:27 -05:00
ericholguin fff4549933 relays: remove usage of show action button binding 2023-09-16 14:15:27 -05:00
ericholguin c4dfae9ede relays: update relay view to use new design
Changelog-Changed: Updated relay view
Closes: https://github.com/damus-io/damus/pull/1543
2023-09-16 14:15:27 -05:00
Daniel D’Aquino bfda0d1b74 ui: increase size of the hitbox on note ellipsis button
Changelog-Changed: Increase size of the hitbox on note ellipsis button
Closes: https://github.com/damus-io/damus/issues/1454
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-16 14:15:20 -05:00
Daniel D’Aquino 01b8e43a6e compose: fix text wrapping issue when mentioning npub
Closes: https://github.com/damus-io/damus/issues/1211
Changelog-Fixed: Fix text composer wrapping issue when mentioning npub
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-16 13:58:27 -05:00
Jon Marrs aa4ecc2139 test: add test cases for ASCII and UTF-8 characters in hashtags
Closes: https://github.com/damus-io/damus/pull/1546
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-15 12:31:17 -05:00
Jon Marrs 617dee3e6b damus-c: remove UTF-8 punctuation from hashtags
Check for UTF-8 punctuation (such as ellipsis) in addition to regular punctuation in hashtags.

Closes: https://github.com/damus-io/damus/issues/1518

Closes: https://github.com/damus-io/damus/pull/1546
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-15 12:31:17 -05:00
Daniel D’Aquino 510432bb98 ui: make blurred videos viewable by allowing blur to disappear once tapped
Closes: https://github.com/damus-io/damus/issues/1247
Changelog-Fixed: Make blurred videos viewable by allowing blur to disappear once tapped
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-15 12:31:05 -05:00
Jericho Hasselbush c4a9f2fdb2 ui: hold tap to preview status URL
Applied a WKWebkitView inside a .contextMenu to show preview status for
URL links in user status messages.

Closes: https://github.com/damus-io/damus/issues/1523
Changelog-Added: Hold tap to preview status URL
Signed-off-by: Jericho Hasselbush <jericho@sal-et-lucem.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-15 12:30:26 -05:00
Daniel D’Aquino b1e0a62109 nwc: fix parsing issue with NIP-47 compliant NWC urls without double-slashes
Closes: https://github.com/damus-io/damus/issues/1547
Changelog-Fixed: Fix parsing issue with NIP-47 compliant NWC urls without double-slashes
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-13 12:59:21 -06:00
William Casarin 1fc5ceff3b relays: fix withAnimation on older versions
Maybe this is an iOS17 thing?
2023-09-13 05:41:08 -07:00
William Casarin 16edc3fe13 relays: bouncy edit animation 2023-09-11 14:39:44 -07:00
William Casarin 6a88ca2777 relays: fix crash in new RelayPicView 2023-09-11 14:36:08 -07:00
William Casarin e3ccf95780 ui: fix padding of username next to pfp on some views
Changelog-Fixed: Fix padding of username next to pfp on some views
2023-09-11 14:36:08 -07:00
Bryan Montz 9bac83352b ui: improve bottom spacing for ImageView's tab indicator dots
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-11 14:36:08 -07:00
Bryan Montz 0803594553 ui: make ImageView's tab indicator dots tappable
Changelog-Changed: Make carousel tab dots tappable
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-11 14:35:50 -07:00
Jericho Hasselbush 8dad8e6703 posting: fix issue with username and multiple emojis
Fixes issue where username with multiple emojis would place cursor in
strange position. Now properly moves the cursor to space past the
multiple emoji user name.

Any amount would be great. Not a complex issue to fix!

Tipjar: lnbc1pj0eddtpp5km07jgrfm47nfswqqp33ngv374gzad2hshkra7zm3l0cmpusnp3qdqqcqzzsxqyz5vqsp5rklkzj9upf32z3c3nmc9xg4pdlz5p5mp3s332ygefexf79tq8ucs9qyyssqxfh4kz3sg9zczsnj49w23aw35z87jwyx9m5su8kkyxlspyjk4ajy7vhxuw2rzw4lz8vfutfakm2rggvpzhzs9ehfus4nl683dl99f4sqgm9zkq
Changelog-Fixed: Fixes issue where username with multiple emojis would place cursor in strange position.
Signed-off-by: Jericho Hasselbush <jericho@sal-et-lucem.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-11 07:48:36 -07:00
William Casarin e30d38e69f router: use tap gestures instead of nav links
I was hoping this would fix something but it did not
2023-09-10 18:27:37 -07:00
William Casarin c13f29e98c router: hash bytes for a quick sanity check
probably a no-op
2023-09-10 18:27:37 -07:00
William Casarin 5b901656f3 perf: fix weird lag when switching timelines 2023-09-10 18:25:35 -07:00
William Casarin 36acdf420e perf: remove zstack on profile pictures
helps a bit? I think?
2023-09-10 18:25:35 -07:00
William Casarin 76a6dbc406 perf: remove unused zstack on like button 2023-09-10 18:25:35 -07:00
William Casarin 1b1d4bd6d1 perf: use plain images for actionbar buttons
The action bar is really slow to render for some reason, start
removing stuff
2023-09-10 18:25:35 -07:00
William Casarin 14586b616c log: remove some verbose preload logs 2023-09-10 18:25:35 -07:00
ericholguin 7baf7e66dc relays: add relay pic view for displaying relay icons 2023-09-10 09:54:35 -07:00
William Casarin 4263b9690f deps: add tldextract
This is needed for the new relay view
2023-09-10 09:52:54 -07:00
Suhail Saqan 7f6a702412 emojis: make width dynamic and font bigger
add calculateOverlayWidth to support this

Closes: https://github.com/damus-io/damus/pull/1542
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-09 10:24:14 -07:00
ericholguin 6f35de65f9 relays: add icon field to metadata 2023-09-09 09:48:18 -07:00
ericholguin 65f3651896 ui: dont display globe image for free relay types 2023-09-09 09:45:45 -07:00
ericholguin 94ce604b9d components: add neutral button style component 2023-09-09 09:45:16 -07:00
ericholguin b934d66f64 components: add lighter gradient 2023-09-09 09:45:16 -07:00
ericholguin 20b6627799 colors: add variables for the new color assets 2023-09-09 09:45:16 -07:00
ericholguin 3e15f15a57 colors: add color sets from figma 2023-09-09 09:45:15 -07:00
petrikaj 5c87b8e610 transations: add finnish translation
Changelog-Added: Finnish translations
Closes: https://github.com/damus-io/damus/pull/1535
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:37 -07:00
William Casarin 42234b1cf3 remove timeline render logs 2023-09-07 10:33:37 -07:00
Bryan Montz 54ba64535d video: remove GSPlayer dependency
Changelog-Fixed: Fixed audio in video playing twice
Closes: https://github.com/damus-io/damus/pull/1539
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:34 -07:00
Bryan Montz 9cf53a9e93 video: remove VideoPlayer and switch to VideoController for cache
Closes: https://github.com/damus-io/damus/pull/1539
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:31 -07:00
Bryan Montz 3569da5687 video: switch player to use new view model
pass VideoController through containing views

Closes: https://github.com/damus-io/damus/pull/1539
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:19 -07:00
Bryan Montz f1f3abfb98 video: add DamusVideoPlayerViewModel
Closes: https://github.com/damus-io/damus/pull/1539
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:14 -07:00
Bryan Montz dec07df2c1 video: add VideoController, which hold cached metadata and mute states
Closes: https://github.com/damus-io/damus/pull/1539
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:12 -07:00
Bryan Montz 53734ea483 video: add AVPlayerView, a simple wrapper for AVPlayerViewController
Closes: https://github.com/damus-io/damus/pull/1539
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-07 10:33:07 -07:00
Grimless b18a0c573e profile: move the "Follow you" badge into the profile header
Move the "Follow you" badge into the profile header he profile header
out-of-line with the often long and already space-constrained
username/display name text

Changelog-Changed: Move the "Follow you" badge into the profile header
Closes: https://github.com/damus-io/damus/pull/1529
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-03 18:02:54 -07:00
Grimless f6f7d13f12 Properly implement top-level tests and fix one test using the wrong Block conversion property
Closes: https://github.com/damus-io/damus/pull/1528
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-03 18:02:32 -07:00
Grimless 6ee0be40e9 Create helper extensions for Block and update tests for the Block helper model
Closes: https://github.com/damus-io/damus/pull/1528
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-03 18:02:32 -07:00
Grimless a64f898df7 Move the Block helper type to its own file, collapse the various standalone functions for parsing block data, and refactor consumers to initialize a Block with given data and access its members as needed.
Closes: https://github.com/damus-io/damus/pull/1528
Signed-off-by: William Casarin <jb55@jb55.com>
2023-09-03 18:02:32 -07:00
Jon Marrs dd29e87146 test: pass keypair instead of privkey for test cases
Tests were not building due to recent changes in the Damus source code that replaced privkey with keypair. This patch extends those changes to the test cases, allowing the tests to build and pass.

Signed-off-by: Jon Marrs <jdmarrs@gmail.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-31 08:52:28 -07:00
William Casarin c71b0ee916 blocks: pass keypair instead of privkey to avoid pubkey gen
Generating a pubkey is quite slow, so pass a keypair instead of privkey
2023-08-28 11:47:29 -07:00
William Casarin 8e92e28faf test: optionally remove lmdb db
otherwise tests fail on CI
2023-08-28 10:34:37 -07:00
William Casarin 5657512370 ndb: restore escaped slash fix 2023-08-28 10:09:49 -07:00
William Casarin 882f6e2534 ndb: update nostrdb, fix alignment issues 2023-08-28 08:19:03 -07:00
William Casarin 2f60888fb1 ndb: remove patch from copy script, just use sed 2023-08-28 08:18:25 -07:00
William Casarin ba6792640d flatbuffers: update bindings, add verifier 2023-08-28 08:17:25 -07:00
William Casarin 984c7b6932 ndb: ensure profile flatbuffers are not copied
These are pointers into LMDB's virtual memory map of the database. No
copy required.
2023-08-28 08:00:45 -07:00
William Casarin 0bbc2c6348 ndb: save in documents instead of cache dir
This is more long term storage
2023-08-28 08:00:45 -07:00
William Casarin c44c0d0863 profile: remove deleted flag
it's not used anymore
2023-08-28 08:00:45 -07:00
William Casarin 50d55572be Fix crash when long pressing custom reactions
Changelog-Fixed: Fix crash when long pressing custom reactions
2023-08-28 08:00:45 -07:00
William Casarin caffa0398b nostrdb: profile flatbuffers in nostrdb working! 2023-08-26 20:46:42 -07:00
William Casarin 92bbc9766d project: disable compile warnings for lmdb and nostrdb 2023-08-26 20:46:42 -07:00
William Casarin 699f77d9e1 add extended virtual memory entitlement
This will allow larger nostrdb databases
2023-08-26 20:46:42 -07:00
William Casarin 4c0166bd31 add swift flatbuffers 2023-08-26 20:46:42 -07:00
William Casarin 35b67dc08d nostrdb: initial Ndb class 2023-08-26 17:11:41 -07:00
William Casarin 1f5f1e28a4 nostrdb: pull latest, adding flatcc and lmdb 2023-08-25 19:05:34 -07:00
William Casarin f30f93f65c Revert "Move the Block helper type to its own file"
This fixes the broken tests

This reverts commit 286ae68fd6.
2023-08-25 19:05:34 -07:00
William Casarin 7255481705 v1.6 (17) changelog 2023-08-23 17:49:30 -07:00
William Casarin 16fa701509 v1.6 (17) 2023-08-23 17:48:32 -07:00
William Casarin 2c6999e15c status: support clickable status urls
Changelog-Added: Add support for status URLs
2023-08-23 17:46:31 -07:00
William Casarin 981d500c25 status: click music urls to display in spotify
Changelog-Added: Click music statuses to display in spotify
2023-08-23 17:17:53 -07:00
William Casarin d02fc9142d status: add settings for disabling statuses in the UI
Suggested-by: Tanel
Changelog-Added: Add settings for disabling user statuses
2023-08-23 16:43:55 -07:00
William Casarin db59f74970 status: add missing status to some thread event views 2023-08-23 16:31:10 -07:00
William Casarin bf3ca4a186 status: truncate statuses to a single line
Changelog-Fixed: Fix long status lines
2023-08-23 16:23:18 -07:00
William Casarin 53c2b3a48d status: clear statuses if they only contain whitespace
Changelog-Changed: clear statuses if they only contain whitespace
2023-08-23 16:19:19 -07:00
William Casarin 23a8d6fb6b status: fix status events not expiring locally
Changelog-Fixed: Fix status events not expiring locally
2023-08-23 16:11:48 -07:00
William Casarin 042b7da315 status: ignore processing expired events 2023-08-23 15:56:41 -07:00
William Casarin e62ba5826b v1.6-16 changelog 2023-08-23 13:31:41 -07:00
William Casarin 1d11bb40b5 v1.6 (16) 2023-08-23 13:30:38 -07:00
William Casarin 0338297bfe Live Music & Generic Statuses
Changelog-Added: Added live music statuses
Changelog-Added: Added generic user statuses
2023-08-23 13:26:55 -07:00
William Casarin 59cf8056bd sidemenu: split out profile section
We will be adding to this and it is getting messy
2023-08-23 09:52:50 -07:00
William Casarin d34d417fcc home: collapse guard statement
small nit refactor
2023-08-23 09:27:09 -07:00
William Casarin b665a40a11 fix build 2023-08-23 09:25:47 -07:00
gladiusKatana 5caa4a6e97 videos: improve precision & sensitivity of auto-pause mechanism
Closes: https://github.com/damus-io/damus/pull/1308
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-23 09:24:13 -07:00
Grimless c5d8e4a4a1 Simplify and inline Report event logic.
Closes: https://github.com/damus-io/damus/pull/1498
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-23 09:13:38 -07:00
tappu75e@duck.com 8b600a9774 Avoid notification for zap from mute profiles
Changelog-Fixed: Avoid notification for zaps from muted profiles
Closes: https://github.com/damus-io/damus/pull/1494
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-23 09:10:22 -07:00
Grimless 286ae68fd6 Move the Block helper type to its own file
Collapse the various standalone functions for parsing block data, and
refactor consumers to initialize a Block with given data and access its
members as needed.

Closes: https://github.com/damus-io/damus/pull/1496
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-21 17:11:43 -07:00
William Casarin 6ab893a617 profile: remove redundant view builder 2023-08-21 13:26:33 -07:00
William Casarin 9bfb59c4cc docs: people like centralized tools
This was confusing people, make it clear that github PRs are fine
2023-08-21 13:26:33 -07:00
Daniel D’Aquino dcb94635ea Fix text editing issues on characters added right after mention link
Changelog-Fixed: Fix text editing issues on characters added right after mention link
Closes: https://github.com/damus-io/damus/issues/1375
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Tested-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-20 17:25:06 -07:00
Fishcake c464a26151 use nostr.build api v2 with optional nip98 support
Closes: https://github.com/damus-io/damus/pull/1471
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-20 16:29:33 -07:00
Fishcake 9104ddb051 add function to create nip98 http authorization header
Closes: https://github.com/damus-io/damus/pull/1471
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-20 16:29:33 -07:00
Fishcake 1432087edf add nostr event 27235 (nip-98)
Closes: https://github.com/damus-io/damus/pull/1471
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-20 16:29:33 -07:00
William Casarin ae2f7255a7 Mute hellthreads everywhere
Changelog-Fixed: Mute hellthreads everywhere
Fixes: https://damus.io/note1rn3ckl76myga6xcefr0le52d8czd0wqe8apguewqknyv7m55mmpq3rv3hv
2023-08-20 11:45:25 -07:00
William Casarin d5b944170f actually build 15 because reasons 2023-08-20 11:25:01 -07:00
William Casarin 9fb1cc5b57 v1.16 (13) changelog 2023-08-18 11:20:51 -07:00
William Casarin 2e512317e7 v1.6 (13) 2023-08-18 10:10:18 -07:00
tappu75e@duck.com f9eb669132 replies: fix bug where it would sometimes show -1
Changelog-Fixed: Fix bug where it would sometimes show -1 in replies
Closes: https://github.com/damus-io/damus/pull/1476
2023-08-18 08:41:21 -07:00
Daniel D‘Aquino 066b3cdde8 Fix image links appearing with escaped slashes
Changelog-Fixed: Fix images and links occasionally appearing with escaped slashes
Closes: https://github.com/damus-io/damus/issues/1468
Signed-off-by: Daniel D‘Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
Rewarded-sats: 50000
2023-08-18 08:41:21 -07:00
William Casarin 7f313dcbd4 nostrscript: add comment about iOS virtual memory allocs
I'm really just doing this because I forgot a changelog entry

Changelog-Fixed: Fixed nostrscript not working on smaller phones
2023-08-18 08:41:21 -07:00
William Casarin 1dabd88355 nostrscript: reduce size of wasm page allocation
smaller phones don't like this
2023-08-11 07:47:15 -07:00
Suhail Saqan 4f33641244 change button scale effect
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-11 07:08:44 -07:00
William Casarin 006a6ef16f Show possibly invalid zaps if we don't have the event in cache
Changelog-Fixed: Fix zaps sometimes not appearing
2023-08-10 10:32:57 -07:00
William Casarin 7467a9d5b1 Fix empty lines in profile and reposting-the-wrong-thing bugs
Changelog-Fixed: Fixed issue where reposts would sometimes repost the wrong thing
Changelog-Fixed: Fixed issues where sometimes there would be empty entries on your profile
2023-08-09 09:16:29 -07:00
William Casarin 9f01cab2be simplify reduce_text_block 2023-08-08 17:09:45 -07:00
William Casarin 502917012c v1.6 (11) changelog 2023-08-07 08:46:23 -07:00
William Casarin 916f7d789e v1.6 (11) 2023-08-07 08:45:07 -07:00
William Casarin 21eda288c4 timeline: show renotes in Notes timelines
Changelog-Changed: Show renotes in Notes timeline
Fixes: https://github.com/damus-io/damus/issues/676
2023-08-07 08:24:02 -07:00
William Casarin 25e022d933 reply: ensure the person you're replying to is the first entry in the reply description
Suggested-by: Tanel
Changelog-Fixed: Ensure the person you're replying to is the first entry in the reply description
2023-08-06 15:37:32 -07:00
William Casarin e642913944 notifications: don't cutoff text
Changelog-Fixed: don't cutoff text in notifications
2023-08-06 14:58:32 -07:00
cr0bar 967785392f note: fix paragraphs not appearing on iOS17
In some edge cases, the inflated UiTextView didn't render properly
causing a black screen which needed the user to scroll. Dropped the
inflate size and now only set where selectedTextHeight is .zero, seems
more reliable.

Closes: https://github.com/damus-io/damus/pull/1427
Changelog-Fixed: Fix paragraphs not appearing on iOS17
2023-08-06 14:23:11 -07:00
William Casarin 9e6fbeefcd url: smartparens hack
support urls like (https://jb55.com/something)
2023-08-06 14:16:43 -07:00
William Casarin de58e52199 dms: move timestamp outside of bubble 2023-08-06 14:07:04 -07:00
William Casarin 53e9269da6 urls: fix wikipedia url detection with parenthesis
Fixes: f0df4aa218 ("Strip common punctuations from URLs")
Fixes: https://github.com/damus-io/damus/issues/1027
Closes: https://github.com/damus-io/damus/pull/1063
Changelog-Fixed: Fix wikipedia url detection with parenthesis
2023-08-06 13:53:28 -07:00
Joel Klabo 85930df8e3 tests: add url parens tests 2023-08-06 13:51:39 -07:00
William Casarin cf3a9a576d test: move existing url tests to UrlTests 2023-08-06 13:50:20 -07:00
William Casarin e397fc069b make: add tags target 2023-08-06 13:50:20 -07:00
William Casarin 2529797dfb todo: add local todo helper 2023-08-06 13:50:20 -07:00
William Casarin bd2193251f build: fix some build issues with the last revert
Fixes: 1a2ac976a3 ("Fix old notifications always appearing on first start")
2023-08-06 11:30:28 -07:00
William Casarin 1a2ac976a3 Fix old notifications always appearing on first start
Revert "home: debounce last notified"

This is technically incorrect, as debouncing can prevent saving
important events.

The proper way to do this is to save it locally in memory, and then
debouncing the saving itself. Will do this soon.

Reverts: a9b4cfd424
Fixes: https://github.com/damus-io/damus/issues/1439
Changelog-Fixed: Fixed old notifications always appearing on first start
2023-08-06 09:22:28 -07:00
William Casarin d4faacb99f relays: strip trailing / from relay urls
Fixes: https://github.com/damus-io/damus/issues/1443
Changelog-Fixed: Fix issue with slashes on relay urls causing relay connection problems
2023-08-06 09:07:33 -07:00
William Casarin a73271e3d4 debug: remove note size debug
ThreadSanitizer was complaining about a data race
2023-08-06 09:07:33 -07:00
William Casarin 624a7b4e88 notifications: fix rare crash with local notification
This shouldn't happen, but I found a log that crashed here, so we will
fix this anyways.

Changelog-Fixed: Fix rare crash triggered by local notifications
2023-08-06 08:33:51 -07:00
William Casarin 5b9803d234 script: add build-git-hash.txt build output
Otherwise we get warnings
2023-08-06 07:54:23 -07:00
William Casarin 3098d4b4fa bar: fix crash when long pressing emoji selection
Changelog-Fixed: Fix crash when long-pressing reactions
2023-08-06 07:10:01 -07:00
William Casarin 0178478199 decoding: fix decoding of large events like nostr reports
I was trying to do an initial malloc that was somewhat efficient. Looks
like our ndb_builder needs a bit more space when allocating the
ndb_note.

Changelog-Fixed: Fixed nostr reporting decoding
2023-08-06 06:56:24 -07:00
William Casarin d489bcc586 test: add test for failing nostr report event 2023-08-06 06:56:24 -07:00
William Casarin 453d540255 search: find_event_with_subid
I needed this to find a bug in event decoding
2023-08-06 06:56:24 -07:00
Suhail Saqan 5ded564bdc settings: change settings order: Reactions -> Developer
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-05 18:48:44 -07:00
Suhail Saqan 3908192fe2 reactions: add close button to custom reactions
Signed-off-by: William Casarin <jb55@jb55.com>
Changelog-Added: Add close button to custom reactions
2023-08-05 18:48:35 -07:00
Suhail Saqan 92020e551b reactions: add ability to change order of emojis
Signed-off-by: William Casarin <jb55@jb55.com>
Changelog-Added: Add ability to change order of custom reactions
2023-08-05 18:48:30 -07:00
Suhail Saqan ccd52a09d8 reactions: remove some left padding from add and remove buttons
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-05 18:48:24 -07:00
Suhail Saqan ced3c76996 reactions: only allow copy emoji when editing
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-05 18:48:16 -07:00
Suhail Saqan 29bba15230 qr: dismiss qrcode fullScreenCover on scan
Signed-off-by: William Casarin <jb55@jb55.com>
Changelog-Fixed: Dismiss qr screen on scan
2023-08-05 18:48:11 -07:00
Suhail Saqan fb179ac1d4 qr: show QRCameraView regardless of same user
Signed-off-by: William Casarin <jb55@jb55.com>
Changelog-Fixed: Show QRCameraView regardless of same user
2023-08-05 18:48:11 -07:00
Suhail Saqan 7900865c02 bar: wiggle long press reactions
Signed-off-by: William Casarin <jb55@jb55.com>
Changelog-Fixed: Fix wiggle when long press reactions
2023-08-05 18:48:01 -07:00
Suhail Saqan 0350809e82 bar: fix reaction button breaking scrolling
Signed-off-by: William Casarin <jb55@jb55.com>
Changelog-Fixed: Fix reaction button breaking scrolling
2023-08-05 18:44:54 -07:00
Bryan Montz cddb88b890 fix: crash when muting threads
Fixes a crash when the user mutes a thread. UserDefaults didn't know how
to serialize a NoteId for storage, so we'll convert it to the hex id
first.

Changelog-Fixed: Crash when muting threads
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-04 09:35:35 -07:00
William Casarin 14ba33674b setting: adjustable font size for jack the zapper
Changelog-Added: Adjustable font size
2023-08-03 18:38:20 -07:00
William Casarin c0f4e3fe03 v1.6 (9) 2023-08-03 17:25:52 -07:00
William Casarin dae2e8ef56 Revert "Fix for missing bottom half of a note"
This reverts commit 39dce64131.
2023-08-03 17:23:53 -07:00
William Casarin b2d2fbee0d v1.6-8 changelog 2023-08-03 13:36:24 -07:00
William Casarin cebd1f48ca ndb: switch to nostrdb notes
This is a refactor of the codebase to use a more memory-efficient
representation of notes. It should also be much faster at decoding since
we're using a custom C json parser now.

Changelog-Changed: Improved memory usage and performance when processing events
2023-08-03 13:20:36 -07:00
William Casarin 55bbe8f855 disable nostrscript test for now 2023-08-03 13:15:32 -07:00
cr0bar 39dce64131 Fix for missing bottom half of a note
Strange fix, but by increasing the height of a UiTextView past the size
of any legitimate content, then re-sizes back to the correct size
displaying the full content.

Changelog-Fixed: Fixed disappearing text on iOS17
2023-08-03 12:34:18 -07:00
William Casarin b556257edd util: add structured logger 2023-08-03 12:17:56 -07:00
Daniel D‘Aquino cdc4a7b7a4 Fix UTF support for hashtags
Changelog-Fixed: Fix UTF support for hashtags
Closes: https://github.com/damus-io/damus/issues/1411
Signed-off-by: Daniel D‘Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-03 12:17:32 -07:00
Daniel D‘Aquino ef5a3030a6 Add unit tests surrounding creation of posts with non-latin hashtags, as well as the rendering of non-latin hashtag
Signed-off-by: Daniel D‘Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-03 12:17:32 -07:00
Daniel D‘Aquino f0b8dcc5e9 Split view previews in NoteContentView to make both variants visible
Signed-off-by: Daniel D‘Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-03 12:17:32 -07:00
Daniel D‘Aquino 72b60573de Fix compilation error on test target in UserSearchCacheTests
Changelog-Fixed: Fix compilation error on test target in UserSearchCacheTests
Signed-off-by: Daniel D‘Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-08-03 12:17:32 -07:00
William Casarin 6e6c1eb7b6 ndb: make AsciiCharacter a CustomStringConvertible 2023-08-01 21:53:19 -07:00
William Casarin 07dfa3b1fb ndb: update nostrdb
This include various fixes for parsing and key decoding
2023-08-01 21:53:19 -07:00
William Casarin 88306d00a3 key: generate a FullKeypair when generating new keys 2023-08-01 21:53:19 -07:00
William Casarin 616de2eebc state: improve damus state init
It's a bit cleaner now
2023-08-01 21:53:19 -07:00
William Casarin 709aab549b nav: fix nav crashes and buggyness
just use the hashable for equality

Changelog-Fixed: Fix nav crashing and buggyness
2023-08-01 21:53:05 -07:00
William Casarin 15ab9f7135 scroll: allow any hashable target 2023-08-01 21:52:23 -07:00
William Casarin d4aa8a5602 config: show git hash in version info
This will be useful for sanity checks and bisecting
2023-08-01 09:29:09 -07:00
William Casarin a9b4cfd424 home: debounce last notified
Calling UserDefaults fast in a loop is not good
2023-07-31 05:38:19 -07:00
William Casarin 2b99f94d13 profiledb: disable database lookups for now
This is causing extremely bad lag in the UI
2023-07-31 05:38:19 -07:00
William Casarin 66e204eb91 notifications: don't do expensive id calculation 2023-07-31 05:38:19 -07:00
William Casarin 7040235605 refactor: add Pubkey, Privkey, NoteId string aliases
This is a non-behavioral change in preparation for the actual switchover
from Strings to Ids. The purpose of this kit is to reduce the size of
the switchover commit which is going to be very large.
2023-07-31 05:38:19 -07:00
William Casarin f9d21ef901 test: rename test_event to test_note 2023-07-31 05:38:19 -07:00
William Casarin a08d0a5a19 ndb: more id transition helpers 2023-07-31 04:08:07 -07:00
William Casarin ff20cc4767 tests: enable code coverage 2023-07-31 03:25:50 -07:00
William Casarin aacb336002 Update Translations 2023-07-30 11:57:18 -07:00
William Casarin b40c595a7c notify: switch over to new typesafe notifications 2023-07-30 11:02:44 -07:00
William Casarin 80063af19a notify: add typesafe notifications 2023-07-30 11:02:44 -07:00
William Casarin df3b94a1fc notify: add typesafe notify class 2023-07-30 11:02:44 -07:00
William Casarin 06a66a3709 add some type aliases to make the ndb move more incremental 2023-07-30 10:52:02 -07:00
William Casarin 1463ce5e3a profile: don't notify on notice
this is just a waste of cpu at this point and could cause main thread
blocking issues
2023-07-30 10:52:02 -07:00
Joel Klabo 480921db20 Suggested Users to Follow
ui: Add Suggested Users Views and Helpers
ui: Add Logic to Launch Suggested User Screen

Changelog-Added: Suggested Users to Follow
2023-07-29 10:25:24 -07:00
doffing.brett f0de8721c7 Center and Pad buttons in EULA 2023-07-29 10:11:38 -07:00
Suhail Saqan d11cd76e6a Add multiple reaction support
Changelog-Added: Add support for multiple reactions
Closes: https://github.com/damus-io/damus/issues/1335
2023-07-29 10:03:55 -07:00
Daniel D'Aquino' via patches 815f4d4a96 Allow relay logs to be opened in dev mode even if relay is disconnected
Changelog-Fixed: Allow relay logs to be opened in dev mode even if relay
Closes: https://github.com/damus-io/damus/issues/1368
Signed-off-by: Daniel D'Aquino <daniel@daquino.me>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-29 09:44:36 -07:00
Bryan Montz 4fecf72963 fix: endless connection attempt loop after user removes relay
This patch fixes an issue where, after the user removes a misbehaving
relay, the RelayConnection will keep trying to reconnect endlessly. You
can reproduce the issue prior to this change by adding the relay
wss://brb.io. It will fail to connect over and over. Then remove the
relay in the UI. In the console, you will see that it keeps trying to
connect, and the corresponding RelayConnection never gets deallocated.
After the change, it stops connecting and deallocates the
RelayConnection.

Changelog-Fixed: endless connection attempt loop after user removes relay
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-29 09:18:03 -07:00
William Casarin 593d0e2abe ndb: sync up a few remaining NdbNote tag differences 2023-07-25 16:22:25 -07:00
William Casarin 2f8aa29e92 ndb: make NostrEvents immutable
Since we can't mutate NdbNotes, let's update the existing codebase to
generate and sign ids on NostrEvent constructions. This will allow us to
match NdbNote's constructor
2023-07-25 15:34:05 -07:00
William Casarin e3c04465fc ndb: move to uint32 for kind and created_at 2023-07-25 15:24:26 -07:00
William Casarin 54d40f7ffd ndb: move hexchar into header
since it's used in a few places
2023-07-25 15:23:36 -07:00
William Casarin 2053033b25 ndb: make note equatble
We need this for the switchover
2023-07-24 13:09:27 -07:00
William Casarin 45801f3e6c ndb: rename NostrEvent to NostrEventOld
This facilitates the switch to NdbNote by allowing us to switch back and
forth to fix things.
2023-07-24 13:08:55 -07:00
William Casarin 2d44f2744b ndb: switch to computed property for tags
this will allows us to change less code on the switchover
2023-07-24 13:08:18 -07:00
William Casarin 04e408bfea ndb: implement a few more event things
We're basically done. Time to try the switch-over
2023-07-24 12:41:12 -07:00
William Casarin b3c87bdc07 test: remove unused var 2023-07-24 12:40:04 -07:00
William Casarin b5dd90b36a notes: generalize event_is_reply a bit
so that it works with NdbNote as well
2023-07-24 12:39:55 -07:00
William Casarin 6fa9149939 ndb: avoid double constructor on References 2023-07-24 11:05:18 -07:00
William Casarin 1e9e4a7f3a ndb: implement eventref building from ndb notes 2023-07-24 10:55:34 -07:00
William Casarin c8e236b6d5 ndb/test: add more test coverage on char iter 2023-07-23 12:21:36 -07:00
William Casarin e8d0f1db8d test: fix some ndb test warnings 2023-07-23 12:12:42 -07:00
William Casarin 99b5dc94cb ndb: copy over perf improvements 2023-07-23 12:11:08 -07:00
William Casarin e34351ca37 ndb: fix iterators, pack id tags, more tests 2023-07-23 11:55:36 -07:00
William Casarin 1a33d639ed test: remove some unused perf tests 2023-07-23 11:54:58 -07:00
William Casarin 5c1043b4e5 ndb: add cchar constructors to AsciiCharacter
This will be used for the cchar iterator
2023-07-23 11:54:07 -07:00
William Casarin 23b5763a6b git: ignore perf baselines
this is system-dependent
2023-07-23 11:50:02 -07:00
William Casarin dd65209a20 Revert "ndb: remove TagIterators and just use sequences"
This reverts commit f0d07c3663.
2023-07-23 10:56:12 -07:00
William Casarin f0d07c3663 ndb: remove TagIterators and just use sequences
Still learning...
2023-07-22 21:12:53 -07:00
William Casarin b3119fa41e test: small test fix 2023-07-22 17:23:11 -07:00
William Casarin 7ec8da6c73 ndb: start implementing existing NostrEvent functionality
We eventually want to switch over to NdbNote instead of NostrEvent. To
facilitate this, the plan is to eventually make NostrEvent an alias of
NdbNote. For this to work, let's make sure the NostrEvent extensions are
implemented on NdbNote.

We will likely switch away from string properties as well, but for now
we will try to emulate as much as possible to make sure everything is
working first.
2023-07-22 17:19:47 -07:00
William Casarin 9e659c49b5 ndb/test: add a few more tests 2023-07-22 17:19:47 -07:00
William Casarin c72666b352 ndb: add subscript and count for TagsSequence
These are helpful
2023-07-22 17:19:47 -07:00
William Casarin 1854e10486 mentions: add ndb mention parser 2023-07-22 17:19:47 -07:00
William Casarin 58e2fb40ef iter: make safer by using NdbNote instead of unsafe pointers
If we have an owned note, we could lose track of the lifetime and then
crash. Let's make sure we always have an NdbNote instead
2023-07-22 17:19:47 -07:00
William Casarin af7ea7024f misc: don't immediately hex encode event commitment
keep it separate for now, since we're moving to more low level. We
probably won't even use this, but this is cleaner logicwise anyway.
2023-07-22 17:19:47 -07:00
William Casarin 0263c11a94 ndb: add content and owned_size 2023-07-22 17:19:47 -07:00
William Casarin 6d43754e71 ndb: add pubkey to NdbNote 2023-07-22 17:19:47 -07:00
William Casarin 4da23390f8 ndb: update lib 2023-07-22 17:19:47 -07:00
William Casarin c74993366b move copyndb to the right folder 2023-07-22 17:19:47 -07:00
William Casarin ad0e1f28b7 test: fix build and tests 2023-07-21 15:26:03 -07:00
William Casarin 61051ee853 nostrdb: add initial swift integration 2023-07-21 15:02:01 -07:00
William Casarin dc7826c4e5 c: add nostrdb c lib 2023-07-21 15:02:01 -07:00
William Casarin 4eee715bcd c: add jsmn json parser
This is used by the nostrdb lib. Let's add it here.
This doesn't unescape things, so we'll still need to do that manually.
2023-07-21 14:56:24 -07:00
William Casarin 08bea16be0 c: add new cursor util
this is used by nostrdb as well. so add it here ahead of time.
2023-07-21 14:55:54 -07:00
William Casarin 8f04b12a90 c: add copy nostrdb devtool 2023-07-21 14:55:54 -07:00
William Casarin 9cfed9f3aa c: update protoverse_cursor to jb55_cursor
Will be using this in the new db implementation
2023-07-21 14:39:21 -07:00
William Casarin 123ca3b802 test: add my contact list for as json parsing test data 2023-07-21 14:39:21 -07:00
William Casarin 5e7b1f4ff3 event: separate logic from data using extensions
I'm not a huge fan of this pattern but it's getting messy in here
2023-07-21 14:39:11 -07:00
tyiu 12594e35c1 Update translations
47	Translate Localizable.stringsdict in de
6	Translate Localizable.strings in de
3	Translate Localizable.strings in zh_CN
2	Translate Localizable.strings in sv_SE
2	Translate Localizable.strings in es_419
1	Translate Localizable.stringsdict in zh_TW
1	Translate Localizable.stringsdict in zh_HK
1	Translate Localizable.stringsdict in zh_CN
1	Translate Localizable.stringsdict in sv_SE
1	Translate Localizable.stringsdict in pl_PL
1	Translate Localizable.stringsdict in es_419
1	Translate Localizable.strings in zh_TW
1	Translate Localizable.strings in zh_HK
1	Translate Localizable.strings in pl_PL
1	Translate Localizable.strings in nl

Closes: https://github.com/damus-io/damus/pull/1373
2023-07-19 10:11:42 -07:00
tyiu ab92f7b561 Update localization issues and export strings for translation 2023-07-19 10:08:30 -07:00
William Casarin 11b9062865 test: fix some warnings 2023-07-19 10:04:25 -07:00
William Casarin 5c5b55bf67 v1.6 (7) changelog 2023-07-17 14:39:27 -07:00
William Casarin dd6c082a8e v1.6 (7) 2023-07-17 14:35:54 -07:00
William Casarin 2a4ee6c48c zaps: don't spam lnurls when validate zaps
lnurls.lookup_or_fetch not fetched lnurl1dp68gurn8ghj7um9dej8xct5wvhxcmmv9uh8wetvdskkkmn0wahz7mrww4excup0df3r2dg3mj444
fetching static payreq lnurl1dp68gurn8ghj7um9dej8xct5wvhxcmmv9uh8wetvdskkkmn0wahz7mrww4excup0df3r2dg3mj444
lnurls.lookup_or_fetch already fetching lnurl1dp68gurn8ghj7um9dej8xct5wvhxcmmv9uh8wetvdskkkmn0wahz7mrww4excup0df3r2dg3mj444
lnurls.lookup_or_fetch already fetching lnurl1dp68gurn8ghj7um9dej8xct5wvhxcmmv9uh8wetvdskkkmn0wahz7mrww4excup0df3r2dg3mj444
lnurls.lookup_or_fetch already fetching lnurl1dp68gurn8ghj7um9dej8xct5wvhxcmmv9uh8wetvdskkkmn0wahz7mrww4excup0df3r2dg3mj444
lnurls.lookup_or_fetch already fetching lnurl1dp68gurn8ghj7um9dej8xct5wvhxcmmv9uh8wetvdskkkmn0wahz7mrww4excup0df3r2dg3mj444

Changelog-Fixed: Don't spam lnurls when validating zaps
2023-07-17 14:12:41 -07:00
William Casarin fa520d48d3 zap: remove unnecessary main thread dispatches when zapping 2023-07-17 14:11:23 -07:00
William Casarin 160b293359 performance: don't spam nip05 validation on startup
Since we don't show these on events anymore, we don't need to spam nip05
validation. We can just check when we go to the profile page

Changelog-Fixed: Eliminate nostr address validation bandwidth on startup
2023-07-17 13:25:56 -07:00
William Casarin 7d17b9b476 nip05: hide nip05 username if it matches the username 2023-07-17 13:25:56 -07:00
William Casarin d04f1c6867 login: allow user to login to deleted profile
If they every change their mind.

Changelog-Fixed: Allow user to login to deleted profile
2023-07-17 13:25:56 -07:00
William Casarin 5c87dd5bbb nip05: remove clickable option
they're always clickable now
2023-07-17 13:25:56 -07:00
William Casarin 12febf9671 view: extract ProfileEditButton to its own file
profile view file is getting cray cray
2023-07-17 13:25:56 -07:00
William Casarin 4033ad66ba test: fix crash in ci 2023-07-17 13:25:56 -07:00
William Casarin 2c0296cce3 project: bump deployment target
not sure how this is different than the previous setting that was
updated.

Cc: Bryan Montz <bryanmontz@me.com>
2023-07-17 13:25:56 -07:00
William Casarin 080aaf2d1b nip05: show username and support _ usernames
Changelog-Added: Show nostr address username and support abbreviated _ usernames
2023-07-17 11:01:57 -07:00
William Casarin 0e55b08b6c Revert removing nip05 badges on profiles
Changelog-Added: Re-add nip05 badges to profiles

This partially reverts commit 7ae7584135.
2023-07-17 10:52:20 -07:00
William Casarin ff70cb7ebf posting: don't prepad user tag if its a newline
This fixes one more edgecase with the tag prepend logic.
2023-07-17 10:45:05 -07:00
William Casarin fe82134a75 posting: switch to new tested composition logic
This switches to the new post composition logic in the post view. It
adds a space at the begging of a mention if it is needed.

We still need to make the state in these view more pure so we can test
more of the posting logic like cursor positions after posting, etc.

Changelog-Added: Add space when tagging users in posts if needed
Changelog-Fixed: Fix issue where typing cc@bob would produce brokenb ccnostr:bob mention
2023-07-17 10:25:09 -07:00
William Casarin 60a0c21272 test: add post composition tests
This adds post composition tests so that we can avoid composition bugs.
This still does not capture all of the dynamics of post composition,
because it ignores much of the mutable cursor position and related state
when editing posts.

We will need to make post editing more pure and less mutable in the
future to get test coverage on those.
2023-07-17 10:25:09 -07:00
William Casarin 8242ca27d2 profile: make constructor args optional
This makes it easier to create one-off profiles for testing. eg:

Profile(name: "jb55")
2023-07-17 10:25:09 -07:00
William Casarin c7baa153af posting: add some functions for appending mention tags
These are easy-to-test functions for appending user tags to attributed
strings. We will use these in the next couple of commits to replace the
existing buggy functionality.
2023-07-17 10:25:09 -07:00
William Casarin ff654c4e11 test: add text attribute testing function
This will be used for testing attributed strings
2023-07-17 10:25:09 -07:00
William Casarin deaf5f042a search: refactor appendUserTag to make logic more clear
ocd mostly
2023-07-17 10:25:09 -07:00
William Casarin 4f56ff3dfb longform: add padding under words count
Changelog-Added: Added padding under word count on longform account
2023-07-17 10:25:09 -07:00
William Casarin fd59407171 test: fix old markdown tests 2023-07-17 10:25:09 -07:00
William Casarin 9b759247ee v1.6 (6) changelog 2023-07-16 15:34:40 -07:00
William Casarin cd7998b69d v1.6 (6) 2023-07-16 15:33:00 -07:00
William Casarin bd4c29604f Fix broken markdown renderer
This switches away from the old markdown renderer to the new one at
https://github.com/damus-io/swift-markdown-ui

Changelog-Fixed: Fix broken markdown renderer
2023-07-16 15:27:24 -07:00
William Casarin bf1175f22c markdown: add some helpers for counting markdown words
Will use this in the new word counter
2023-07-16 15:27:06 -07:00
William Casarin 064888f78d markdown: use a real-world longform preview 2023-07-16 15:26:31 -07:00
William Casarin fc640b85ed add swift-markdown-ui
We will be using this lib which is much better than the builtin
framework for markdown rendering. We use a modified version that removes
html tag rendering which looks horrible.
2023-07-16 15:25:09 -07:00
William Casarin d5766253cf build: fix unused variable warning 2023-07-16 15:24:06 -07:00
William Casarin 571ed39d52 Fixed issue where hashtags were leaking in DMs
Now we never add any tags to DMs, we only add the p tag of the user
you're talking to.

Changelog-Fixed: Fixed issue where hashtags were leaking in DMs
2023-07-16 15:24:06 -07:00
cr0bar 16d81ed40f Hide nsec when logging in
Fix for Hide nsec when logging in & add hide/show toggle

Closes: https://github.com/damus-io/damus/issues/1206
Changelog-Changed: Hide nsec when logging in
2023-07-16 13:05:18 -07:00
William Casarin 1135c19fea test: add setting property tests
Some initial UserSettingsStore property tests
2023-07-16 13:05:18 -07:00
William Casarin 77331644cb Fix issue with emojis next to hashtags and urls
Treat utf8 bytes next to hashtags and urls as boundary conditions

Changelog-Fixed: Fix issue with emojis next to hashtags and urls
2023-07-16 11:46:23 -07:00
William Casarin 8d14fdffb5 content: add utf8 char at url left boundary test 2023-07-16 11:46:23 -07:00
William Casarin 0c95071de7 project: rename parse_mentions to parse_note_content
This is more accurate
2023-07-16 11:46:23 -07:00
William Casarin da78a217a3 docs: clarify the section on using -v2,v3, etc
Some patches are still not getting sent with version information. Let's
clarify that in the contribution docs.

Cc: dev@damus.io
2023-07-16 10:05:57 -07:00
William Casarin f53b824122 docs: patch changelogs when submitting patches
This adds a section on creating patch changelogs when submitting
patches. It helps reviewers know what changed between many different
versions of a patch
2023-07-16 09:44:27 -07:00
Bryan Montz 45ab394b09 fixed: relay detail view is not immediately available after adding new relay
Changelog-Fixed: relay detail view is not immediately available after adding new relay
Closes: https://github.com/damus-io/damus/issues/1369
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:56:18 -07:00
Bryan Montz 47e7505573 fix typos
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:37:55 -07:00
Bryan Montz 0f1390f412 Swift cleanup: remove duplicate or unnecessary initializers using default values
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:37:55 -07:00
Bryan Montz 6bf5293701 Swift cleanup: don't capture case values only to ignore them in switch statements
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:37:55 -07:00
Bryan Montz 3d6909bf62 Swift cleanup: simplify "Task.init {}" to "Task {}"
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:37:55 -07:00
Bryan Montz ecd8b64b8b Swift cleanup: prefer case list over fallthrough in switch statements
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:37:55 -07:00
Bryan Montz 0c627ae0a0 Swift cleanup: "init (" -> "init("
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-16 07:37:55 -07:00
William Casarin 16c86c1d1c update bad commit mailmap 2023-07-14 22:25:19 -07:00
Daniel D'Aquino' via patches 29140d956b Add feedback message when user adds a relay already in the list
Changelog-Added: Added feedback when user adds a relay that is already on the list
Closes: https://github.com/damus-io/damus/issues/1053
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-07-14 22:11:34 -07:00
William Casarin 7ae7584135 ui: remove nip05 badge on events
Changelog-Changed: Remove nip05 on events
2023-07-14 17:31:28 -07:00
William Casarin 139be9eef2 Fix nostr: mention prefix bugs
The zero-width space was causing parsing issues. Not sure why we need
this so I just removed it.

Changelog-Fixed: Fix nostr:nostr:... bugs
2023-07-14 17:28:24 -07:00
William Casarin 72a060c7b3 nip05: rename nip05 to Nostr Address in search
Forgot this one
2023-07-14 17:05:01 -07:00
William Casarin 9db81fd6b8 views: refactor post_changed in PostView
Use some helper functions instead of the full switch
2023-07-14 15:54:17 -07:00
William Casarin f08efd7e30 nip05: rename nip05 verification to nostr address
nip05 identifiers and nip05 verification is too confusing, and also
wrong. Let's use the "nostr address" terminology.

Suggested-by: Derek Ross
Suggested-by: Semisol <hi@semisol.dev>
Changelog-Changed: Rename NIP05 to "nostr address"
2023-07-14 13:26:10 -07:00
William Casarin fb2a69acd8 project: fix test fixtures 2023-07-14 13:07:52 -07:00
tyiu 8a9e3ea76b Fix localization issues and export strings for translation
Changelog-Fixed: Fix localization issues and export strings for translation
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-14 09:34:29 -07:00
William Casarin 4830a6f3b7 Run actions on pushes to the ci branch 2023-07-14 09:34:29 -07:00
William Casarin 9879c78e41 build 5 because I broked something 2023-07-13 15:43:21 -07:00
William Casarin 05e73a3711 actually subscribe to likes. oops 2023-07-13 11:43:52 -07:00
William Casarin 731fdb108b build: fix a few warnings and errors 2023-07-13 11:17:00 -07:00
William Casarin 2f3737c2b5 v1.6-4 changelog 2023-07-13 11:14:29 -07:00
William Casarin e36747a81a v1.6 (4) 2023-07-13 11:13:50 -07:00
William Casarin 505ce0bd39 Add the ability to follow hashtags
Changelog-Added: Add the ability to follow hashtags
2023-07-13 11:10:53 -07:00
William Casarin 31fa63debf home: hide users and hashtags from home timeline when you unfollow
Add the ability to resubscribe to home filters so that it will be
updated when you follow and unfollow people

Changelog-Fixed: Hide users and hashtags from home timeline when you unfollow
2023-07-13 11:08:09 -07:00
William Casarin 122655bea3 home: separate home filters
we will want to resubscribe to these, so pull them out
2023-07-13 11:08:09 -07:00
William Casarin 9a714943fd contacts: get followed hashtags function
todo: cache these
2023-07-13 11:08:09 -07:00
William Casarin 17df2972d9 ui: add follow hashtag ui on search view 2023-07-13 11:08:04 -07:00
William Casarin bebaffd247 contacts: unify following logic
We are about to add hashtag following, so let's prepare handle_follow
for this. Generalize pubkey following to ReferenceId follows in the
handle_{follow,unfollow} functions.

We also split out the notification part into its own function.
2023-07-13 09:32:42 -07:00
William Casarin 0fae54a98d components: make GradientButtonStyle padding configurable
There is too much padding on the follow hashtag button so we need to fix
that
2023-07-13 09:04:55 -07:00
William Casarin 90818c12e8 components: create PinkGradientView and use PinkGradient directly
Still need to do this for the other gradients as well but this is fine
for now.
2023-07-13 09:04:55 -07:00
William Casarin 1136808afa contacts: generalize following to allow any reference
I noticed we are not using the PostBox when following new users. Not
good! This is probably why following users sometimes does not work.

Changelog-Fixed: Fixed a bug where following a user might not work due to poor connectivity
2023-07-13 09:04:55 -07:00
William Casarin b7d139ffb3 refid: add .t helper
This is used for quickly creating hashtag refs
2023-07-13 09:04:55 -07:00
William Casarin 7fc270725f test: add newline mention test
This is currently passing but it shouldn't be. This is because we are
not testing the build_post function directly. We will do this soon.
2023-07-13 07:32:27 -07:00
William Casarin 7b73a54de5 test: switch to test data file
We only added the file before, let's actually use it now
2023-07-13 07:32:27 -07:00
Bryan Montz fdaf785869 fixed: icon color for developer mode setting is incorrect in low-light mode
Changelog-Fixed: icon color for developer mode setting is incorrect in low-light mode
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-13 07:24:44 -07:00
William Casarin c0f9b0a8c0 views: allow embeddable views at top of timeline
This allows you to put stuff at the top of a timeline inside the scroll
view. We could also remove the scrollview from the timeline
eventually... but this works for now.
2023-07-13 06:56:23 -07:00
William Casarin 7123b225a1 search: make model an ObjservedObject
This should not be a state object because the data is passed in
elsewhere
2023-07-13 06:56:23 -07:00
William Casarin b6f25a85f8 Fix nip05 badge icon 2023-07-13 06:56:23 -07:00
William Casarin 7046fe0d4f ui: add DamusBackground helper
We will be using this in more places
2023-07-13 06:56:23 -07:00
William Casarin 201e9a427f post: extract build_post from post view
I need to test this function because there is a bug with nostr: mentions
2023-07-13 06:56:23 -07:00
William Casarin 6481f96488 add bech32_pubkey_decode
I need this for a test
2023-07-13 06:56:23 -07:00
William Casarin 3845d32074 test: add test data file
We can organize test data in here
2023-07-13 06:56:23 -07:00
William Casarin c1c33518ea don't follow jb55 by default
This was funny initially but it confuses people.

Changelog-Removed: Remove following Damus Will by default
2023-07-12 14:42:23 -07:00
William Casarin f2cf30a728 Scroll to top for longform events only
Fixes: ad6a1962 ("Scroll to top of event instead of bottom")
2023-07-12 08:23:53 -07:00
William Casarin 69922b1d77 Remove LoadMoreButton
Was an old unused thing
2023-07-12 08:21:44 -07:00
William Casarin 7343fcd399 Allow longform content to be long
Changelog-Changed: Remove note size restriction for longform events
2023-07-12 05:38:48 -07:00
ericholguin 5571052cfd Update nav to use adaptable color for dark and light modes
Changelog-Fixed: Fixed nav bar color on login, eula, and account creation
Closes: https://github.com/damus-io/damus/pull/1361
2023-07-12 05:38:10 -07:00
William Casarin de63e96664 v1.6-3 changelog
A few longform fixes
2023-07-11 12:59:09 -07:00
William Casarin 7f9371d85f v1.6 (3) 2023-07-11 12:58:15 -07:00
William Casarin de4e8e5748 Only show longform preview in notifications
Changelog-Fixed: Show longform previews in notifications instead of the entire post
2023-07-11 12:56:30 -07:00
William Casarin ad6a1962bb Scroll to top of event instead of bottom
This is pretty important for longform events

Changelog-Changed: Start at top when reading longform events
2023-07-11 12:55:54 -07:00
William Casarin 828e417726 Allow reposting and quote reposting multiple times
Changelog-Changed: Allow reposting and quote reposting multiple times
2023-07-11 12:28:38 -07:00
William Casarin d2374aa6ec I broked dms. i fixed. 2023-07-11 12:28:38 -07:00
William Casarin 495859e07f Fix various padding issues related to longform posts
1. Make a proper threaded EventShell variant
2. Fix padding everywhere

Changelog-Fixed: Fix padding on longform events
2023-07-11 12:17:59 -07:00
William Casarin d96ea593a5 search: allow searching longform articles by hashtag 2023-07-11 12:17:22 -07:00
William Casarin 7514a741c0 docs: make note to replace old bech32 parser 2023-07-11 12:17:09 -07:00
William Casarin dc7b0004bc Hide action bar in longform quote reposts
Changelog-Fixed: Fix action bar appearing on quoted longform previews
2023-07-11 10:26:29 -07:00
William Casarin 8e33d5f6b9 v1.6-2 changelog 2023-07-11 09:22:39 -07:00
William Casarin db2ec0a00a Fix npub mention bugs, fix slowness when parsing large posts
Switch the post parser to use the same code as the content parser. This
was causing many issues, including performance issues.

Changelog-Fixed: Fix lag when creating large posts
Changelog-Fixed: Fix npub mentions failing to parse in some cases
Changelog-Added: Add r tag when mentioning a url
Changelog-Removed: Remove old @ and & hex key mentions
2023-07-11 09:15:13 -07:00
cr0bar dc21b6139c Add support for multilingual hashtags
Changelog-Added: Add support for multilingual hashtags
Reviewed-by: William Casarin <jb55@jb55.com>
Closes: https://github.com/damus-io/damus/issues/949
2023-07-11 07:22:44 -07:00
William Casarin 031c7823ae refactor: move hashtag tests to their own file 2023-07-11 07:21:16 -07:00
cr0bar ac2b5b26bb Added non-latin test and amended emoji test to include emoji in hashtag 2023-07-11 06:39:12 -07:00
cr0bar c1220f50af Handle percent encoding of colon for some hashtags 2023-07-11 06:39:12 -07:00
cr0bar 2353f97114 Change to is_hashtag_chat to support non-latin characters 2023-07-11 06:39:12 -07:00
cr0bar e83e110adb Fix to is_boundary to support non-latin characters 2023-07-11 06:39:12 -07:00
William Casarin aae97c5cb7 git: add .mailmap file
This ensures that author emails are correct when using various git tools
2023-07-11 06:39:05 -07:00
William Casarin 45d9121ed7 fix project issues 2023-07-10 20:56:52 -07:00
tyiu 4c774f2dda Fix PostView initial string to skip mentioning self when on own profile
Changelog-Fixed: Fix PostView initial string to skip mentioning self when on own profile
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
2023-07-10 20:16:18 -07:00
tyiu b8ec3493dc Fix freezing bug when tapping Developer settings menu
Changelog-Fixed: Fix freezing bug when tapping Developer settings menu
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
2023-07-10 20:16:18 -07:00
William Casarin e299389866 Add initial longform note support
Changelog-Added: Add initial longform note support
2023-07-10 18:29:18 -07:00
William Casarin 374610a21a artifacts: allow unseparated note artifacts
This is needed for longform events. Right now we treat unseparated note
artifacts as a list of blocks, but we will likely need to render these
blocks into lists of attributed texts with image blocks inbetween.
2023-07-10 18:24:43 -07:00
William Casarin 4d995fd04c Longform Notes 2023-07-10 17:39:13 -07:00
William Casarin 518886912c refactor: carve out TextEvent body into EventShell
We'll need this for other event types
2023-07-10 17:39:13 -07:00
William Casarin ab5eea330a options: add no_mentions to event view options
We don't need mentions in longform previews so we'll need this
2023-07-10 17:39:13 -07:00
William Casarin 41de715067 query: add longform kind, add to home filter 2023-07-10 17:39:13 -07:00
William Casarin 6ca9bda01e notes: count words in notes during artifact parsing 2023-07-10 17:39:13 -07:00
William Casarin fe077fa5c2 reposts: don't always show text events in reposts
This will allow longform reposts to work properly

Changelog-Fixed: Don't always show text events in reposts
2023-07-10 17:39:13 -07:00
William Casarin cb2380e218 docs: add git-contacts example
git-contacts is a great way to cc people who have touched the same hunk
of code before.

Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-10 17:38:54 -07:00
Joel Klabo 196cfdec4b Fix Image Orientation 2023-07-10 17:27:51 -07:00
Joel Klabo bfb47c0f85 Update Control Style to Stand Out More 2023-07-10 17:27:51 -07:00
Joel Klabo 9e7e128d9a Refactoring Edit Picture Views 2023-07-10 17:27:51 -07:00
Joel Klabo bf95a8b328 Banner Image Upload
Changelog-Added: Enable banner image editing
2023-07-10 17:27:42 -07:00
William Casarin e316d5d635 docs: move security.md to docs subdir 2023-07-10 16:37:45 -07:00
William Casarin 37a5abc9e3 gitignore: add tags 2023-07-10 16:35:43 -07:00
William Casarin cf83ac1fe8 docs: add patch submission guidelines 2023-07-10 16:22:09 -07:00
cr0bar 7a1269bd68 Fix for test issue due to recently implemented RelayPool change 2023-07-10 13:49:07 -07:00
William Casarin acb4e6d17e wasm: fix intptr warning 2023-07-10 11:14:03 -07:00
William Casarin e957c3b703 wasm: fix clz64 warning 2023-07-10 11:14:03 -07:00
William Casarin 82fc4ff15e wasm: comment out some unnused code for now
fixes some warnings
2023-07-10 11:14:03 -07:00
William Casarin 15d633a42f project: update to recommend settings 2023-07-10 11:08:20 -07:00
William Casarin 7158f07bb1 Translate all the things 2023-07-10 08:20:28 -07:00
Bryan Montz 07abc5c04b Fix issue where first row is always selected on Form views
Changlog-Fixed: Fix issue where first row is always selected on Form views
Signed-off-by: Bryan Montz <bryanmontz@me.com>
2023-07-10 07:54:47 -07:00
transifex-integration[bot] 79fb352d96 Translate Localizable.strings in el_GR
100% translated source file: 'Localizable.strings'
on 'el_GR'.
2023-07-10 08:46:21 +00:00
transifex-integration[bot] 94ef9bb42a Translate Localizable.strings in el_GR
100% translated source file: 'Localizable.strings'
on 'el_GR'.
2023-07-10 08:46:09 +00:00
transifex-integration[bot] 78a64165e1 Translate Localizable.stringsdict in el_GR
100% translated source file: 'Localizable.stringsdict'
on 'el_GR'.
2023-07-10 08:43:55 +00:00
transifex-integration[bot] ad216b1f11 Translate Localizable.strings in nl
100% translated source file: 'Localizable.strings'
on 'nl'.
2023-07-10 08:35:54 +00:00
transifex-integration[bot] 4abd227cf7 Translate Localizable.stringsdict in nl
100% translated source file: 'Localizable.stringsdict'
on 'nl'.
2023-07-10 08:35:46 +00:00
transifex-integration[bot] 800ce44f5e Translate Localizable.strings in ja
100% translated source file: 'Localizable.strings'
on 'ja'.
2023-07-10 08:12:11 +00:00
transifex-integration[bot] 0e9e44d8f2 Translate Localizable.stringsdict in ja
100% translated source file: 'Localizable.stringsdict'
on 'ja'.
2023-07-10 07:51:47 +00:00
transifex-integration[bot] 3eba4b0af9 Translate Localizable.strings in ja
100% translated source file: 'Localizable.strings'
on 'ja'.
2023-07-10 07:51:06 +00:00
tyiu 140c3505ba Update translations 2023-07-09 15:36:35 -04:00
tyiu fcd7d2beab Fix localization issues and export strings for translation 2023-07-09 15:33:15 -04:00
William Casarin 83ef50586a zaps/refactor: use guard instead of if block
not a fan of unncessary nesting
2023-07-09 07:44:33 -07:00
William Casarin 87992f4bb9 Add RelayLog in developer mode
Changelog-Added: Add relay log in developer mode
2023-07-09 07:41:45 -07:00
Bryan Montz faaa3e3bd9 only show the relay log in developer mode
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz 2d9f7128ee fix crash when adding line to log from background thread
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz 51d71f11c1 replace RelayMetadatas with RelayModelCache in DamusState
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz f619fef410 add RelayModel and RelayModelCache classes
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz 91f02ccff5 add RelayLog to the bottom of the RelayDetailView
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz a63ea1e22b add network state changes to RelayLogs
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz 40e5e4a026 add a RelayLog to each RelayConnection and send events to it
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
Bryan Montz ef4aeb40e0 add RelayLog class
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-09 07:40:39 -07:00
William Casarin 13f98659a4 Prevent forged profile zap attacks
The fake note zap attack made me realize that there is a way to do fake
profile zaps using a similar technique. Since damus only checks the
first ptag if it is a profile zap, this means you could include multiple
ptags, the first one being the fake profile with the fake zapper, and
the second p tag as the real target.

This would allow a fake zapper to create a fake a zap, while the zap
notification would still appear for the second ptag because damus
listens for zap events via #p, and that would match the second ptag.

To fix this, ensure that zaps only have at most 1 ptag and 0 or 1 etag.
my CLN zapper checks this but if we don't check this here as well then
we run into fake zap issues.

Changelog-Fixed: Fix potential fake profile zap attacks
Cc: Tony Giorgio <tonygiorgio@protonmail.com>
Cc: benthecarman <benthecarman@live.com>
Cc: Vitor Pamplona <vitor@vitorpamplona.com>
2023-07-08 22:10:34 -07:00
William Casarin f5ba909784 zaps: move pubkey check into standalone function 2023-07-08 22:09:30 -07:00
William Casarin 6031fe0847 Fix fake note zaps with forged p-tags
This fixes a zap issue where someone could send a fake zap with a zapper
that doesn't match the user's nostrPubkey zapper. This is possible
because damus looks up the zapper via the ptag on note zaps.

Fix this by first looking up the cached event's ptag instead. This
prevents zappers from trying to trick Damus into picking the wrong
zapper.

Fixes: #1357
Changelog-Fixed: Fix issue where malicious zappers can send fake zaps to another user's posts
Reported-by: benthecarman <benthecarman@live.com>
Cc: Tony Giorgio <tonygiorgio@protonmail.com>
2023-07-08 21:22:58 -07:00
William Casarin 1be2a9e1b1 ui: remove invalid zap text 2023-07-08 20:47:11 -07:00
cr0bar 4478348d10 Fix profile post button mentions
Fix for second part of issue #1352 where if you submit a reply from the
+ on a profile, it uses the hex nostr url rather than the bech32
version. When typing the @ manually it uses the bech32 so updated to
mirror this.

Changelog-Fixed: Fix profile post button mentions
Closes: #1355
2023-07-08 19:24:35 -07:00
Anthony de Broise cf4131f867 Minor update to ConfigView.swift to fix key and search icon
Replaced icon names with names existing in assets to avoid them being left blank.

Changelog-Fixed: Fix icons on settings view
Closes: #1353
2023-07-08 08:14:26 -07:00
Bryan Montz 81b69bc2ea add explanatory footer to Developer Mode setting view
Signed-off-by: Bryan Montz <bryanmontz@me.com>
Reviewed-by: William Casarin <jb55@jb55.com>
2023-07-08 08:06:52 -07:00
William Casarin 0c736a18a9 docs: annotate might be causing issues for some people
suhail was having trouble when this option was enabled. let's remove it
just in case.
2023-07-07 09:25:33 -07:00
Bryan Montz d2efe06610 make "Copy Note JSON" a developer mode setting
Signed-off-by: Bryan Montz <bryanmontz@me.com>
2023-07-07 09:02:52 -07:00
Bryan Montz ebcfe3c25f add developer mode view and setting
Signed-off-by: Bryan Montz <bryanmontz@me.com>
2023-07-07 09:02:52 -07:00
William Casarin 6dfda93ff9 Fix Invalid Zap bug in reposts
Changelog-Fixed: Fix Invalid Zap bug in reposts
2023-07-04 13:48:49 -07:00
William Casarin ea50f9214a Switch to navigation stack in BuilderEventView 2023-07-04 13:48:49 -07:00
William Casarin 6c8cf8421c zaps: make zap setting private 2023-07-04 13:47:44 -07:00
Ben Harvie cbbe203d84 Create SECURITY.md 2023-07-04 12:45:15 -07:00
William Casarin 19217f47a4 v1.6 changelog 2023-07-04 12:21:12 -07:00
William Casarin 3451e7d88f v1.6 2023-07-04 12:18:33 -07:00
William Casarin b5ea1e011e Revert "profile: make profile loading more lightweight for now"
Changelog-Fixed: Load more content on profile view
2023-07-04 11:51:07 -07:00
William Casarin a04a401292 nscript: load script view
This allows you to open and run scripts for testing purposes, but only
from external links such as nostr:nscript...
2023-07-04 11:48:27 -07:00
tyiu 640fbf23ea Fix UI bug with user search and fix race conditions on profiles NIP-05 cache
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-04 09:09:14 -07:00
William Casarin 3d0448a929 smaller nostrscript 2023-07-03 17:10:57 -07:00
William Casarin 30e33a01c1 nostrscript: add a helper function 2023-07-03 16:59:50 -07:00
William Casarin a6cbf50def settings: record bool option keys
so that NostrScripts know which bool settings can be set
2023-07-03 16:28:25 -07:00
prprhyt 94bd194287 Added event id validation 2023-07-03 15:03:33 -07:00
William Casarin 97f10e865f NostrScript
NostrScript is a WebAssembly implementation that interacts with Damus.
It enables dynamic scripting that can be used to power custom list views,
enabling pluggable algorithms.

The web has JavaScript, Damus has NostrScript. NostrScripts can be
written in any language that compiles to WASM.

This commit adds a WASM interpreter I've written as a mostly-single C
file for portability and embeddability. In the future we could
JIT-compile these for optimal performance if NostrScripts get large and
complicated. For now an interpreter is simple enough for algorithm list
view plugins.

Changelog-Added: Add initial NostrScript implementation
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-03 14:31:38 -07:00
tyiu 0c0c58c0cc Fix bug with Trie search
Exact matches were not being returned first in the array of results

Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2023-07-03 13:37:52 -07:00
William Casarin 7d49d3d9f1 refactor: make guard statement a bit more readible
It's a bit confusing to guard on a negative boolean expression
2023-07-03 12:48:25 -07:00
tyiu cb1e16b1a4 Fix reports to conform to NIP-56
Changelog-Fixed: Fix reports to conform to NIP-56
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Tested-by: William Casarin <jb55@jb55.com>
2023-07-03 12:25:12 -07:00
tyiu 6e964f71ff Add trie-based user search cache to replace non-performant linear scans
Changelog-Added: Speed up user search
Tested-by: William Casarin <jb55@jb55.com>
Fixes: #1219
Closes: #1342
2023-07-03 12:06:01 -07:00
tyiu 4b7444f338 Fix profile navigation bugs from muted users list and relay list views
Changelog-Fixed: Fix profile navigation bugs from muted users list and relay list views
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
2023-07-03 08:59:28 -07:00
tyiu 57159f7df9 Fix build warnings
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Reviewed-by: William Casarin <jb55@jb55.com>
2023-07-03 08:50:17 -07:00
tyiu 4712c6b288 Fix navigation to translation settings view
Changelog-Fixed: Fix navigation to translation settings view
Signed-off-by: Terry Yiu <git@tyiu.xyz>
2023-07-03 08:25:04 -07:00
William Casarin 6a9b3cad20 Merge remote-tracking branch 'github/translations' 2023-07-02 13:34:04 -07:00
William Casarin e5bd52b1f6 New paid email patch policy 2023-07-02 13:15:24 -07:00
Bryan Montz 7cd3aef157 Updated test target to deployment target of iOS 16.0
Changelog-Updated: Bumped minimum verison to iOS 16.0
Signed-off-by: Bryan Montz <bryanmontz@me.com>
2023-07-02 13:03:13 -07:00
transifex-integration[bot] 8f3d8ced90 Translate Localizable.stringsdict in es_ES
100% translated source file: 'Localizable.stringsdict'
on 'es_ES'.
2023-07-02 19:51:54 +00:00
transifex-integration[bot] 98ff4ee363 Translate Localizable.stringsdict in es_ES
100% translated source file: 'Localizable.stringsdict'
on 'es_ES'.
2023-07-02 19:51:22 +00:00
transifex-integration[bot] ce7c4799c9 Translate Localizable.stringsdict in es_ES
100% translated source file: 'Localizable.stringsdict'
on 'es_ES'.
2023-07-02 19:50:09 +00:00
transifex-integration[bot] 11a4a85bdf Translate Localizable.strings in es_ES
100% translated source file: 'Localizable.strings'
on 'es_ES'.
2023-07-02 19:47:59 +00:00
transifex-integration[bot] 6fe4ac1bd0 Translate Localizable.stringsdict in ja
100% translated source file: 'Localizable.stringsdict'
on 'ja'.
2023-07-02 09:13:54 +00:00
William Casarin f702733654 nav: remove environmentObjects
environment objects are implicit arguments that cannot be checked by the
compiler. They are a common source of crashes. Use a main
NavigationCoordinator in DamusState for the core app, and pass in other
coordinators in the account setup view for the parts of the app that
don't have a DamusState.
2023-06-30 09:59:58 -07:00
Scott Penrose 9008c609e2 Switch to NavigationStack
Changelog-Changed: Drop iOS15 support
Changelog-Fixed: Fixed navigation popping issues
2023-06-30 06:44:26 -07:00
William Casarin 5bac6405b9 validation: make sure to run on a detached task
so we don't do sig validation on the main thread accidentally
2023-06-30 06:42:56 -07:00
Scott Penrose 69663b8207 A few more navigation links from rebase 2023-06-30 06:42:56 -07:00
Scott Penrose 58a707685c Fix FollowUserView not allowing profile tapping 2023-06-30 06:42:56 -07:00
Scott Penrose a76ddea7da Remove popToRoot when tapping damus:// internal links 2023-06-30 06:42:56 -07:00
Scott Penrose 0018e7ad57 Convert remaining navigation links 2023-06-30 06:42:56 -07:00
Scott Penrose 8258c5beb0 Convert ContentView navigation links 2023-06-30 06:42:56 -07:00
Scott Penrose f361f55bd5 Convert wallet NavigationLinks 2023-06-30 06:42:56 -07:00
Scott Penrose c50ccef56d Convert onboarding flow navigation links 2023-06-30 06:42:56 -07:00
Scott Penrose 242455410e Convert more NavigationLinks to router 2023-06-30 06:42:56 -07:00
Scott Penrose f0b0eade37 Convert to NavigationStack
- Fixes linking issues on SideMenu and tab switching issues
- I currently bumped to iOS 16+ to get iterate and get this working.
2023-06-30 06:42:56 -07:00
William Casarin 3e3b689647 readme: include new mailing lists 2023-06-29 07:45:50 -07:00
transifex-integration[bot] 67e3ee8978 Translate Localizable.strings in es_419
100% translated source file: 'Localizable.strings'
on 'es_419'.
2023-06-28 21:22:27 +00:00
transifex-integration[bot] 90891622e4 Translate Localizable.stringsdict in es_419
100% translated source file: 'Localizable.stringsdict'
on 'es_419'.
2023-06-28 21:20:50 +00:00
William Casarin 62f052daa5 nozaps: fix zap button in freedom edition 2023-06-28 21:16:56 +02:00
tyiu 25b3df8b89 Disable post button when media upload in progress
Changelog-Fixed: Disable post button when media upload in progress
Closes: #1324
2023-06-28 19:31:57 +02:00
tyiu 14accd222e Fix taps on mentions in note drafts to not redirect to other Nostr clients
Changelog-Fixed: Fix taps on mentions in note drafts to not redirect to other Nostr clients
Closes: #1319
2023-06-28 19:31:16 +02:00
William Casarin abcff3b928 profile: allow post button on every profile and prefill user tag
Changelog-Added: Add post button to profile pages
2023-06-28 17:40:27 +02:00
William Casarin c8f18958a2 refactor: cleanup processFocusedWordForMention 2023-06-28 17:09:08 +02:00
transifex-integration[bot] 7a055efda8 Translate Localizable.stringsdict in hu_HU
100% translated source file: 'Localizable.stringsdict'
on 'hu_HU'.
2023-06-28 15:01:14 +00:00
transifex-integration[bot] 1ad8773c26 Translate Localizable.strings in hu_HU
100% translated source file: 'Localizable.strings'
on 'hu_HU'.
2023-06-28 14:57:46 +00:00
William Casarin 3b07a207c4 post: extract createUserTag so it can be re-used 2023-06-28 16:26:59 +02:00
William Casarin d9a06e69ae misc: remove some dead code 2023-06-28 16:25:04 +02:00
tyiu 32c71a4770 Add post button when logged in with private key and on own profile view
Changelog-Added: Add post button when logged in with private key and on own profile view
Closes: #1325
2023-06-28 15:49:34 +02:00
Bryan Montz 087d3e16a1 After loading the user's relays from their contact event, connect to new relays
Closes: #1298
2023-06-28 15:16:36 +02:00
tyiu 7cae61a86a Fix missing profile zap notification text
Changelog-Fixed: Fix missing profile zap notification text
Closes: #1332
2023-06-28 14:48:06 +02:00
transifex-integration[bot] b868119277 Translate Localizable.strings in ja
100% translated source file: 'Localizable.strings'
on 'ja'.
2023-06-28 08:15:41 +00:00
William Casarin 82c53e43e5 v1.5 (8) 2023-06-27 06:30:50 +02:00
William Casarin 3e274a820a nozaps: restore zap button with zap info, just make it not clickable 2023-06-27 06:04:36 +02:00
William Casarin 1a0282fe21 Revert "nozaps: don't pull thread zaps in nozaps mode"
This reverts commit 6003a3c6f8.
2023-06-27 05:59:59 +02:00
William Casarin b2b687fb79 Revert "nozaps: hide zap total"
This reverts commit 57789de5cd.
2023-06-27 05:59:33 +02:00
William Casarin 94448a10bd Revert "nozaps: hide zap details on notes for now"
This reverts commit b0d6d33573.
2023-06-27 05:58:42 +02:00
William Casarin 66db4c5215 Revert "nozaps: don't show note zaps in notifications"
This reverts commit c5b0e539d8.
2023-06-27 05:58:39 +02:00
William Casarin 1e2326cccf v1.5 (7)
rip zap button
2023-06-27 05:35:53 +02:00
William Casarin 959f208e36 profile: make profile loading more lightweight for now 2023-06-27 05:31:22 +02:00
William Casarin 7d80985b06 nozaps: remove zap button on posts 2023-06-27 05:31:14 +02:00
transifex-integration[bot] 3b085ab826 Translate Localizable.strings in zh_HK
100% translated source file: 'Localizable.strings'
on 'zh_HK'.
2023-06-26 10:46:06 +00:00
transifex-integration[bot] 28077ab91d Translate Localizable.stringsdict in zh_HK
100% translated source file: 'Localizable.stringsdict'
on 'zh_HK'.
2023-06-26 10:45:27 +00:00
transifex-integration[bot] 8d0a8909b9 Translate Localizable.strings in zh_TW
100% translated source file: 'Localizable.strings'
on 'zh_TW'.
2023-06-26 10:43:34 +00:00
transifex-integration[bot] 23bc6d0710 Translate Localizable.stringsdict in zh_TW
100% translated source file: 'Localizable.stringsdict'
on 'zh_TW'.
2023-06-26 10:41:55 +00:00
transifex-integration[bot] 993444d24b Translate Localizable.stringsdict in zh_CN
100% translated source file: 'Localizable.stringsdict'
on 'zh_CN'.
2023-06-26 10:40:49 +00:00
transifex-integration[bot] cd30154990 Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-06-26 10:40:42 +00:00
transifex-integration[bot] 4513863c95 Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-06-26 10:37:50 +00:00
transifex-integration[bot] 19684bae36 Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-06-26 10:37:19 +00:00
transifex-integration[bot] 6b878e96cd Translate Localizable.stringsdict in zh_CN
100% translated source file: 'Localizable.stringsdict'
on 'zh_CN'.
2023-06-26 10:32:17 +00:00
William Casarin 40a51edafe readme: patchstr bounties 2023-06-26 12:03:05 +02:00
tyiu cfe14fac23 Deduplicate users in group notifications
Changelog-Fixed: Deduplicate users in notifications
Closes: #1326
2023-06-26 11:31:36 +02:00
tyiu 2046fe5502 Fix notification content rendering of repost and reaction events
Closes: #1318
Changelog-Fixed: Fix notification content rendering of repost and reaction events
2023-06-26 11:20:11 +02:00
Bryan Montz 2d4ddc7b9c Fix crash related to VideoPlayer and CMTime
Closes: #1321
Changelog-Fixed: Fix crash related to VideoPlayer
2023-06-26 11:20:11 +02:00
William Casarin 6003a3c6f8 nozaps: don't pull thread zaps in nozaps mode 2023-06-26 11:20:11 +02:00
transifex-integration[bot] 572cae7dc5 Translate Localizable.strings in nl
100% translated source file: 'Localizable.strings'
on 'nl'.
2023-06-26 08:59:40 +00:00
transifex-integration[bot] 8d7d3d0d37 Translate Localizable.stringsdict in nl
100% translated source file: 'Localizable.stringsdict'
on 'nl'.
2023-06-26 08:58:56 +00:00
transifex-integration[bot] c76fc5bcce Translate Localizable.stringsdict in nl
100% translated source file: 'Localizable.stringsdict'
on 'nl'.
2023-06-26 08:58:25 +00:00
transifex-integration[bot] 3a357c8d82 Translate Localizable.stringsdict in nl
100% translated source file: 'Localizable.stringsdict'
on 'nl'.
2023-06-26 08:58:10 +00:00
transifex-integration[bot] ac59ee6285 Translate Localizable.strings in el_GR
100% translated source file: 'Localizable.strings'
on 'el_GR'.
2023-06-26 08:52:08 +00:00
transifex-integration[bot] a870b86490 Translate Localizable.stringsdict in el_GR
100% translated source file: 'Localizable.stringsdict'
on 'el_GR'.
2023-06-26 08:43:40 +00:00
transifex-integration[bot] cb2da7f3c6 Translate Localizable.stringsdict in sv_SE
100% translated source file: 'Localizable.stringsdict'
on 'sv_SE'.
2023-06-26 06:28:24 +00:00
transifex-integration[bot] 71f3b9b013 Translate Localizable.strings in sv_SE
100% translated source file: 'Localizable.strings'
on 'sv_SE'.
2023-06-26 06:27:13 +00:00
tyiu e220b0756f Export strings for translation 2023-06-25 23:46:53 -04:00
transifex-integration[bot] 83abedb4d6 Translate Localizable.stringsdict in sv_SE
100% translated source file: 'Localizable.stringsdict'
on 'sv_SE'.
2023-06-25 23:45:19 -04:00
transifex-integration[bot] 23b057779a Translate Localizable.strings in sv_SE
100% translated source file: 'Localizable.strings'
on 'sv_SE'.
2023-06-25 23:45:19 -04:00
tyiu 422167f7aa Add indication of followers you know in a profile
Changelog-Added: Add indication of followers you know in a profile
2023-06-25 09:38:57 +02:00
William Casarin de84456a57 mediaurl: fix is_img returning true for videos
This makes the image preloader try to download videos... not good.
2023-06-25 09:38:46 +02:00
William Casarin b70bf1f647 v1.5-6 2023-06-25 09:38:46 +02:00
William Casarin 3db77a16a0 Fix timeline from moving when you're scrolling 2023-06-24 17:39:24 +02:00
William Casarin 2256e2e625 v1.5-5 changelog 2023-06-24 08:39:51 +02:00
William Casarin a641f972ff v1.5-5 2023-06-24 08:38:02 +02:00
William Casarin c5846008f2 fix weird quirk with universe toolbar filter button 2023-06-24 08:27:12 +02:00
William Casarin 62bf767be5 nozaps: fix some tests 2023-06-23 20:46:27 +02:00
William Casarin c00746758e nozaps: disable donation star unless you're on freedom edition 2023-06-23 20:46:27 +02:00
William Casarin a89f90d7ee nozaps: hide SupportDamus on appstore builds 2023-06-23 20:46:27 +02:00
William Casarin 07d0818ee8 nozaps: disable zap delay on appstore since we don't have 1-tap anymore 2023-06-23 20:46:27 +02:00
William Casarin 0ce7414488 nozaps: disable donation zaps on appstore 2023-06-23 20:46:27 +02:00
William Casarin f090596067 nozaps: switch to global sheet when zapping
This fixes many popping bugs

Changelog-Fixed: Fix zap sheet popping
2023-06-23 20:46:27 +02:00
William Casarin 61b3ad2990 nozaps: update zap sheet style to make it clear its a user zap 2023-06-23 20:46:27 +02:00
William Casarin 8b24befaf7 nozaps: don't include zaps in thread replies 2023-06-23 20:46:27 +02:00
William Casarin 57789de5cd nozaps: hide zap total 2023-06-23 20:46:27 +02:00
William Casarin 62c539afbf nozaps: never show orange button 2023-06-23 20:46:27 +02:00
William Casarin b53e6db96b nozaps: show the user you are zapping in CustomizeZapView
This should make it clear that it's definitely not a note zap
2023-06-23 20:46:27 +02:00
William Casarin b0d6d33573 nozaps: hide zap details on notes for now 2023-06-23 20:46:27 +02:00
William Casarin c5b0e539d8 nozaps: don't show note zaps in notifications
apple sucks
2023-06-23 20:46:27 +02:00
William Casarin 601fa49a6e nozaps: don't show top zaps or zap replies
We can't associate zaps with notes anymore
2023-06-23 20:46:27 +02:00
William Casarin 216029410b nozaps: add nozaps setting
This will be used to restore functionality in the future
2023-06-23 20:46:27 +02:00
William Casarin a5b2a5c8b9 tests: disable invalid tests 2023-06-23 20:46:27 +02:00
William Casarin 980394bf0b Revert "ui: remove nip05 badge on events"
This reverts commit d205be3e0a.
2023-06-23 20:46:17 +02:00
William Casarin ed73899e5b Revert "Initial actionbar model refactor"
This reverts commit d0eb86dfa3.
2023-06-23 12:04:54 +02:00
William Casarin d0eb86dfa3 Initial actionbar model refactor 2023-06-23 11:53:53 +02:00
William Casarin 337c4de337 reduce ContentView redraws
Remove observability from the home model, and use inner models for
updating specific parts of the UI, such as notification dots on the tab
bar.
2023-06-23 11:51:51 +02:00
William Casarin e885f38c54 refactor: switch CustomizeZapView to use a model
Changelog-Fixed: Fix CustomizeZapView from randomly disappearing
2023-06-23 11:51:51 +02:00
William Casarin 3dbdc42d8b view/refactor: remove extra spacer 2023-06-23 11:46:42 +02:00
William Casarin 1389e50b8e fix some warnings 2023-06-23 11:46:42 +02:00
William Casarin 092d84f499 eventholder: don't push view updates on queued events 2023-06-23 11:46:42 +02:00
William Casarin c6a226fff8 Revert "ping: switch to async style"
This was causing crashes =/
2023-06-23 11:46:42 +02:00
William Casarin e023d1e9cb settings: turn off wallet selector by default
This is a bit confusing for new users
2023-06-23 11:46:42 +02:00
William Casarin e6b8e39106 actionbar: rename accessibility label boosts to reposts 2023-06-23 11:46:42 +02:00
William Casarin ced028755c debug: InnerTimeline render counts 2023-06-23 11:46:42 +02:00
William Casarin dabf737654 Merge remote-tracking branch 'github/translations' 2023-06-22 10:25:14 +02:00
William Casarin 72d141af61 wording: send a "message" with the zap, not "reply" 2023-06-22 10:23:56 +02:00
William Casarin 4d43e590e0 view: Add ZapUserView
This will be used to make it clear that we are zapping a user
2023-06-22 10:23:56 +02:00
William Casarin c413589582 eventgroup: add is_note_zap
We'll need this to hide note zaps as per apple's insanely dumb
guidelines.
2023-06-22 10:23:56 +02:00
William Casarin c218e0dcdd refactor: use zap.is_anon instead of recomputing
I believe this code was written before we computed is_anon inside the
zap.
2023-06-22 10:23:56 +02:00
William Casarin 892765eaa5 UserView: Make spacer optional
We need this to center this view sometimes. We should look into removing
this in the future?
2023-06-22 10:23:56 +02:00
William Casarin 455f1f7e1f view/refactor: remove redundant view structs 2023-06-22 10:23:56 +02:00
William Casarin 797762e7d2 view/refactor: move sheet handler in CustomizeZapView 2023-06-22 10:23:56 +02:00
transifex-integration[bot] efe6689bfb Translate Localizable.stringsdict in ja
100% translated source file: 'Localizable.stringsdict'
on 'ja'.
2023-06-22 01:14:40 +00:00
transifex-integration[bot] e30541c37e Translate Localizable.strings in ja
100% translated source file: 'Localizable.strings'
on 'ja'.
2023-06-22 01:12:38 +00:00
transifex-integration[bot] b126257d05 Translate Localizable.stringsdict in es_ES
100% translated source file: 'Localizable.stringsdict'
on 'es_ES'.
2023-06-21 23:22:27 +00:00
transifex-integration[bot] fde21559c7 Translate Localizable.strings in es_ES
100% translated source file: 'Localizable.strings'
on 'es_ES'.
2023-06-21 23:15:17 +00:00
transifex-integration[bot] d551b5f28b Translate Localizable.strings in es_ES
100% translated source file: 'Localizable.strings'
on 'es_ES'.
2023-06-21 23:14:48 +00:00
transifex-integration[bot] 961ff6f28b Translate Localizable.strings in fr
100% translated source file: 'Localizable.strings'
on 'fr'.
2023-06-21 15:20:57 +00:00
transifex-integration[bot] fdfd0f0275 Translate Localizable.strings in nl
100% translated source file: 'Localizable.strings'
on 'nl'.
2023-06-21 15:16:19 +00:00
transifex-integration[bot] 8b1b597f2a Translate Localizable.stringsdict in nl
100% translated source file: 'Localizable.stringsdict'
on 'nl'.
2023-06-21 15:16:05 +00:00
transifex-integration[bot] f3de41ff08 Translate Localizable.stringsdict in vi
100% translated source file: 'Localizable.stringsdict'
on 'vi'.
2023-06-21 14:33:19 +00:00
transifex-integration[bot] bf010be27a Translate Localizable.strings in vi
100% translated source file: 'Localizable.strings'
on 'vi'.
2023-06-21 14:32:11 +00:00
transifex-integration[bot] b013c1f1fd Translate Localizable.stringsdict in zh_HK
100% translated source file: 'Localizable.stringsdict'
on 'zh_HK'.
2023-06-21 12:37:01 +00:00
transifex-integration[bot] 50dfa9e2ed Translate Localizable.stringsdict in zh_TW
100% translated source file: 'Localizable.stringsdict'
on 'zh_TW'.
2023-06-21 12:36:51 +00:00
transifex-integration[bot] 78450792cb Translate Localizable.strings in zh_TW
100% translated source file: 'Localizable.strings'
on 'zh_TW'.
2023-06-21 12:36:17 +00:00
transifex-integration[bot] 4dc2571177 Translate Localizable.strings in zh_HK
100% translated source file: 'Localizable.strings'
on 'zh_HK'.
2023-06-21 12:35:58 +00:00
transifex-integration[bot] 04493b53dc Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-06-21 12:35:14 +00:00
transifex-integration[bot] f383388f42 Translate Localizable.stringsdict in zh_CN
100% translated source file: 'Localizable.stringsdict'
on 'zh_CN'.
2023-06-21 12:34:30 +00:00
transifex-integration[bot] d4cdc7706d Translate Localizable.stringsdict in fr
100% translated source file: 'Localizable.stringsdict'
on 'fr'.
2023-06-21 11:57:54 +00:00
tyiu b70406d669 Fix "zapped your profile" strings to say "zapped you"
Changelog-Fixed: Fix "zapped your profile" strings to say "zapped you"
2023-06-21 07:35:16 -04:00
William Casarin a2866ff6b3 Merge remote-tracking branch 'github/translations' 2023-06-21 10:19:47 +02:00
transifex-integration[bot] 1f0e31faa0 Translate Localizable.strings in hu_HU
100% translated source file: 'Localizable.strings'
on 'hu_HU'.
2023-06-21 08:14:48 +00:00
William Casarin 2ff12cdfa6 video: switch videoplayer to use detached tasks 2023-06-20 17:00:48 +02:00
William Casarin b7b7d65612 perf: don't use string concat when calculing SeenEven hash
Profiler was complaining about this one
2023-06-20 17:00:48 +02:00
William Casarin d205be3e0a ui: remove nip05 badge on events
Changelog-Changed: Remove nip05 on events
2023-06-20 17:00:48 +02:00
William Casarin 0bea81c632 perf: move blurhash processing to a background task
Using Task directly will only inherent the parent thread. We need
detached to do heaving processing.
2023-06-20 17:00:48 +02:00
William Casarin e4842cca3c logs: don't print filters
It can be slow
2023-06-20 17:00:48 +02:00
William Casarin 87d4752aa4 ui: use AboutView in existing views 2023-06-20 17:00:48 +02:00
William Casarin 6ec533b0cd view: Add AboutView
This will be used by different views for the user's about section
2023-06-20 17:00:48 +02:00
William Casarin 51a58360f9 debug slow scroll 2023-06-20 15:29:44 +02:00
William Casarin fe025532e8 Merge remote-tracking branch 'github/translations' 2023-06-20 11:27:29 +02:00
William Casarin 6eb548a0a9 Fix reconnect loop issues on iOS17
Changelog-Fixed: Fix reconnect loop issues on iOS17
2023-06-20 11:21:21 +02:00
William Casarin bcaa1d2354 ping: switch to async style
because reasons
2023-06-20 11:21:07 +02:00
Bryan Montz 296d96d6df rename RelayStatus to RelayStatusView 2023-06-20 10:18:34 +02:00
Bryan Montz 28854fdc93 simplify and fix issues with RelayStatus 2023-06-20 10:18:34 +02:00
Bryan Montz 2901cc860f make RelayConnection's state observable 2023-06-20 10:18:34 +02:00
William Casarin 3db13ae171 Fix build for iOS17 2023-06-20 10:18:23 +02:00
transifex-integration[bot] 49dedaec04 Translate Localizable.strings in sv_SE
100% translated source file: 'Localizable.strings'
on 'sv_SE'.
2023-06-20 07:50:51 +00:00
transifex-integration[bot] 491d4c4d25 Translate Localizable.strings in sv_SE
100% translated source file: 'Localizable.strings'
on 'sv_SE'.
2023-06-20 07:49:38 +00:00
transifex-integration[bot] afcbaea331 Translate Localizable.strings in zh_HK
100% translated source file: 'Localizable.strings'
on 'zh_HK'.
2023-06-19 10:21:11 +00:00
transifex-integration[bot] 340e134046 Translate Localizable.strings in zh_TW
100% translated source file: 'Localizable.strings'
on 'zh_TW'.
2023-06-19 10:21:08 +00:00
transifex-integration[bot] e68952fa0c Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-06-19 10:20:07 +00:00
transifex-integration[bot] 83af4ddd89 Translate Localizable.strings in zh_CN
100% translated source file: 'Localizable.strings'
on 'zh_CN'.
2023-06-19 10:19:29 +00:00
transifex-integration[bot] 53262afa01 Translate Localizable.strings in nl
100% translated source file: 'Localizable.strings'
on 'nl'.
2023-06-19 08:39:13 +00:00
transifex-integration[bot] 95148e9c9c Translate Localizable.strings in cs
100% translated source file: 'Localizable.strings'
on 'cs'.
2023-06-19 08:04:14 +00:00
transifex-integration[bot] 5bf4a2cc5a Translate Localizable.strings in ja
100% translated source file: 'Localizable.strings'
on 'ja'.
2023-06-19 07:30:18 +00:00
tyiu 2d29403145 Remove string referencing tipping posts, add missing localized string comments, and export strings for translation 2023-06-19 00:39:35 -04:00
gladiusKatana df20b67fc1 video: stop video in post when it disappears from view
Changelog-Fixes: Stop video when it disappears from view
2023-06-16 18:34:14 +02:00
William Casarin 0b5d68c0b8 Revert "threads: attempt to fix state jankiness"
This reverts commit f4024895ba.
2023-06-14 09:30:58 +02:00
William Casarin f4024895ba threads: attempt to fix state jankiness
Changelog-Fixed: Fix some more thread jankiness
2023-06-14 09:20:51 +02:00
William Casarin bcdd0b4e23 Revert "Add Inter font"
This reverts commit 271e3ad54a.
2023-06-12 11:25:27 +02:00
William Casarin 1c655d47b2 home: add comment explaining send_home_filters 2023-06-10 15:09:43 +02:00
William Casarin 24cc361d60 refactor: make send_initial_filter more readible 2023-06-10 15:09:43 +02:00
Bryan Montz 71bb9d6c92 Add text description to WebSocket for state logging 2023-06-10 12:39:25 +02:00
Ben Weeks 271e3ad54a Add Inter font
ChangeLog-Changed: Switch to new font (Inter)
2023-06-10 12:38:13 +02:00
transifex-integration[bot] dac21a1562 Update Translations
Translate Localizable.strings in cs
Translate Localizable.strings in el_GR
Translate Localizable.strings in nl
Translate Localizable.strings in sv_SE
Translate Localizable.strings in zh_CN
Translate Localizable.strings in zh_HK
Translate Localizable.strings in zh_TW
Translate Localizable.stringsdict in el_GR
Translate Localizable.stringsdict in nl
Translate Localizable.stringsdict in sv_SE
Translate Localizable.stringsdict in zh_CN
Translate Localizable.stringsdict in zh_HK
Translate Localizable.stringsdict in zh_TW

Closes: #1262
2023-06-10 11:43:32 +02:00
tyiu ae9ae66b39 Fix spelling of Nostr to use Titlecase instead of lowercase
Changelog-Fixed: Fix spelling of Nostr to use Titlecase instead of lowercase
2023-06-10 11:42:25 +02:00
tyiu e7281fdacc Add missing localized string comment 2023-06-10 11:42:25 +02:00
tyiu baa5454e2a Rename all usages of the term Post as a noun to Note to conform to the Nostr spec
Changelog-Fixed: Rename all usages of the term Post as a noun to Note to conform to the Nostr spec
2023-06-10 11:42:25 +02:00
gladiusKatana 60a892d73b LoginView: prevent explainer-text cutoff on login with npub
Changelog-Fixed: Fix text cutoff on login with npub
Closes: #1264
2023-06-10 11:39:00 +02:00
William Casarin 0ee360f2fa Fix video player hangs
Changelog-Fixed: Fix hangs due to video player
2023-06-10 11:33:35 +02:00
William Casarin c59d2a96af Make profile picture placeholder gray instead of purple 2023-06-10 11:33:18 +02:00
William Casarin ba3a6b07b2 Fix warnings 2023-06-10 11:33:07 +02:00
William Casarin 043eb5b436 Show zap comments in threads and show top zap
Changelog-Added: Top zaps
Changelog-Added: Show zap comments in threads
2023-06-09 10:11:25 +02:00
William Casarin 8f237b47eb qrscan: use explicit types when scanning 2023-06-07 08:06:06 +02:00
William Casarin a0caf9ce07 find_event: refactor with more explicit types 2023-06-07 08:06:06 +02:00
William Casarin 3277aac220 refactor: use guard in qr profile lookup 2023-06-07 08:06:03 +02:00
William Casarin e67dac13c6 refactor: use guard in handleProfileScan 2023-06-07 08:06:03 +02:00
Suhail Saqan 5f2c8223bd Add qr code scanner
Changelog-Added: Add qr code scanner
Closes: #733
2023-06-07 08:05:27 +02:00
tyiu 14977fe3dd Replace indexed mentions with NIP-27
Changelog-Fixed: Replace indexed mentions with NIP-27
Closes: #1213
2023-06-07 06:22:38 +02:00
William Casarin 1d3c181b85 Translations
Translate Localizable.strings in ja
Translate Localizable.strings in de
Translate Localizable.strings in vi
Translate Localizable.strings in zh_TW
Translate Localizable.strings in zh_HK
Translate Localizable.strings in zh_CN
Translate Localizable.strings in ru
Localizable.strings in cs

Closes: #1253
2023-06-07 06:17:30 +02:00
tyiu 8ca377bec9 Add max length truncation to displayed profile attributes to mitigate spam
Changelog-Fixed: Add max length truncation to displayed profile attributes to mitigate spam
Fixes: #1237
2023-06-04 17:50:52 -04:00
tyiu 952d6746d5 Add profile zaps
Refactor profile zaps to reuse same BOLT11 Lightning invoice logic as
note zaps, which fixes profile zaps from Cash App and Muun wallets

Changelog-Added: Add profile zaps
Changelog-Fixed: Fix profile zapping for Muun and Strike wallets
Closes: #1236
Fixes: #1067
2023-06-04 10:56:43 -07:00
Suhail Saqan b3b335f917 Add NWC paste button
Changelog-Added: Added Wallet Connect paste button
Closes: #1235
2023-06-04 10:56:43 -07:00
tyiu dde48132c9 Fix CI tests
Closes: #1204
2023-05-31 16:40:59 -07:00
William Casarin 809a08ef63 v1.5 (3) 2023-05-30 19:40:37 -07:00
William Casarin 57e6f083b8 Revert "Updated UI to use custom font"
This reverts commit 020a00bf7e.
2023-05-30 19:35:21 -07:00
William Casarin cfa1e13887 Revert "Add .frame & .position modifiers to TextEntry using ScrollView geometry"
This reverts commit f7a0370824.
2023-05-30 19:29:23 -07:00
William Casarin 6eecb5ef26 video-player: don't stop audio, mix with external media 2023-05-30 18:44:36 -07:00
William Casarin 5dc3e2635e video-player: don't randomly stop video 2023-05-30 18:38:04 -07:00
William Casarin 2713e76e17 v1.5-2 changelog 2023-05-30 18:08:57 -07:00
William Casarin 6aa28fce6c v1.5-2 2023-05-30 18:04:21 -07:00
William Casarin a6fb175b98 Add Full-Bleed Video Player
Changelog-Added: Add new full-bleed video player
2023-05-30 18:02:19 -07:00
William Casarin 554c091d57 video-player: hide mute button when we have no audio 2023-05-30 17:58:48 -07:00
William Casarin 9e359650bf carousel: fix image positioning 2023-05-30 17:58:48 -07:00
William Casarin bb091d072f cache: move event-specific media metadata to EventCache 2023-05-30 17:58:48 -07:00
William Casarin 88b04fde09 xcode: remove .git ext from package 2023-05-30 17:58:48 -07:00
William Casarin a1753b2c24 video-player: add tap gesture to prevent nav 2023-05-30 17:58:48 -07:00
William Casarin 80fac1903e carousel: switch to media carousel and include video 2023-05-30 09:36:39 -07:00
William Casarin 6214ab8d8f video: add DamusVideoPlayer view 2023-05-29 17:11:14 -07:00
William Casarin 85cd1bea19 urls: combine url classification 2023-05-29 17:11:13 -07:00
William Casarin 4d95d36a1e Add GSPlayer + VideoPlayer 2023-05-29 17:10:14 -07:00
William Casarin 185fba150f carousel: fix scroll-up bug 2023-05-29 16:09:16 -07:00
Ben Weeks 06ba0f7387 Add ability to show multiple posts per user in Universe
ChangeLog-Added: Add ability to show multiple posts per user in Universe
Closes: #1198
Fixes: #1189
2023-05-29 15:35:29 -07:00
William Casarin 51c4fa1e32 Initial redesign
Changelog-Changed: Redesign phase 1 (text, icons)
2023-05-29 15:31:07 -07:00
Ben Weeks ed4ef0e215 Tweaked action bar icon sizes. 2023-05-29 14:47:10 -07:00
Ben Weeks 973e9fe714 Custom iconography added for other areas of the app.
Changelog-Added: Custom iconography added for other areas of the app.
2023-05-29 14:47:05 -07:00
Ben Weeks d12281fcc5 Custom iconography for the left navigation.
ChangeLog-Added: Custom iconography for the left navigation.
2023-05-29 14:46:59 -07:00
Ben Weeks 156d885e6e Custom iconography for the tab buttons.
ChangeLog-Added: Custom iconography for the tab buttons.
2023-05-29 14:46:52 -07:00
ericholguin bf01d08ea0 setupview: remove damus white button implementation 2023-05-29 14:38:24 -07:00
ericholguin 548d8e49ec createaccount: ui: modify text field look 2023-05-29 14:38:24 -07:00
ericholguin 0fc38e5c05 createaccount: ui: change color of copy icon 2023-05-29 14:38:24 -07:00
ericholguin 028cab9cf6 createaccount: ui: replace damus white buttons with gradient style buttons 2023-05-29 14:38:24 -07:00
ericholguin 29068a40c8 createaccount: ui: remove damus gradient and white font color add background 2023-05-29 14:38:24 -07:00
ericholguin ff06cfaf0c createaccount: ui: refactor signup form 2023-05-29 14:38:24 -07:00
ericholguin eb72fb481c createaccount: remove username from the form 2023-05-29 14:38:24 -07:00
ericholguin 5b7339a0de createaccount: ui: move key text and profile picture selection into frame 2023-05-29 14:38:24 -07:00
ericholguin 06ba72a23d createaccount: ui: remove create account text 2023-05-29 14:38:24 -07:00
ericholguin 47d594af00 createaccount: ui: center pubkey text and add gradient style 2023-05-29 14:38:24 -07:00
ericholguin dd022a953c createaccount: ui: add navigation title and use general padding 2023-05-29 14:38:24 -07:00
ericholguin a4cbf6a12a createaccount: ui: include login prompt and add padding 2023-05-29 14:38:24 -07:00
ericholguin 62dfc24e58 createaccount: ui: change the look of the form label 2023-05-29 14:38:24 -07:00
ericholguin cf15bd3463 createaccount: ui: change the look of the form text field 2023-05-29 14:38:24 -07:00
ericholguin fd44a56f9b createaccount: ui: remove fixed color from back nav 2023-05-29 14:38:24 -07:00
ericholguin 9a9fb28a48 createaccount: ui: add login prompt view struct 2023-05-29 14:38:24 -07:00
ericholguin ba7f675300 createaccount: ui: remove damus white button and use gradient style button 2023-05-29 14:38:24 -07:00
ericholguin 8e84b446a5 createaccount: ui: remove damus gradient 2023-05-29 14:38:24 -07:00
ericholguin 8dbe2c728f loginview: ui: update login preview 2023-05-29 14:38:24 -07:00
ericholguin f975723c0f loginview: ui: include create account prompt view 2023-05-29 14:38:24 -07:00
ericholguin 8ed04f0b0e loginview: ui: add orange color and bold font to pubkey message 2023-05-29 14:38:24 -07:00
ericholguin e33cb3b1c3 loginview: ui: replace damus white button with gradient style button 2023-05-29 14:38:24 -07:00
ericholguin f171cfffe7 loginview: functionality: removed the toggle for hex npub - NEEDS UPDATING 2023-05-29 14:38:24 -07:00
ericholguin 46556c8bdc loginview: ui: replace existing views with new sign in header and entry views 2023-05-29 14:38:24 -07:00
ericholguin 10fec3cbf8 loginview: add create account prompt view struct 2023-05-29 14:38:24 -07:00
ericholguin 7250cf0d8f loginview: add sign in entry view struct 2023-05-29 14:38:24 -07:00
ericholguin 2bddd5ce92 loginview: add sign in header view struct 2023-05-29 14:38:24 -07:00
ericholguin 027b39caed loginview: ui: fix up key input textfield appearance 2023-05-29 14:38:24 -07:00
ericholguin 122d0e451e loginview: ui: replace damus gradient with new login background 2023-05-29 14:38:24 -07:00
ericholguin f99e311e58 eulaview: ui: use new eula background 2023-05-29 14:38:24 -07:00
ericholguin 3fbf3cc12e eulaview: ui: replace damus white buttons with new gradient style buttons 2023-05-29 14:38:24 -07:00
ericholguin 6682f792d8 eulaview: fix up formatting and use new eula variable 2023-05-29 14:38:24 -07:00
ericholguin 2e53ce3905 eulaview: create eula variable and update headers to bold 2023-05-29 14:38:24 -07:00
ericholguin c238b6e28f setupview: ui: remove old title, buttons, carousel and use new welcome, views, and lets get started button 2023-05-29 14:38:24 -07:00
ericholguin e99142a5b8 setupview: remove damus gradient and use new login background 2023-05-29 14:38:24 -07:00
ericholguin 5716578c20 setupview: add why we need nostr view 2023-05-29 14:38:24 -07:00
ericholguin ec35a413fe setupview: add what is nostr view 2023-05-29 14:38:24 -07:00
ericholguin 724773cb45 setupview: add learn about nostr link view 2023-05-29 14:38:24 -07:00
ericholguin 15acdef912 navigation: remove SetupState and references and update navigation links for onboarding flow 2023-05-29 14:38:24 -07:00
ericholguin 72cc4c1fd7 assets: added nostr logo image used in setup view 2023-05-29 14:38:24 -07:00
ericholguin 65f4227e9b assets: added lightbulb image used in setup view 2023-05-29 14:38:24 -07:00
ericholguin f0be5a5ad8 assets: added login header background 2023-05-29 14:38:24 -07:00
ericholguin 48855d5d41 assets: added background for the EULA 2023-05-29 14:38:24 -07:00
ericholguin 90c22fdabd components: added reusable gradient button style 2023-05-29 14:38:24 -07:00
ericholguin dfd1032cd8 gradients: add pink gradient 2023-05-29 14:38:24 -07:00
ericholguin a0e1e16f17 gradients: add damus logo gradient 2023-05-29 14:38:24 -07:00
Ben Weeks 020a00bf7e Updated UI to use custom font
Changelog-Changed: Updated UI to use custom font
2023-05-29 14:38:24 -07:00
William Casarin 297aaf86c6 carousel: only show blurhash when there is one images
Blurhash interacts strangely with carousel
2023-05-29 14:31:54 -07:00
William Casarin f6dd060580 fixup! Add new image carousel 2023-05-29 14:31:16 -07:00
William Casarin 12428d01ad preloader: only preload non-animated images to test animation bug fix 2023-05-29 14:22:54 -07:00
Ben Weeks d091543448 Add new image carousel
Changelog-Added: Added dots under image carousel
Changelof-Fixed: Fixed carousel issues with multiple images of different aspect ratios
Closes: #1004
2023-05-29 14:22:50 -07:00
Ben Weeks 2e596a47a1 Fix event menu capitalization
Closes: #1191
2023-05-29 13:23:24 -07:00
OlegAba ff15156297 Fix side menu offset
Changelog-Fixed: Fix side menu bug in landscape
Closes: #560
2023-05-29 13:17:05 -07:00
Ben Weeks 0a9fbf5031 Removed hex key to RGB functionality. 2023-05-29 12:42:58 -07:00
Ben Weeks 8eebc2abe5 Minor changes to profile ready for rebrand Key removal from nPub in profile 2023-05-29 12:42:58 -07:00
Ben Weeks c22199165a Use "Follow me on nostr" text when looking at someone else's QR code
Fixes: #1069
Closes: #1199
Changelog-Fixed: Use "Follow me on nostr" text when looking at someone else's QR code
2023-05-29 12:27:07 -07:00
gladiusKatana f7a0370824 Add .frame & .position modifiers to TextEntry using ScrollView geometry
Closes: #1201
Changelog-Fixed: Fix issue where cursor dissapears when typing long message
2023-05-29 12:22:44 -07:00
Bryan Montz fe4277e817 simplified call site usage of NostrFilter 2023-05-29 12:19:27 -07:00
William Casarin 6804fbb607 Attempt fix for randomly broken animated GIFs
Changelog-Fixed: Attempt fix for randomly broken animated gifs
2023-05-29 10:18:52 -07:00
William Casarin 05503024cc Profile Caching
Changelog-Added: Add profile caching
2023-05-26 12:11:43 -07:00
gladius e4e477a2ac Fix cursor jumping when pressing return
Changelog-Fixed: Fix cursor jumping when pressing return
Closes: #775
2023-05-26 11:20:40 -07:00
tyiu 59e7a42b5f Fix side menu label size so that translations in longer languages fit without wrapping
Changelog-Fixed: Fix side menu label size so that translations in longer languages fit without wrapping
Closes: #1175
2023-05-26 10:35:25 -07:00
tyiu 0552c24108 Add mention parsing and fine-grained text selection on description in ProfileView
Changelog-Added: Add mention parsing and fine-grained text selection on description in ProfileView
Closes: #1172
2023-05-26 10:35:18 -07:00
Bryan Montz 61303f49ad fix zap test 2023-05-26 07:32:18 -05:00
Bryan Montz e10dc93233 add damus_donation to profile data model and update tests 2023-05-26 07:02:14 -05:00
Bryan Montz ea73c5252d Merge branch 'master' into user-cache 2023-05-26 06:46:47 -05:00
Bryan Montz 7e963c9025 synchronize access to network_pull_date_cache with a queue, writes with barrier flag 2023-05-26 06:38:20 -05:00
Bryan Montz 61ff7da2ae make database write async at the call site and update tests 2023-05-25 09:09:50 -05:00
Bryan Montz 7259641e26 speed optimizations: cache network_pull_date in memory and ensure writes on background queue 2023-05-25 08:20:41 -05:00
gladiusKatana f9a572faa2 dynamically set .isScrollEnabled in TextViewWrapper (true if UserSearch is present) 2023-05-24 20:41:03 -07:00
gladiusKatana 0f805d7ea7 override .isScrollEnabled in TextViewWrapper (ie, set to false at UITextView creation) 2023-05-24 20:41:03 -07:00
William Casarin 52ca33ef6a script: fetch popular users 2023-05-24 18:26:18 -07:00
tyiu 1769b08147 Fix reaction notification title to be consistent with ReactionView
Changelog-Fixed: Fix reaction notification title to be consistent with ReactionView
Closes: #1137
2023-05-24 15:20:02 -07:00
Bryan Montz 812213ff2b Add Damus splash screen
Changelog-Updated: Add Damus splash screen
2023-05-24 15:17:08 -07:00
transifex-integration[bot] d6ecf14b55 Apply translations
Closes: #1134
2023-05-24 15:16:45 -07:00
William Casarin 47a74257c8 nwc debugging 2023-05-24 15:16:45 -07:00
William Casarin 1b161fefd0 nwc: make sure to support nostr+walletconnect scheme
not sure why we have 2 schemes
2023-05-15 12:54:42 -07:00
William Casarin 0b9a274e67 postbox: change initial retry_after from 2 to 10 seconds 2023-05-15 12:54:09 -07:00
William Casarin 2bbbb5db65 Fix a few bugs with donations 2023-05-15 12:53:36 -07:00
William Casarin bffa42a13a Supporter Badges 2023-05-15 11:57:37 -07:00
William Casarin 8097cfdfb8 Include donation_amount on profile 2023-05-15 09:59:51 -07:00
William Casarin af912b1a0e v1.5-1 2023-05-15 09:59:22 -07:00
William Casarin 51cd34c9c2 c: move parse_digit to remove warning 2023-05-15 09:59:10 -07:00
William Casarin a6745af519 Implement damus zap split donations using NWC 2023-05-15 09:41:26 -07:00
Bryan Montz 91113fbc6d allow models to fetch profiles when they get stale 2023-05-15 08:33:35 -05:00
Bryan Montz d58a1e0ba3 add ability to check the freshness of a PersistedProfile 2023-05-15 08:31:49 -05:00
Bryan Montz 3f7b0a4d6e add network pull date to PersistedProfile model for staleness checking 2023-05-15 08:29:06 -05:00
Bryan Montz bc315dd571 remove identical function 2023-05-15 07:33:49 -05:00
William Casarin 631220fdcb ui: add support damus ui in WalletView
This appears after you've connected your wallet
2023-05-14 22:24:12 -07:00
William Casarin 5aa0d6c3e1 settings: add donation_percent to settings
This will be used in damus donations splits
2023-05-14 22:24:12 -07:00
tyiu f9982e992a Migrate away from sticky deprecated non-pubkey-scoped settings
Changelog-Fixed: Migrate away from sticky deprecated non-pubkey-scoped settings
Closes: #1124
2023-05-14 21:08:56 -07:00
transifex-integration[bot] 0eaebb80f1 Apply translations
in:

- nl
- de
- cs
- hu_HU
- sv_SE
- ar
- fa
- pl_PL
- ja

Closes: #1122
2023-05-14 21:06:20 -07:00
tyiu 6f23b69f2c Export strings for translation 2023-05-14 20:54:13 -07:00
William Casarin ec50c75062 ui: expose raw LinearGradient in DamusGradient
This will be used in background-fill applications
2023-05-14 20:47:53 -07:00
William Casarin 0293b61d7a Rename 'Connect to Alby' to 'Attach Alby Wallet' 2023-05-14 14:07:04 -07:00
tyiu 50e4452016 Fix nostr URL scheme to open properly even if there's already a different view open
Closes: #1130
Changelog-Fixed: Fix nostr URL scheme to open properly even if there's already a different view open
2023-05-14 11:36:46 -07:00
William Casarin a30a79b1fc Fix tests 2023-05-14 11:20:28 -07:00
William Casarin 60260ae53b nwc: make delay 5 seconds instead of 3 2023-05-14 11:11:27 -07:00
William Casarin 1fff0abce5 Make it easier to tap zap button
Right now the tap target only covered the bolt, now it's bolt+amount
2023-05-14 11:04:56 -07:00
William Casarin b1fee253b4 nwc: fix bug where private nwc zaps weren't getting tracked properly
It was using the wrapper zap request id instead of the inner id. Fix
this type error by creating a ZapRequestId wrapper that makes sure it
uses the proper request id.
2023-05-14 10:52:37 -07:00
William Casarin e472e559a5 nwc: don't use yellow on the Zap Button for pending zaps
I just find this stressful
2023-05-14 10:49:54 -07:00
William Casarin 0091df8f77 nwc: fix broken test 2023-05-14 10:49:54 -07:00
William Casarin d0c67237dd nwc: remove requests from postbox
Since these are ephemeral events, there will never be command results,
so we need to remove them manually on NWC responses or else it will keep
trying to send them.

We should probably handle this for all ephemeral events in the postbox
somehow. We probably shouldn't use the postbox for ephemeral events
without response events.
2023-05-14 10:49:54 -07:00
William Casarin 1313880574 Add release Damus build scheme 2023-05-14 10:49:54 -07:00
William Casarin 122b528407 Add rigid haptic feedback when you zap cancel fails
This feels different than the soft haptic feedback so it should let
people know that cancelling is no longer possible
2023-05-14 10:49:54 -07:00
William Casarin 02d99f7340 postbox: try flushing events every second
relying on network activity for flushing is not reliable and is causing
delays in zapping
2023-05-14 10:49:54 -07:00
William Casarin 8fb5b4f49c misc logs 2023-05-14 00:03:51 -07:00
William Casarin ae4d9ab8ba nwc: make delay 3 seconds instead of 5 2023-05-14 00:03:51 -07:00
William Casarin 85262e1a4e nwc: fix response parsing 2023-05-14 00:03:51 -07:00
William Casarin 64a224135a nwc: always allow long press zap 2023-05-13 23:54:02 -07:00
William Casarin 69fc6694f1 nwc: turn pending zap orange when we have a NWC success
Orange means payment successful now, not just presence of zap

This introduces a paid pending state, which shows up as an orange timer
thing in the zaps view. This can be useful if the zap is never sent. We
don't want the user to think the payment didn't go through.
2023-05-13 23:30:03 -07:00
William Casarin 03691d0369 Pending Zaps
A fairly large change that replaces Zaps in the codebase with "Zapping"
which is a tagged union consisting of a resolved Zap and a Pending Zap.
These are both counted as Zaps everywhere in Damus, except pending zaps
can be cancelled (most of the time).
2023-05-13 21:33:34 -07:00
William Casarin 1518a0a16c zaps: ensure returned bolt11 is the correct amount 2023-05-13 19:51:06 -07:00
Bryan Montz 32431096f5 add tests for ProfileDatabase 2023-05-13 09:20:01 -05:00
Bryan Montz 6172347455 add ability to remove all cached Profiles in ProfileDatabase 2023-05-13 09:18:47 -05:00
Bryan Montz 31d327a085 add ability to retrieve count of cached Profiles 2023-05-13 09:18:23 -05:00
Bryan Montz b5ae7df795 add ability to change ProfileDatabase's storage URL 2023-05-13 09:17:41 -05:00
Bryan Montz 3b0bb48dd4 integrate ProfileDatabase with existing Profiles caching class 2023-05-12 07:21:59 -05:00
Bryan Montz 4646f0e23c add ProfileDatabase class to read and write profiles to disk 2023-05-12 07:21:25 -05:00
Bryan Montz 7027b7016c add two-way translation between existing Profile class and new PersistedProfile CoreData class 2023-05-12 07:19:43 -05:00
Bryan Montz 76c57af548 add managed object class to match new Profile CoreData model 2023-05-12 07:18:12 -05:00
Bryan Montz 7983157c38 add CoreData model for Profile 2023-05-12 07:15:30 -05:00
William Casarin dafa1ba4de test: add nwc and ephemeral relay test
This ensures that when paying with nwc, we get an ephemeral relay added
and a request queued in the postbox.
2023-05-10 16:24:02 -07:00
William Casarin 9093bdec2d home: add some more helper functions 2023-05-10 14:07:24 -07:00
William Casarin bb32d72903 nwc: clear the zapper cache for our pubkey when we attach a new wallet 2023-05-10 14:07:24 -07:00
William Casarin f77a7bcb29 ui: show lud16 in attach wallet ui 2023-05-10 14:07:24 -07:00
William Casarin 5cce18c8b6 nwc: attach lud16 to profile when attaching wallet 2023-05-10 14:07:24 -07:00
William Casarin a5726d4650 nwc: add lud16 parameter
This will be used for auto-setting up the lightning wallet

See https://github.com/nostr-protocol/nips/pull/513
2023-05-10 14:07:24 -07:00
William Casarin 370a5feb4e ui: add Nostr Wallet Connect views 2023-05-10 14:07:24 -07:00
William Casarin fe3d976cdb nwc: pay with nwc if we have it configured 2023-05-10 14:07:24 -07:00
William Casarin 996312cf1c settings: Add nostr_wallet_connect setting
Stored in the keychain for security
2023-05-10 14:07:24 -07:00
William Casarin d0216bbce6 nwc: Add WalletModel
This model will be used for controlling the logic in the Wallet views
2023-05-10 14:07:24 -07:00
William Casarin 4d2b79057d nwc: add Nostr Wallet Connect logic
- WalletConnectURL parses nostrwalletconnect:// urls
- Add support for parsing and creating NWC requests
2023-05-10 14:07:24 -07:00
William Casarin ca2bf20eb7 info: add nostrwalletconnect uri handlers
We will need this to handle nostrwalletconnect:// links
2023-05-10 14:07:24 -07:00
William Casarin baed6adf49 refactor: ensure make_metadata_event has full keypair 2023-05-10 14:07:23 -07:00
William Casarin f068833c5e colors: add adaptableBlack
Used in template icons
2023-05-10 14:07:23 -07:00
William Casarin c3808cd21f icons: convert to template images 2023-05-10 14:07:23 -07:00
William Casarin acbd09bf6f ------ ephemeral relays -------
Add docs
2023-05-10 13:31:53 -07:00
William Casarin 1fe54380b8 relay: make RelayInfo encoding more flexible
So that we don't fail relay list decoding as easy
2023-05-10 13:25:46 -07:00
William Casarin fe6d7e5118 relay: split descriptors to {our,all}_descriptors
Now that we have ephemeral relays, we don't want them used everywhere
2023-05-10 13:25:40 -07:00
William Casarin 1367be0d10 relay: handle ephemeral relays in PostBox
We need to make sure ephemeral relay events (not ephemeral events) are
handled properly in the postbox. Make sure we pass the proper
skip_ephemeral flag to the relay pool if we add something like a NWC
event to the PostBox. Events are not sent to ephemeral relays by
default.
2023-05-10 12:01:26 -07:00
William Casarin 32a1a24e39 pool: skip ephemeral relays by default
Also filter relays by read/write once we introduce that
2023-05-10 12:01:26 -07:00
William Casarin 7267662330 relay: introduce ephemeral relays
Epehmeral relays are relays that are connected in your relay pool but
not a part of your official relay list. This will be used by
nostr-wallet-connect to communicate with an NWC relay to pay invoices.
2023-05-10 12:01:26 -07:00
William Casarin 1da0a8ee52 nostr: add is_{read,write} helpers on requests
This will be handy in the future when we properly filter relay lists by
RelayInfo
2023-05-10 12:01:26 -07:00
William Casarin 23aab6710a Fix DM sorting test 2023-05-10 11:01:40 -07:00
Bryan Montz ce599badee fix crash related to preloading events
Changelog-Fixed: fix crash related to preloading events
2023-05-09 23:39:41 -05:00
William Casarin 221fffe523 Fix tests
This reverts commit dff5987d3c.
2023-05-09 20:23:08 -07:00
William Casarin 5d72b4d007 dms: generalize create_dm into create_encrypted_event
We will need this for encrypting notes other than DMs (NWC)
2023-05-09 18:57:04 -07:00
William Casarin dff5987d3c settings: mark UserSettings as changed in KeychainStorage properties
Maybe this isn't strictly needed at the moment, but to remain consistent
with the Settings and StringSettings property wrapper we will do this.
2023-05-09 18:57:04 -07:00
William Casarin bfffd63dab ui: use darker border colors in BigButton
Might need to update the other buttons as well in the share sheet
2023-05-09 18:57:04 -07:00
William Casarin 1db425fd69 ui: add AlbyButton
This will be used for alby's nostr wallet connect implementation
2023-05-09 18:57:04 -07:00
William Casarin 27caffd91f ui: add alby logo for the AlbyButton 2023-05-09 18:57:04 -07:00
William Casarin a13efb7832 ui: move gradient components to their own group 2023-05-09 18:57:04 -07:00
William Casarin e3b3c9dedd ui: add QR CodeScanner helpers 2023-05-09 18:57:04 -07:00
William Casarin 904fe2bc0a pool: ocd change
I'm not a fan of $0, etc
2023-05-09 18:57:04 -07:00
William Casarin ccd76066d1 switch to v1.5 2023-05-08 12:38:08 -07:00
William Casarin 4ccc763072 Fix changelog 2023-05-08 11:55:44 -07:00
William Casarin 484ebd655b Merge remote-tracking branch 'github/master' 2023-05-08 11:53:21 -07:00
William Casarin 1582eb2e2f v1.4.3 changelog 2023-05-08 11:52:05 -07:00
William Casarin f95498a6fa v1.4.3 - AppStore release 2023-05-08 11:47:19 -07:00
Joshua Jiang 94a29e2c2f Add unmute option in profile view
Changelog-Added: Add unmute option in profile view
Closes: #1050
2023-05-08 11:16:21 -07:00
William Casarin 5f64f54ef5 Fix previews in DMs
TODO: maybe we need to just add this to NoteContentView?

I don't want to do this just yet though because I'm about to cut a
release and I don't want to introduce new bugs.
2023-05-08 11:14:56 -07:00
tyiu b377a0553f Translations (#1103)
* Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

* Apply translations in cs

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'cs' language.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2023-05-08 11:11:15 -07:00
ericholguin 0492a25633 Changed look of Repost and Quote buttons
Changelog-Changed: Changed look of Repost and Quote buttons
Closes: #1104
2023-05-08 11:05:14 -07:00
Bryan Montz 43017828e2 fix user notifications from old events immediately shown on install and login
Changelog-Fixed: Fix user notifications from old events immediately shown on install and login
Closes: #1106
2023-05-08 11:02:12 -07:00
Bryan Montz 9847f12c95 Remove unused code
Closes: #1105
2023-05-08 11:01:04 -07:00
William Casarin 0da10eb716 build 23 2023-05-08 10:56:35 -07:00
William Casarin 9b99e00804 Reconnect on failed ping and remove reconnect timer
I think this does it
2023-05-07 12:00:37 -07:00
William Casarin a4d4ad72e6 build 22 2023-05-07 11:28:33 -07:00
William Casarin 8c55f23ea8 Don't put reconnect logic in ping
It seems to be very bad
2023-05-07 11:28:33 -07:00
William Casarin b43aca8abb build 21 changelog 2023-05-07 10:39:26 -07:00
William Casarin 86687b6289 v1.4.3-21 2023-05-07 10:38:21 -07:00
William Casarin 84174ef9ad Ping relays on resume, if there's an error then try to reconnect
This is an attempt to fix the fail-to-reconnect issues. Let's see if it works.
2023-05-07 10:28:36 -07:00
Bryan Montz f78eeb1f22 Fix npub search fails on the first try
Co-authored-by: William Casarin <jb55@jb55.com>
Changelog-Fixed: Fix npub search fails on the first try
Closes: #1044
Closes: #1100
2023-05-07 09:50:49 -07:00
William Casarin a007e18add Dismiss bookmarks view when switching tabs
Changelog-Fixed: Dismiss bookmarks view when switching tabs
2023-05-07 09:30:05 -07:00
Bryan Montz 7a8bfffc29 Fix posts with no uploadedURLs always get two blank spaces at the end
Changelog-Fixed: Fix posts with no uploadedURLs always get two blank spaces at the end
Closes: #1101
2023-05-07 09:24:05 -07:00
Swift c35331ceda Fix bug where you could only mention users at the end of a post
Changelog-Fixed: Fix bug where you could only mention users at the end of a post
Closes: #1102
2023-05-07 09:22:58 -07:00
transifex-integration[bot] 88ddb70ca8 Apply translations
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.

Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

Apply translations in cs

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.

Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

Apply translations in nl

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.

Apply translations in zh_HK

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.

Apply translations in hu_HU

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.

Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

Apply translations in pl_PL

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.

Apply translations in pl_PL

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'pl_PL' language.
2023-05-07 09:14:11 -07:00
tyiu 9be39a5964 Export strings for translation 2023-05-06 00:37:03 -04:00
William Casarin 0f5e1dfb81 Properly scroll DM view when keyboard is open
Less DM jank!

Changelog-Fixed: Properly scroll DM view when keyboard is open
2023-05-05 16:13:17 -07:00
William Casarin a5cb10ddaa HomeView: refactor
Trying to clean this view up a bit
2023-05-05 14:24:24 -07:00
William Casarin 4402d4bdf5 dms: use lazyvstack
It gets too poppy otherwise

Changelog-Fixed: Made DMs less poppy
2023-05-05 14:24:11 -07:00
ericholguin 28e67f4a7c Fix zap type selection on smaller phones
Closes: #1018
Changelog-Fixed: Zap type selection on smaller phones
2023-05-05 11:24:50 -07:00
Joshua Jiang c439100a86 Fix parse mention without space in content
Changelog-Fixed: Fix parse mention without space in content
Closes: #936
Fixes: #992
2023-05-05 11:20:20 -07:00
transifex-integration[bot] fc3a86027f Apply translations
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'nl' language.

Apply translations in ko

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'ko' language.

Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.

Apply translations in et

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'et' language.

Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

Apply translations in ar

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'ar' language.

Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'zh_CN' language.

Apply translations in zh_HK

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'zh_HK' language.

Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'zh_TW' language.

Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

Apply translations in hu_HU

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.

Apply translations in cs

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.

Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

Apply translations in ar

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.

Apply translations in nl

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.

Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

Apply translations in zh_HK

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.

Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

Apply translations in de

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.

Apply translations in pl_PL

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.

Apply translations in es_419

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'es_419' language.

Apply translations in lv_LV

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'lv_LV' language.

Apply translations in de

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.

Apply translations in hu_HU

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.

Apply translations in nl

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.

Apply translations in cs

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.

Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

Apply translations in zh_HK

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.

Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-05-05 09:01:06 -07:00
tyiu 440ef02eaa Update reaction notification title and miscellaneous localization fixes 2023-05-05 09:01:05 -07:00
tyiu 9a0ad7bcab Export strings for translation 2023-05-05 09:01:05 -07:00
tyiu 136186e664 Fix quotations in Localizable.stringsdict 2023-05-05 09:00:03 -07:00
tyiu 36364f4f70 Export strings for translation 2023-05-05 09:00:03 -07:00
tyiu 45a78fa14f Rename 'Liked by' to 'Reacted by' 2023-05-05 09:00:03 -07:00
tyiu 34970b38bb Fix plurality on sats 2023-05-05 09:00:02 -07:00
William Casarin 0f89d98513 Revert "Added new icons for hashtags and updated the current ones to use a proper ratio."
This breaks the look of some hashtags

This reverts commit c7129531c2.
2023-05-05 08:53:57 -07:00
William Casarin 21be1416f7 Don't preload pfps, it's not thread safe? 2023-05-05 08:38:03 -07:00
William Casarin 9efdda43f2 Ensure we have proper sizes on iconography 2023-05-05 08:31:47 -07:00
Roberto Agreda e4e5d87e7c Changelog-Added: new iconography 2023-05-04 23:42:19 -06:00
Roberto Agreda c7129531c2 Added new icons for hashtags and updated the current ones to use a proper ratio. 2023-05-04 21:03:03 -06:00
Bryan Montz e4860f3ba8 Replace Vault dependency with @KeychainStorage property wrapper
Changelog-Changed: replace Vault dependency with @KeychainStorage property wrapper
Closes: #1076
2023-05-04 15:57:02 -07:00
William Casarin 27fb4e797d v1.4.3-20 changelog 2023-05-04 09:08:40 -07:00
William Casarin e6b4b2a437 v1.4.3-20 2023-05-04 09:05:59 -07:00
William Casarin add1e6104e Add webp image support
Kingfisher already supports this... wtf we doing

Changelog-Added: Add webp image support
2023-05-03 17:29:26 -07:00
William Casarin 5c557bc87d Don't process blurhash if we already have image cached
Changelog-Fixed: Don't process blurhash if we already have image cached
2023-05-03 17:29:26 -07:00
William Casarin af407f7eea Home now dismisses reactions view
Changelog-Fixed: Home now dismisses reactions view
2023-05-03 17:29:26 -07:00
William Casarin ac2e7d108d refactor sidemenu items 2023-05-03 17:29:26 -07:00
tyiu b85be50cc4 Fix auto-translations bug where languages in preferred language still gets translated
Changelog-Fixed: Fix auto-translations bug where languages in preferred language still gets translated
Closes: #1066
2023-05-03 17:29:22 -07:00
William Casarin 39a324fd1e Optimize json processing and preloading
- Preload events when added to the EventHolder queue
- Remove relative time formatting from preloader. Just do it when event appears
- Process incoming json in a background queue by default

Changelog-Fixed: Fix wrong relative times on events
Changelog-Changed: Preload events when they are queued
2023-05-03 10:36:10 -07:00
William Casarin 3b541f2ec1 Fix small bug in like counters 2023-05-03 06:36:42 -07:00
William Casarin 80ea37a102 Don't spam reconnects on error 2023-05-03 06:36:33 -07:00
William Casarin 91fc0039eb build 19 2023-05-02 08:23:58 -07:00
William Casarin 8eb013f1f7 Search hashtags automatically
Changelog-Changed: Search hashtags automatically
2023-05-02 08:22:36 -07:00
William Casarin 4f459d128a Load profiles in hashtag searches
Changelog-Fixed: Load profiles in hashtag searched
2023-05-02 07:53:06 -07:00
William Casarin 58e53631c6 Use cached note language in search model
We should never call event.note_language on the main thread
2023-05-02 07:53:06 -07:00
William Casarin 7b2e178f5b Fix warning 2023-05-02 07:53:06 -07:00
William Casarin da99130b78 build 18 2023-05-02 07:51:29 -07:00
William Casarin b79d361016 Preload profile pictures while scrolling
Changelog-Added: Preload profile pictures while scrolling
2023-05-02 07:33:54 -07:00
William Casarin 4889c0a7d9 Fix weird #\[0] artifacts appearing in posts and translated from english bugs
This changes the preloader to load things right away and fixes a bunch
of bugs

Changelog-Fixed: Fix weird #\[0] artifacts appearing in posts
Changelog-Fixed: Fix "translated from english" bugs
2023-05-02 06:48:02 -07:00
William Casarin 61c9732acd Fix crash when loading DMs in the background
Changelog-Fixed: Fix crash when loading DMs in the background
2023-05-02 06:48:02 -07:00
William Casarin ee6c080af8 Fix blurhash appearing behind loaded images when swiping on carousel
Changelog-Fixed: Fixed blurhash appearing behind loaded images when swiping on carousel
2023-05-02 06:48:02 -07:00
William Casarin a18ba86157 refactor: remove redundant rectangle in ImageCarousel 2023-05-02 06:48:02 -07:00
Bryan Montz 03931ef70e Save keys when logging in and when creating new keypair
Changelog-Added: Save keys when logging in and when creating new keypair
Closes: #1042
2023-05-02 06:47:29 -07:00
Swift 3284832eb0 Fix camera not dismissing
Changelog-Fixed: Fix camera not dismissing
Closes: #964
2023-05-01 15:39:09 -07:00
Bryan Montz c679be9644 Top-level tab state restoration
Changelog-Added: Top-level tab state restoration
Closes: #634
2023-05-01 15:22:54 -07:00
tyiu 9f701a7d44 Fix bug with reaction notifications referencing the wrong event
Changelog-Fixed: Fix bug with reaction notifications referencing the wrong event
Closes: #1047
2023-05-01 15:21:01 -07:00
Bryan Montz cb11087034 Fix Copy Link action does not dismiss ShareAction view
Changelog-Fixed: Fix Copy Link action does not dismiss ShareAction view
Closes: #1049
2023-05-01 15:20:10 -07:00
Ben Weeks 49b7aee74e Save Jack's soul
Very minor amendment to stop the bouncing of the bolt symbol as you click it.

Changelog-Fixed: Saved Jack's soul.
Closes: #1060
2023-05-01 15:19:26 -07:00
William Casarin 5b97906138 build 17 2023-04-30 22:30:25 -07:00
William Casarin c74d3e4938 fix some translation bugs 2023-04-30 22:04:33 -07:00
William Casarin df6911f9cb cache note language 2023-04-30 21:40:11 -07:00
William Casarin 1ca0519e25 Event Preloading
Changelog-Added: Added event preloading when scrolling
Changelog-Added: Preload images so they don't pop in
Changelog-Fixed: Fixed preview elements popping in
Changelog-Changed: Cached various UI elements so its not as laggy
Changelog-Fixed: Fixed glitchy preview
2023-04-30 20:06:38 -07:00
William Casarin c87f19b479 v1.4.3-15 changelog 2023-04-29 08:46:43 -07:00
William Casarin 68ed3d7796 Fix nip10 thread incompatibility for clients that add more than one reply tag
Changelog-Fixed: Fix thread incompatibility for clients that add more than one reply tag
2023-04-29 07:49:10 -07:00
Swift 5c885b0fd4 Fix sats plurality
Closes: #1034
2023-04-29 06:01:10 -07:00
tyiu 8589fe9aee Translations (#1020)
* Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

* Export strings for translation

* Apply translations in nl

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.

* Apply translations in cs

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.

* Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in hu_HU

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_HK

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2023-04-29 06:00:56 -07:00
William Casarin 2aee84c65f Add q tag to quote renotes
Changelog-Added: Add q tag to quoted renotes
2023-04-28 17:54:44 -07:00
William Casarin 76c6ac0f0b Add referencedid helpers 2023-04-28 17:54:44 -07:00
William Casarin be08083b88 Load zaps instantly on events
Refactor our event cache a bit and add zap caching

Changelog-Changed: Load zaps instantly on events
2023-04-28 17:25:31 -07:00
William Casarin c2325a5e39 always process events 2023-04-28 13:03:26 -07:00
William Casarin 3eb544e40d build 13 2023-04-28 13:00:44 -07:00
William Casarin 9d209f485c Preserve order of bookmarks when saving
Changelog-Fixed: Preserve order of bookmarks when saving
2023-04-27 13:04:46 -07:00
Swift 1394122542 Add confirmation alert when clearing all bookmarks
Changelog-Added: Add confirmation alert when clearing all bookmarks
Closes: #1016
2023-04-27 10:31:55 -07:00
William Casarin e89c025d9d Remove blurhash opacity 2023-04-27 10:30:31 -07:00
William Casarin 0970c364b6 Tweak fade speed and opacity on blurhash placeholders 2023-04-26 15:41:30 -07:00
William Casarin d16192e845 Show blurhash placeholders from image metadata
Changelog-Added: Show blurhash placeholders from image metadata
2023-04-26 15:21:12 -07:00
William Casarin 3b50f82094 Add image metadata to image uploads
Adds blurhash and image dimensions. This is an alternative and backwards
compatible version of NIP94 for images in kind1 notes.

Changelog-Added: Add image metadata to image uploads
2023-04-26 10:53:13 -07:00
William Casarin 46b53e1326 Add BinaryParser
Didn't end up using this, but might be useful in the future
2023-04-26 10:53:13 -07:00
William Casarin 225a028f3e build 12 2023-04-25 15:21:16 -07:00
William Casarin d074d092a2 Fix crash when you have invalid relays in your relay list
Changelog-Fixed: Fix crash when you have invalid relays in your relay list
2023-04-25 15:06:09 -07:00
William Casarin 633fcd69a8 build 11 2023-04-25 14:31:13 -07:00
William Casarin 67869394cb Fix permanent OnlyZaps (likes broken lol) 2023-04-25 12:43:02 -07:00
William Casarin 22876b5c28 v1.4.3-10 changelog 2023-04-25 09:43:49 -07:00
William Casarin 6f7d6d1933 build 10 2023-04-25 08:57:45 -07:00
William Casarin fddd86b207 Revert "Remove unneeded periodic reconnect timer"
This reverts commit ed058afc3b.
2023-04-25 08:57:45 -07:00
alltheseas 95f1127b74 Readme.MD: add privacy section, and link to issues
Added:
1. Damus implications on user privacy (IP address)
2. Added direct link to Damus github issues for interested contributors
3. Added statement of relation between IP address and public key

Co-authored-by: Max Hillebrand <30683012+MaxHillebrand@users.noreply.github.com>
2023-04-25 08:57:45 -07:00
William Casarin 4c82176466 Merge remote-tracking branch 'github/translations' 2023-04-25 08:57:45 -07:00
transifex-integration[bot] e2d55ddae4 Apply translations in hu_HU
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.
2023-04-25 10:18:10 +00:00
transifex-integration[bot] 8fa80b7921 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-25 08:50:45 +00:00
transifex-integration[bot] 732b484faf Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-25 08:48:39 +00:00
transifex-integration[bot] cd9c705221 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-25 08:43:59 +00:00
transifex-integration[bot] ba5a062829 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-25 05:29:16 +00:00
transifex-integration[bot] 687d1c9a3e Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-25 05:26:56 +00:00
transifex-integration[bot] adef207018 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:58:29 +00:00
transifex-integration[bot] a050a5b729 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:49:06 +00:00
transifex-integration[bot] 6bced24430 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:48:56 +00:00
transifex-integration[bot] 60cddf2a15 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:48:29 +00:00
transifex-integration[bot] c9568fe7ac Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:46:59 +00:00
transifex-integration[bot] 5c0e4599ad Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:46:49 +00:00
transifex-integration[bot] e3519c51a5 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:46:46 +00:00
transifex-integration[bot] ed1aa246c4 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:46:26 +00:00
transifex-integration[bot] 532647d273 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:46:03 +00:00
transifex-integration[bot] dab8f7ca61 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:45:52 +00:00
transifex-integration[bot] 390eb342f7 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-25 03:26:11 +00:00
Suhail Saqan f1a7c0eded Add paste button to login
Changelog-Added: Add paste button to login
Closes: #927
2023-04-24 18:30:25 -07:00
William Casarin ed058afc3b Remove unneeded periodic reconnect timer 2023-04-24 18:21:12 -07:00
Bryan Montz 0e94c48e26 Replace Starscream with URLSessionWebSocketTask
Changelog-Fixed: Fix slow reconnection issues
2023-04-24 18:11:07 -07:00
symbsrcool 6ac68b5a73 Add nokyctranslate translation option
Changelog-Added: Add nokyctranslate translation option
Closes: #946
2023-04-24 18:07:03 -07:00
Swift 2048e68d67 Fix issue where uploaded images were from someone else
Changelog-Fixed: Fix issue where uploaded images were from someone else
2023-04-24 17:53:28 -07:00
William Casarin 624d9662d7 Merge remote-tracking branch 'github/translations' 2023-04-24 16:20:19 -07:00
William Casarin 88db9de4ea Fix reposts on macos 2023-04-24 15:38:11 -07:00
William Casarin d667a9d8f7 Fix custom zap button hitboxes
Suggested-by: eric
2023-04-24 10:51:47 -07:00
transifex-integration[bot] 65f3c76eca Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-24 17:13:45 +00:00
transifex-integration[bot] aed1e543d3 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-24 17:11:27 +00:00
transifex-integration[bot] 65576424fd Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-24 17:11:17 +00:00
transifex-integration[bot] f99ad8fffa Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-24 17:10:28 +00:00
transifex-integration[bot] 987d173529 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-24 17:09:38 +00:00
transifex-integration[bot] eab7a91f01 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-24 13:35:13 +00:00
transifex-integration[bot] 2d045f4dfb Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-24 11:13:59 +00:00
transifex-integration[bot] 835e5a438f Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-24 08:13:36 +00:00
transifex-integration[bot] ca4e91564a Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-24 08:10:57 +00:00
tyiu 8733cbd42c Fix localization issues and export strings for translation 2023-04-24 01:25:07 +02:00
William Casarin f5cdd4a159 You can now change the default zap type
Changelog-Added: You can now change the default zap type
2023-04-23 10:31:51 -07:00
William Casarin c4f41220e5 refactor: extract ZapTypePicker into its own file 2023-04-23 09:54:38 -07:00
William Casarin 0f119d34e6 Change 500 custom zap amount to 420🌿
Suggested-by: Terry
Changelog-Changed: Change 500 custom zap to 420
2023-04-23 08:54:13 -07:00
William Casarin ea90fb0429 Make custom zap amounts into a grid 2023-04-23 08:40:33 -07:00
ericholguin 8227be1873 Updated custom zap view
Changelog-Changed: New looks to the custom zaps view
2023-04-23 08:40:22 -07:00
William Casarin cbd92539a6 Merge remote-tracking branch 'github/translations' 2023-04-23 04:36:16 -07:00
William Casarin 7940e6fd32 Fix tests 2023-04-23 04:36:16 -07:00
Swift 07f8ad75dc Adjust attachment images placement when posting
Changelog-Changed: Adjust attachment images placement when posting
Closes: #979
2023-04-23 04:36:13 -07:00
transifex-integration[bot] 018bb4c33b Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-23 06:22:51 +00:00
transifex-integration[bot] c81b403817 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-23 01:57:25 +00:00
transifex-integration[bot] e54ce88a3b Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-23 01:57:22 +00:00
transifex-integration[bot] 84f4f1c71c Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-22 20:10:01 +00:00
tyiu e934c2bb11 Fix crash with LibreTranslate server setting selection and remove delisted vern server
Broken after the settings refactor

Changelog-Fixed: Fix crash with LibreTranslate server setting selection and remove delisted vern server
Closes: #998
2023-04-22 12:33:11 -07:00
William Casarin fd8ad494e9 Add partial support for different repost variants
Changelog-Added: Add partial support for different repost variants
2023-04-22 12:11:45 -07:00
William Casarin f14ba7cce4 Fix potentially buggy media uploader setting 2023-04-22 12:11:45 -07:00
William Casarin 055b13c1cd Fix buggy zap amounts and wallet selector settings
Changelog-Fixed: Fix buggy zap amounts and wallet selector settings
2023-04-22 12:10:10 -07:00
William Casarin 357e8adf86 Refactor disable_animation setting
Pass it down from the top instead of using a function which goes around
our settings store
2023-04-22 12:08:24 -07:00
transifex-integration[bot] a82a78c7df Apply translations in vi
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'vi' language.
2023-04-22 18:45:04 +00:00
William Casarin 084c86eb0e Only show friends, not friend-of-friend in friend filter
Changelog-Changed: Only show friends, not friend-of-friend in friend filter
2023-04-22 11:15:45 -07:00
transifex-integration[bot] 10d9d23b7b Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-22 15:30:37 +00:00
transifex-integration[bot] 50ecff0ec6 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-22 13:37:58 +00:00
transifex-integration[bot] 5ae96ec80a Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-22 13:37:48 +00:00
transifex-integration[bot] abfd48ca20 Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-22 13:37:32 +00:00
transifex-integration[bot] 67326e2003 Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-22 13:37:22 +00:00
transifex-integration[bot] 306c3fe75c Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-22 13:36:57 +00:00
transifex-integration[bot] 08c2056290 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-22 13:36:11 +00:00
transifex-integration[bot] bc5ee7cd51 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-22 13:17:58 +00:00
transifex-integration[bot] b2d1ad2537 Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-22 13:16:17 +00:00
transifex-integration[bot] b9f37697d7 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-22 13:06:28 +00:00
transifex-integration[bot] 58e88262b0 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-22 12:49:50 +00:00
transifex-integration[bot] 26e28dd3dd Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.
2023-04-22 12:46:13 +00:00
transifex-integration[bot] 6ac6ea3cd7 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.
2023-04-22 12:45:53 +00:00
transifex-integration[bot] 2de75968fb Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.
2023-04-22 12:44:46 +00:00
transifex-integration[bot] 37b99983d3 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:42:33 +00:00
transifex-integration[bot] f62dc9348a Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:42:11 +00:00
transifex-integration[bot] 6aab705399 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:41:41 +00:00
transifex-integration[bot] f7da481c68 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:36:14 +00:00
transifex-integration[bot] e5b629742a Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:35:55 +00:00
transifex-integration[bot] a0e6aa060b Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:35:52 +00:00
transifex-integration[bot] 6394f96ac0 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:35:38 +00:00
transifex-integration[bot] b6d6af12b8 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:35:29 +00:00
transifex-integration[bot] df84c4a64b Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:33:40 +00:00
transifex-integration[bot] 71b333a18a Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:33:30 +00:00
transifex-integration[bot] 29936f7b06 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:33:21 +00:00
transifex-integration[bot] 1cc1bfbbef Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:33:08 +00:00
transifex-integration[bot] 2aa39e775e Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:32:58 +00:00
transifex-integration[bot] 8a33243c98 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:32:04 +00:00
transifex-integration[bot] d198e69dc9 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:31:38 +00:00
transifex-integration[bot] c26b30f3c0 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:31:24 +00:00
transifex-integration[bot] c2479df213 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-22 10:30:36 +00:00
transifex-integration[bot] 30d045b1c5 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] d76f7564ef Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] bab72b215d Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] d8cd81deb8 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] 92dfdacf97 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] ead6e96613 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] 7312ee3884 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-22 11:27:02 +02:00
transifex-integration[bot] 45099c59db Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-22 11:27:02 +02:00
tyiu 3440c828e3 Export strings for translation 2023-04-22 11:27:01 +02:00
William Casarin 00aa897f05 build 8 2023-04-21 17:48:34 -07:00
William Casarin 71a1a6f0a3 Add some default height to images 2023-04-21 17:45:58 -07:00
William Casarin 9d22f40a53 Remove some cruft 2023-04-21 17:15:23 -07:00
William Casarin 0bd40c0018 Add Friends filter to DMs
Changelog-Added: Add friends filter to DMs
2023-04-21 16:55:59 -07:00
William Casarin ec75769a0f Refactor notification state filter saving and loading 2023-04-21 16:39:12 -07:00
William Casarin 47e349558c rename FineNotificationFilter to FriendFilter 2023-04-21 16:25:18 -07:00
William Casarin aa559b2916 Refactor and Scope user settings to pubkey 2023-04-21 16:21:01 -07:00
William Casarin 9bf8349db6 Friends filter for notifications
Changelog-Added: Friends filter for notifications
2023-04-21 14:17:37 -07:00
William Casarin 4c44de9276 Merge remote-tracking branch 'github/translations' 2023-04-21 11:27:35 -07:00
William Casarin aa5f8d19f7 build 7 2023-04-21 11:26:49 -07:00
William Casarin 040e452132 Fix having to set onlyzaps mode every time on restart
Changelog-Fixed: Fix having to set onlyzaps mode every time on restart
2023-04-21 10:01:32 -07:00
William Casarin ff41bb1b35 Update OnlyZaps wording: others can still pointlessly send you likes 2023-04-21 09:54:29 -07:00
transifex-integration[bot] efe231c122 Apply translations in nl [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'nl' language.
2023-04-21 16:52:37 +00:00
transifex-integration[bot] 0305712f65 Apply translations in es_419 [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'es_419' language.
2023-04-21 16:46:29 +00:00
William Casarin ba844aec97 Enable like button on OnlyZaps profiles for people who don't have OnlyZaps mode on
It seems like people still want to like posts even if the receiver isn't
going to see it.

Changelog-Changed: Enable like button on OnlyZaps profiles for people who don't have OnlyZaps mode on
2023-04-21 09:43:18 -07:00
transifex-integration[bot] 62eac0032f Apply translations in ja [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-21 16:43:06 +00:00
transifex-integration[bot] b673e9b43b Apply translations in cs [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-21 16:43:03 +00:00
transifex-integration[bot] 1dd274e07f Apply translations in pt_PT [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pt_PT' language.
2023-04-21 16:43:00 +00:00
transifex-integration[bot] e8aa52efea Apply translations in sv_SE [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'sv_SE' language.
2023-04-21 16:42:59 +00:00
transifex-integration[bot] c7f6db84dd Apply translations in pl_PL [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pl_PL' language.
2023-04-21 16:42:57 +00:00
transifex-integration[bot] 4a28ddefab Apply translations in el_GR [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'el_GR' language.
2023-04-21 16:42:53 +00:00
transifex-integration[bot] 3f4e37f1f8 Apply translations in zh_HK [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'zh_HK' language.
2023-04-21 16:42:49 +00:00
transifex-integration[bot] 9dc304aa04 Apply translations in zh_CN [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'zh_CN' language.
2023-04-21 16:42:45 +00:00
transifex-integration[bot] d3dd4faa42 Apply translations in vi [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'vi' language.
2023-04-21 16:42:42 +00:00
transifex-integration[bot] b40ee38895 Apply translations in ru [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ru' language.
2023-04-21 16:42:36 +00:00
transifex-integration[bot] fb9d1db6e6 Apply translations in ja [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ja' language.
2023-04-21 16:42:26 +00:00
transifex-integration[bot] 591cdd478e Apply translations in fr [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'fr' language.
2023-04-21 16:42:23 +00:00
transifex-integration[bot] b97204400f Apply translations in cs [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'cs' language.
2023-04-21 16:42:19 +00:00
transifex-integration[bot] ebfe00362c Apply translations in zh_TW [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'zh_TW' language.
2023-04-21 16:37:37 +00:00
transifex-integration[bot] accafb4cb2 Apply translations in zh_CN [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'zh_CN' language.
2023-04-21 16:37:34 +00:00
transifex-integration[bot] 20b124aa59 Apply translations in pt_BR [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'pt_BR' language.
2023-04-21 16:37:30 +00:00
transifex-integration[bot] 057bb2add5 Apply translations in de [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-21 16:37:24 +00:00
transifex-integration[bot] c1b31a9938 Apply translations in sv_SE [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-21 16:37:16 +00:00
transifex-integration[bot] 1e532f9e63 Apply translations in el_GR [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-21 16:37:12 +00:00
transifex-integration[bot] 16a7d5dedf Apply translations in pl_PL [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-21 16:37:08 +00:00
transifex-integration[bot] 8898bffbed Apply translations in hu_HU [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.
2023-04-21 16:37:04 +00:00
transifex-integration[bot] 7583346b06 Apply translations in zh_TW [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-21 16:37:00 +00:00
transifex-integration[bot] 8fbc71a2c2 Apply translations in zh_CN [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-21 16:36:56 +00:00
transifex-integration[bot] e100f8c313 Apply translations in ru [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ru' language.
2023-04-21 16:36:53 +00:00
transifex-integration[bot] 676c6f2afb Apply translations in pt_BR [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-21 16:36:49 +00:00
transifex-integration[bot] e7c66156d3 Apply translations in nl [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-21 16:36:45 +00:00
transifex-integration[bot] 99816695ae Apply translations in de [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-21 16:36:41 +00:00
transifex-integration[bot] 8e984ffa98 Apply translations in ar [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-21 16:36:37 +00:00
transifex-integration[bot] 61e4359164 Apply translations in zh_TW [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'zh_TW' language.
2023-04-21 16:36:33 +00:00
transifex-integration[bot] 71940aaca0 Apply translations in hu_HU [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'hu_HU' language.
2023-04-21 16:36:22 +00:00
transifex-integration[bot] 042237ace7 Apply translations in es_ES [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'es_ES' language.
2023-04-21 16:36:17 +00:00
transifex-integration[bot] b9c10d1eb1 Apply translations in pt_BR [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pt_BR' language.
2023-04-21 16:35:59 +00:00
transifex-integration[bot] 638b98624e Apply translations in ko [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ko' language.
2023-04-21 16:32:28 +00:00
transifex-integration[bot] c8224f841d Apply translations in de [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'de' language.
2023-04-21 16:32:25 +00:00
transifex-integration[bot] 18439bbdf9 Apply translations in ar [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ar' language.
2023-04-21 16:32:21 +00:00
transifex-integration[bot] 1fd7b759b1 Apply translations in zh_HK [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'zh_HK' language.
2023-04-21 16:32:12 +00:00
transifex-integration[bot] 0642abe064 Apply translations in zh_HK [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-21 16:32:06 +00:00
transifex-integration[bot] 080efda25e Apply translations in vi [Manual Sync]
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'vi' language.
2023-04-21 16:32:04 +00:00
William Casarin bbfe5380e0 Add onlyzap badges to usernames 2023-04-20 14:40:39 -07:00
William Casarin 8a20b7e4a7 Add #zaps and #onlyzaps to custom hashtags
Changelog-Added: Add #zaps and #onlyzaps to custom hashtags
2023-04-20 14:40:16 -07:00
William Casarin 191950a5aa Colorize friend icons
No reason why nip05 badges should have all the fun

Changelog-Added: Colorize friend icons
2023-04-20 14:30:27 -07:00
William Casarin ac82f1bc09 Add OnlyZaps Mode
Changelog-Added: Add OnlyZaps mode: disable reactions, only zaps!
2023-04-20 13:41:05 -07:00
William Casarin 209f3e8759 onlyzaps: Clean up reaction filter logic a bit 2023-04-20 11:23:58 -07:00
William Casarin 897621b5ed Don't fetch delete events 2023-04-20 08:23:56 -07:00
tyiu 66641fc9ae Add setting to hide reactions
Changelog-Added: Add setting to hide reactions
2023-04-20 08:20:50 -07:00
tyiu 681e0f0be9 Translations (#976)
* Apply translations in pt_PT

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pt_PT' language.

* Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

* Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

* Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in el_GR

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.

* Apply translations in hu_HU

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.

* Apply translations in es_419

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.

* Export strings for translation

* Apply translations in nl

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.

* Apply translations in sv_SE

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.

* Apply translations in ja

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.

* Apply translations in hu_HU

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.

* Apply translations in pl_PL

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_CN

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.

* Apply translations in zh_HK

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

* Apply translations in zh_TW

100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2023-04-20 08:16:23 -07:00
William Casarin 2ff12823f2 Don't nest embedded notes 2023-04-18 12:43:26 -07:00
William Casarin d6d996e84b Don't create spiral hellthreads 2023-04-18 12:38:16 -07:00
William Casarin d1fce5054d Implement quote reposting 2023-04-18 12:16:11 -07:00
William Casarin 300cd87fc2 Remove EmbeddedEventView
All embedded events are now just regular event views
2023-04-18 10:42:56 -07:00
tyiu bff3c0dd52 Improve sats numeric entry for zaps
Changelog-Changed: Add number formatting for sats entry and use selected zaps amount from picker as placeholder
Changelog-Fixed: Do not allow non-numeric characters for sats amount and fix numeric entry for other number systems for all locales
2023-04-17 15:20:14 -07:00
William Casarin ddd027141a no banner uploads yet :( 2023-04-17 15:18:57 -07:00
William Casarin 9b3e25dd6d v1.4.3-2 changelog 2023-04-17 14:58:44 -07:00
William Casarin 1ae6a3d871 v1.4.3-2 2023-04-17 14:29:50 -07:00
William Casarin 4821ba61a5 reply_p_tags: Use uniq instead of Set to preserve order 2023-04-17 14:29:32 -07:00
Swift 15849e290e Fixed repost turning green too early and not reposting sometimes
Changelog-Fixed: Fixed repost turning green too early and not reposting sometimes
2023-04-17 12:55:52 -07:00
Joshua Jiang 6ed562ed24 Fix shuffling when choosing users to reply to
Changelog-Fixed: Fix shuffling when choosing users to reply to
Co-authored-by: William Casarin <jb55@jb55.com>
Closes: #937
2023-04-17 12:55:22 -07:00
tyiu 93580e5296 Do not translate own notes if logged in with private key
If you're not the private key user, it's possible you're just lurking on
somebody's account and you might not speak their language, so you might
need translations.

Changelog-Fixed: Do not translate own notes if logged in with private key
Closes: #943
2023-04-17 11:06:50 -07:00
Swift a5c33e4431 Fix reply image previews appearing on new posts
Closes: #954
2023-04-17 11:00:51 -07:00
tyiu ad7a79c2bb Fix typo on ParticipantsView.swift file name
Closes: #945
2023-04-17 10:27:47 -07:00
William Casarin eaec3ae011 Merge remote-tracking branch 'github/translations' 2023-04-17 10:26:35 -07:00
William Casarin 5a1b966191 Only check inner_events on boosts 2023-04-17 10:19:47 -07:00
Gísli Kristjánsson a320fae2bc Load missing profiles from boosts on home view
Changelog-Fixed: Load missing profiles from boosts on home view
Closes: #947
2023-04-17 10:19:29 -07:00
Gísli Kristjánsson 8e0136a13a Load profiles for profile model
Changelog-Fixed: Load missing profiles from boosts on profile view
2023-04-17 10:17:59 -07:00
Gísli Kristjánsson 8f767b03ae fix: find inner_event profiles from events 2023-04-17 10:10:59 -07:00
Swift 209b23674d Add ability to copy url from post media previews 2023-04-17 10:10:41 -07:00
transifex-integration[bot] 86917dbd69 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-17 08:56:51 +00:00
transifex-integration[bot] 59daf555cd Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-17 08:56:06 +00:00
transifex-integration[bot] 916c7885f8 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-17 08:55:54 +00:00
transifex-integration[bot] 252763ea77 Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-17 08:55:31 +00:00
transifex-integration[bot] aa610c18b2 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-17 08:34:09 +00:00
transifex-integration[bot] 1de96a9dc5 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-17 05:07:03 +00:00
transifex-integration[bot] 746a4093de Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-16 19:27:10 +00:00
transifex-integration[bot] 5cc9288759 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.
2023-04-16 19:12:53 +00:00
transifex-integration[bot] 3bedc83764 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.
2023-04-16 19:12:32 +00:00
transifex-integration[bot] eb17e07478 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-16 17:42:10 +00:00
transifex-integration[bot] b96ae84068 Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-16 17:35:54 +00:00
transifex-integration[bot] af7d4d2c53 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-16 17:21:08 +00:00
tyiu d93a0600f3 Fix localization issues 2023-04-16 19:07:57 +02:00
transifex-integration[bot] e9e5756c94 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-16 17:01:24 +02:00
transifex-integration[bot] 0b3cc2092f Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-16 17:01:24 +02:00
transifex-integration[bot] 285ab11324 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-16 17:01:24 +02:00
transifex-integration[bot] 3610a76c55 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 4644c57bf3 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 33887982b0 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] c3d3db352e Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 8f08e5c4c8 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] e00e89c16b Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 9151ef02a0 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 709a707942 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 343b7a2bcc Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:23 +02:00
transifex-integration[bot] 6534ba3bde Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-16 17:01:22 +02:00
William Casarin 02fc065005 Always check signatures on profile events
These contain sensitive data (lightning addresses) and it would be
really bad if these were forged.

Changelog-Changed: Always check signatures of profile events
2023-04-15 16:01:00 -07:00
Bartholomew Joyce 668b0a94df cleanup nostr bech32 entity parsing
Closes: #911
2023-04-15 15:04:13 -07:00
William Casarin ebba9d3004 Fix broken notifications 2023-04-15 13:42:10 -07:00
William Casarin 8733a34933 v1.4.3-1 changelog 2023-04-15 12:57:42 -07:00
William Casarin 0de6cfe344 Merge remote-tracking branch 'github/translations' 2023-04-15 12:54:34 -07:00
William Casarin a4d40dbfa6 Revert "Changelog-Added: Banner Image Upload"
I didn't mean to commit this yet

This reverts commit 95041600dc.
2023-04-15 12:43:44 -07:00
Swift 05d332eac3 Add deep links for local notifications
Allow notifications to be clickable

Changelog-Added: Add deep links for local notifications
Co-authored-by: William Casarin <jb55@jb55.com>
Closes: #880
2023-04-15 12:41:49 -07:00
William Casarin b5a3697d78 Refactor direct messages model
We can track the pubkey in the DirectMessageModel instead of having a
janky tuple.
2023-04-15 12:41:00 -07:00
William Casarin 247270f3d3 Introduce LocalNotification
This will be used for local notification data
2023-04-15 12:40:00 -07:00
William Casarin 9327068264 ContentView: open thread helper 2023-04-15 12:38:05 -07:00
transifex-integration[bot] c277c14bcd Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-15 18:48:00 +00:00
transifex-integration[bot] e688a691fc Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-15 18:47:38 +00:00
transifex-integration[bot] b470af8f1d Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-15 18:47:29 +00:00
transifex-integration[bot] efd1168217 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-15 18:46:02 +00:00
transifex-integration[bot] f7a3f9ab76 Apply translations in hu_HU
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.
2023-04-15 17:55:34 +00:00
Joel Klabo 95041600dc Changelog-Added: Banner Image Upload 2023-04-15 10:28:17 -07:00
William Casarin 8a8d2ebbc3 PostView: change wording on upload confirmation 2023-04-15 10:26:36 -07:00
William Casarin fad0a6b783 PostView: remove ! unwrap for mediaToUpload 2023-04-15 10:22:05 -07:00
Swift f5d7465368 Ask permission before uploading media
Changelog-Changed: Ask permission before uploading media
Closes: #886
2023-04-15 10:19:53 -07:00
OlegAba 8a785559c6 Fix tap area when mentioning users
Changelog-Fixed: Fix tap area when mentioning users
Closes: #895
2023-04-15 10:16:40 -07:00
William Casarin d4c8c15cc3 Revert "Revert "Fix tap area when mentioning users""
This reverts commit 735376b00f.
2023-04-15 09:59:55 -07:00
Ryan Calder 41a462871c Enable Mac Catalyst
Closes: #926
2023-04-15 09:47:21 -07:00
William Casarin 76a669acc2 Show DM message in local notification
Changelog-Changed: Show DM message in local notification
2023-04-15 09:46:13 -07:00
William Casarin 39236dc094 remove verbose logs 2023-04-15 09:44:17 -07:00
transifex-integration[bot] 5860125802 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-15 10:29:15 +00:00
transifex-integration[bot] ae96c3b707 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-15 09:50:43 +00:00
transifex-integration[bot] 136f6f37e8 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-15 09:49:12 +00:00
transifex-integration[bot] 21f84f722b Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-15 09:49:04 +00:00
transifex-integration[bot] 47747379ee Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-15 09:48:02 +00:00
transifex-integration[bot] a1b95d40e6 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-15 09:43:47 +00:00
transifex-integration[bot] 0fc69d862a Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-15 09:36:45 +00:00
tyiu fb0330476d Export strings for translation 2023-04-15 01:32:07 +02:00
transifex-integration[bot] 4b978594fa Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-15 01:31:27 +02:00
William Casarin f0bbba7a33 Fix invalid DM author notifications
Changelog-Fixed: Fix invalid DM author notifications
2023-04-14 11:46:55 -07:00
William Casarin b5faae9d1c Make reposts use postbox 2023-04-14 11:46:55 -07:00
William Casarin a4d4954abd Fix relay signal indicator, properly show how many relays you are connected to
Changelog-Fixed: Fix relay signal indicator, properly show how many relays you are connected to
2023-04-14 11:46:55 -07:00
William Casarin 735376b00f Revert "Fix tap area when mentioning users"
This reverts commit a2cd51b6e7.
2023-04-14 11:36:45 -07:00
William Casarin 042e02d2e4 regression: unbreak dms 2023-04-14 10:33:50 -07:00
William Casarin 40468b1603 refactor: dms view init logic 2023-04-14 10:33:20 -07:00
William Casarin 8c19ec1532 small refactor to include_event 2023-04-14 09:54:54 -07:00
tyiu 1ac9620242 Add thread muting
Changelog-Added: Add thread muting
Closes: #893
2023-04-14 09:43:36 -07:00
Swift d5ecc9bce4 Preview media uploads when posting
Changelog-Added: Preview media uploads when posting
Closes: #894
2023-04-14 09:32:27 -07:00
William Casarin d82b69aac5 Merge remote-tracking branch 'github/translations' 2023-04-14 09:24:59 -07:00
William Casarin bad6ba3643 qrcode: don't default pubkey to "" 2023-04-14 09:23:14 -07:00
ericholguin 5c131e62d7 Add QR Code in profiles
Changelog-Added: Add QR Code in profiles
Closes: #918
2023-04-14 09:20:10 -07:00
William Casarin 29ab48287f start v1.4.3-1 build train 2023-04-14 09:20:10 -07:00
transifex-integration[bot] 5c854519db Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-14 14:15:46 +00:00
transifex-integration[bot] 2cc04e24a3 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-14 11:51:53 +00:00
transifex-integration[bot] d24bea366d Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-14 03:20:41 +00:00
transifex-integration[bot] 85ce8cb93c Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-13 18:44:01 +00:00
tyiu 32bb8c365d Export strings for translation 2023-04-13 18:37:58 +02:00
transifex-integration[bot] d9285ab3ca Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-13 18:33:59 +02:00
tyiu 3cba771655 Export strings for translation 2023-04-13 18:33:58 +02:00
tyiu f6f2517fda Merge French variant translations into general French translations 2023-04-13 18:33:58 +02:00
transifex-integration[bot] 047325e6b2 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-13 18:33:58 +02:00
transifex-integration[bot] ba2108d659 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'cs' language.
2023-04-13 18:33:58 +02:00
transifex-integration[bot] 863c7baa8b Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'cs' language.
2023-04-13 18:33:58 +02:00
transifex-integration[bot] 8a5e95e47a Apply translations in fr
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'fr' language.
2023-04-13 18:33:58 +02:00
transifex-integration[bot] de0997216d Apply translations in fr
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'fr' language.
2023-04-13 18:33:58 +02:00
transifex-integration[bot] cc64c82ec4 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] e2ca02399b Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] 5418f55cee Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] eb65d473cd Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] dd337c4805 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] 2f6ed72f6d Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] d71bb33408 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] 72cfb2b071 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:57 +02:00
transifex-integration[bot] a67cb2df90 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-13 18:33:56 +02:00
William Casarin 23e9ce1455 v1.4.2 changelog 2023-04-13 09:27:57 -07:00
William Casarin 5f1132cbc8 v1.4.2-2 2023-04-12 20:11:08 -07:00
William Casarin 806c6257df A few more performance tweaks 2023-04-12 20:09:51 -07:00
William Casarin 18aafb086e Revert "Make tabs easier to click"
This reverts commit 2a2af056eb.
2023-04-12 19:49:52 -07:00
William Casarin fc534ea42d Avoid slow string byte counting functions 2023-04-12 19:26:28 -07:00
William Casarin 54c8958250 Fix a few more hitches 2023-04-12 18:22:16 -07:00
William Casarin e9f71ed07c Load images asyncronously from disk
Changelog-Fixed: Fix hitches caused by syncronous loading of cached images
2023-04-12 13:34:21 -07:00
William Casarin c719058487 Revert "Remove duplicate share sheet action"
This reverts commit 2b34e88a47.
2023-04-12 11:26:41 -07:00
Luis Cabrera ab853c406c Display follows in most recent to oldest
Changelog-Changed: Display follows in most recent to oldest
2023-04-11 15:30:32 -07:00
William Casarin 8a88824677 Merge remote-tracking branch 'github/translations' 2023-04-11 15:22:26 -07:00
William Casarin 0b3918710a Include #btc in custom #bitcoin hashtag
Changelog-Added: Include #btc in custom #bitcoin hashtag
2023-04-11 15:16:57 -07:00
William Casarin 1320ff6bec Fix tabs sometimes not switching
This is the dumbest code I've ever written

Changelog-Fixed: Fix tabs sometimes not switching
2023-04-11 15:05:03 -07:00
William Casarin 10cab37270 remove unneeded id thingies 2023-04-11 14:54:33 -07:00
William Casarin 179da97090 cleanup some dubious code 2023-04-11 14:21:48 -07:00
William Casarin 2b2d124495 Configurable notification dots
Changelog-Added: Make notification dots configurable
2023-04-11 13:58:04 -07:00
William Casarin 2a2af056eb Make tabs easier to click
Changelog-Changed: Make tabs easier to click
2023-04-11 13:58:04 -07:00
William Casarin f56edd5547 switch to v1.4.2 train 2023-04-11 13:00:03 -07:00
William Casarin b30d0c01db nip19: allow empty relays in nprofile and nevent 2023-04-11 12:45:45 -07:00
William Casarin e8d63768c1 Fix note mention test 2023-04-11 10:27:11 -07:00
William Casarin 1f648057d5 Add another bech32 test 2023-04-11 10:23:34 -07:00
Bartholomew Joyce ea14099b62 Improved parsing of bech32 entities 2023-04-11 10:23:34 -07:00
William Casarin f5942f5123 build 9 2023-04-11 10:23:34 -07:00
William Casarin cb8585e4f8 Fix naddr crash 2023-04-11 10:03:48 -07:00
transifex-integration[bot] 526689c742 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:41:40 +00:00
transifex-integration[bot] 32a9856e2a Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:41:37 +00:00
transifex-integration[bot] 6082a2829f Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:41:16 +00:00
transifex-integration[bot] b3f6b451bf Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:41:14 +00:00
transifex-integration[bot] 91d51c5e76 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:41:02 +00:00
transifex-integration[bot] 3262fe806a Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:40:53 +00:00
transifex-integration[bot] d04e9c9b5f Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:40:42 +00:00
transifex-integration[bot] 015eb5f9fe Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:40:36 +00:00
transifex-integration[bot] 4a525a7581 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:40:27 +00:00
transifex-integration[bot] 72e14fc3a8 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:33:08 +00:00
transifex-integration[bot] af275965ee Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:32:42 +00:00
transifex-integration[bot] 9f5913828a Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-11 12:32:30 +00:00
transifex-integration[bot] c7c21cdee7 Apply translations in hu_HU
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'hu_HU' language.
2023-04-11 09:01:19 +00:00
William Casarin 44a2c4ba7b v1.4.1-8 changelog 2023-04-10 16:13:43 -07:00
William Casarin a74aea9d12 v1.4.1-8 2023-04-10 16:12:26 -07:00
William Casarin 0866c70346 Fix tests 2023-04-10 16:09:43 -07:00
William Casarin 2b34e88a47 Remove duplicate share sheet action 2023-04-10 10:02:20 -07:00
William Casarin 2aa8d527b9 Don't leak mentions in DMs
Changelog-Fixed: Don't leak mentions in DMs
2023-04-10 09:31:26 -07:00
transifex-integration[bot] 88cbb55953 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-10 15:26:20 +00:00
transifex-integration[bot] e738c6c1ca Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-10 15:26:08 +00:00
transifex-integration[bot] f4e0c8df5c Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'ko' language.
2023-04-10 15:17:52 +00:00
transifex-integration[bot] 269269d056 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ko' language.
2023-04-10 15:14:51 +00:00
transifex-integration[bot] fd49539615 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ko' language.
2023-04-10 15:14:36 +00:00
transifex-integration[bot] dbb5c19002 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ko' language.
2023-04-10 15:14:28 +00:00
transifex-integration[bot] 6961113734 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ko' language.
2023-04-10 15:14:11 +00:00
transifex-integration[bot] 4642656ce2 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ko' language.
2023-04-10 14:24:40 +00:00
transifex-integration[bot] 0c2132b122 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ko' language.
2023-04-10 14:24:14 +00:00
transifex-integration[bot] a1311a940a Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ko' language.
2023-04-10 14:22:27 +00:00
transifex-integration[bot] af18975240 Apply translations in ko
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ko' language.
2023-04-10 14:22:15 +00:00
William Casarin f500da03e8 nip27: handle nrelay a bit better 2023-04-09 22:45:38 -07:00
William Casarin 8a230861bf remove broken test 2023-04-09 22:45:21 -07:00
William Casarin 13354b0eb5 Refactor NIP19 implementation and add tests
Closes: #837
2023-04-09 22:03:51 -07:00
Bartholomew Joyce c6f4643b5a Add support for nostr: bech32 urls in posts and DMs (NIP19)
Changelog-Added: Add support for nostr: bech32 urls in posts and DMs (NIP19)
2023-04-09 22:03:27 -07:00
transifex-integration[bot] ee34b1c0a3 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-10 01:12:21 +00:00
OlegAba a2cd51b6e7 Fix tap area when mentioning users
Changelog-Fixed: Fix tap area when mentioning users
Closes: #895
2023-04-09 16:17:57 -07:00
transifex-integration[bot] 831a409fe6 Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pt_BR' language.
2023-04-09 14:48:54 +00:00
transifex-integration[bot] 11e22628bb Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pt_BR' language.
2023-04-09 14:47:54 +00:00
transifex-integration[bot] 6598b5b4bb Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:16 -04:00
transifex-integration[bot] ca293ef29b Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:16 -04:00
transifex-integration[bot] 8051324d3e Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] a11cf66088 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] a10142d3b9 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] 83fcd8600a Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] 6283157ef4 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] 8b2f45da41 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] ed467a2f79 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] feace9b70d Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] 62bccd6b60 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_419' language.
2023-04-08 20:05:15 -04:00
transifex-integration[bot] 6f4d12cab4 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 436fe830c7 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 69b6d54b0e Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 13522028ba Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 1459581ec9 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 31aedd2a6e Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] bb1dff13ce Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 3b8c884b30 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-08 20:05:14 -04:00
transifex-integration[bot] 30299fafed Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-08 20:05:13 -04:00
William Casarin 46c208c9a5 v1.4.1-7 changelog 2023-04-07 12:15:34 -07:00
William Casarin 8e78bf9e1a v1.4.1-7 2023-04-07 12:14:57 -07:00
William Casarin 82fff4591c Add #zap and #zapathon custom hashtags
Changelog-Added: Add #zap and #zapathon custom hashtags
2023-04-07 12:05:54 -07:00
OlegAba b8226d674d Fix post view padding
Changelog-Fixed: Fix padding in post view
Closes: #879
2023-04-07 11:33:52 -07:00
tyiu 3f3892ba1d Add validation to prevent whitespaces be inputted on NIP-05 input field
Changelog-Changed: Add validation to prevent whitespaces be inputted on NIP-05 input field
Closes: #793
2023-04-07 11:22:38 -07:00
Bryan Montz 1b6224e665 Show most recently bookmarked notes at the top
Changelog-Fixed: Show most recently bookmarked notes at the top
Closes: #854
2023-04-07 11:21:42 -07:00
William Casarin 782f8d6a69 Change reply color from blue to purple. Blue is banned from Damus.
Changelog-Changed: Change reply color from blue to purple. Blue is banned from Damus.
2023-04-07 10:49:33 -07:00
Joel Klabo 9ad6af0e4f Fix Edit Profile Background Colors 2023-04-07 10:37:59 -07:00
William Casarin e16ea0f4dc Merge remote-tracking branch 'github/translations' 2023-04-07 10:15:53 -07:00
William Casarin 5b1808d8e7 Add custom #plebchain icon
Changelog-Added: Add custom #plebchain icon
2023-04-07 10:10:13 -07:00
transifex-integration[bot] d50b2deb26 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-07 07:09:24 +00:00
transifex-integration[bot] 9de4730e17 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-07 06:14:30 +00:00
transifex-integration[bot] 382265dd39 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-07 06:13:13 +00:00
tyiu 6c7f8cdbe5 Fix localization issues and export strings for translation 2023-04-06 21:05:53 -04:00
William Casarin 36a92b3795 v1.4.1-6 changelog 2023-04-06 17:41:34 -07:00
William Casarin 6d4d218c28 v1.4.1-6 2023-04-06 17:39:41 -07:00
transifex-integration[bot] 8679da1275 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] 59dcbc130c Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] badd3210e5 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] dd6cc3cf4f Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] 36a0ca9c80 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] a7d3b19665 Apply translations in vi
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'vi' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] 226e567987 Apply translations in vi
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'vi' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] 898ffc0186 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] 4d0f7b576b Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-06 20:38:48 -04:00
transifex-integration[bot] 230d049384 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-06 20:38:47 -04:00
transifex-integration[bot] 774a4173b0 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-06 20:38:47 -04:00
transifex-integration[bot] f8b5d91720 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-06 20:38:47 -04:00
transifex-integration[bot] 0832c82ee8 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-04-06 20:38:46 -04:00
William Casarin 4786c6f0cb Don't show Translating... if we're not actually translating
Changelog-Fixed: Don't show Translating... if we're not actually translating
2023-04-06 17:33:01 -07:00
William Casarin 8d0aea22fd Custom hashtag offsets
This allows you to tweak the positioning a bit
2023-04-06 17:28:43 -07:00
William Casarin 3d27e49e70 Add custom #nostr and #coffeechain hashtags
Changelog-Added: Custom hashtags for #nostr and #coffeechain
2023-04-06 17:09:50 -07:00
William Casarin e9be227009 Add bitcoin icon to bitcoin hashtags
Changelog-Added: Add bitcoin icon to bitcoin hashtags
2023-04-06 16:04:16 -07:00
William Casarin 2e640db012 Make bitcoin hashtag orange 2023-04-06 12:10:39 -07:00
William Casarin eed16449fe oops, we're on build 5 2023-04-06 12:10:31 -07:00
William Casarin 3661d64450 regression: remove action bar from DM view 2023-04-06 12:10:17 -07:00
William Casarin 24c82293b3 Disable translations in DMs by default
There is an option to enable it now.

Changelog-Changed: Disable translations in DMs by default
2023-04-06 12:07:01 -07:00
William Casarin 7fb1bc48c4 rename NostrBuild to nostr.build
Closes: #883
2023-04-06 11:05:51 -07:00
William Casarin 2ae4a156da Make sure we only update translation cache on main thread 2023-04-06 10:39:01 -07:00
William Casarin f700dd799f v1.4.1-4 changelog 2023-04-06 10:31:52 -07:00
William Casarin 00548adc1f v1.4.1-4 2023-04-06 10:31:20 -07:00
William Casarin 7c08d4af45 perf: cache note artifacts 2023-04-06 10:27:15 -07:00
William Casarin c7bf1da797 perf: cache lnurl to avoid bech32 encoding on the main thread 2023-04-06 10:26:51 -07:00
William Casarin c5341ba337 Cache translations, fix translation popping
Completely refactor Translate View. Simplify bool logic into a state enum.

Changelog-Fixed: Fix translation text popping
Changelog-Added: Cache translations
2023-04-06 10:16:53 -07:00
William Casarin 95fb7bccf8 Merge remote-tracking branch 'github/translations' 2023-04-06 08:35:24 -07:00
William Casarin 6499738994 Fix auto-translations
Changelog-Fixed: Fix broken auto-translations
2023-04-06 08:27:27 -07:00
William Casarin 532eaa35bf pointless refactors 2023-04-06 08:27:27 -07:00
tyiu 9c1bb30f5f Localization fix and export translations 2023-04-06 10:47:51 -04:00
transifex-integration[bot] 4683b417b9 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pl_PL' language.
2023-04-06 10:42:42 -04:00
transifex-integration[bot] 2176b58215 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_TW' language.
2023-04-06 10:42:42 -04:00
transifex-integration[bot] 3c7627bb9a Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_HK' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] 463ca5ce7b Apply translations in fr_FR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'fr_FR' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] b6a0626890 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] dbfad189cb Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] 8159213ef0 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'zh_CN' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] 684841c03a Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] e429bd7df9 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] 45ebcf565a Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] c031b08c9a Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:41 -04:00
transifex-integration[bot] d98503732e Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] bfe0a39370 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] 36de599326 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] 3cbdfb7ddf Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] ddd309634f Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] 6bbf56f80c Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] de1332d6ea Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] 648f25ea7a Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] b46dc04ae8 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:40 -04:00
transifex-integration[bot] 8cabfaf90e Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] 0b02956bb7 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] 4abea02d6e Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'pt_BR' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] 5d20c49f7d Apply translations in pt_BR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pt_BR' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] c11e0fa919 Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'sv_SE' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] 54bfeb04da Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] 214eec9cb6 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] b48de9525e Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 10:42:39 -04:00
transifex-integration[bot] 690f3ec740 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 10:42:39 -04:00
tyiu 6df4ffc1f0 Export translations 2023-04-06 10:42:38 -04:00
transifex-integration[bot] 83cead1fbb Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ja' language.
2023-04-06 10:42:38 -04:00
transifex-integration[bot] 478600cf0e Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:38 -04:00
transifex-integration[bot] 75002802fa Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:38 -04:00
transifex-integration[bot] faf072d432 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'de' language.
2023-04-06 10:42:38 -04:00
transifex-integration[bot] e888da26a7 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'nl' language.
2023-04-06 10:42:38 -04:00
William Casarin b532dc48e1 Also trim whitespace before single note refs 2023-04-05 13:30:05 -07:00
William Casarin 7bf18336d0 Fix extraneous padding on some image posts
Changelog-Fixed: Fix extraneous padding on some image posts
2023-04-05 13:12:56 -07:00
William Casarin b131c74ee3 Add prefix and suffix string trimming functions
This is needed to fix extraneous whitespace issues in image posts
2023-04-05 12:48:03 -07:00
William Casarin b9fed6e4eb Fix crash in relay list view
Changelog-Fixed: Fix crash in relay list view
2023-04-05 12:33:08 -07:00
William Casarin 6910e84fd8 regression: fix show nsec button 2023-04-05 11:26:27 -07:00
William Casarin 5f0c1a59e6 v1.4.1-3 changelog 2023-04-05 11:16:30 -07:00
William Casarin d8a9efc6e2 v1.4.1-3 2023-04-05 11:15:51 -07:00
William Casarin 185732a633 Change reply color from red to blue 2023-04-05 11:15:19 -07:00
Joel Klabo b585e8c21c Add Padding to Attachment Icons 2023-04-05 10:42:10 -07:00
mainvolume b14858b4b1 Improve display logic for images
Changelog-Fixed: Reduce chopping of images
Closes: #869
2023-04-05 10:39:59 -07:00
William Casarin f236ea52e1 Implement additional text truncation settings
Changelog-Added: Added text truncation settings
2023-04-05 10:32:32 -07:00
William Casarin 9c8391b33b Refactor settings into subsections 2023-04-05 10:23:07 -07:00
William Casarin 89b2382ad7 Rename block to mute
Changelog-Changed: Rename block to mute
2023-04-05 08:53:21 -07:00
William Casarin 2ce0a771ea refactor: move notification settings to its own file 2023-04-05 08:49:15 -07:00
William Casarin 0436c68ec5 Fix some notification settings not saving
Changelog-Fixed: Fix some notification settings not saving
2023-04-05 08:43:52 -07:00
Joel Klabo 88740a2bc7 Fix Camera Uploads Again
Changelog-Fixed: Fix broken camera uploads (again)
2023-04-05 08:35:34 -07:00
William Casarin e3f578e48a changelog: include improved square image display entry 2023-04-04 20:16:23 -07:00
William Casarin 39788bd590 v1.4.1-2 changelog 2023-04-04 20:11:35 -07:00
William Casarin 8c2c8e283f v1.4.1-2 2023-04-04 20:11:35 -07:00
William Casarin 8a473885c7 Don't add https:// prefix to empty website urls 2023-04-04 20:11:35 -07:00
William Casarin ba1c2cd2b9 Fix broken website links that have missing https:// prefixes
Changelog-Fixed: Fix broken website links that have missing https:// prefixes
2023-04-04 14:20:27 -07:00
William Casarin bedf7e0648 Add reply counts
Changelog-Added: Reply counts
2023-04-04 12:03:56 -07:00
William Casarin 14802e334d Fix crash in image carousel 2023-04-04 12:03:56 -07:00
William Casarin 98d11fb71e Show full bleed images on selected events in threads
Changelog-Changed: Show full bleed images on selected events in threads
2023-04-04 10:58:16 -07:00
William Casarin 9ca959d8d3 Allow image size to adjust even if we have it cached 2023-04-04 10:45:05 -07:00
Bryan Montz 584a20ade1 Don't show NIP-05 validation error message when field is empty
Closes: #852
2023-04-04 10:32:30 -07:00
William Casarin 67041b22f4 refactor: simplify calculate_image_fill argument 2023-04-04 10:25:56 -07:00
mainvolume 825a2f944f Improvement to square image displaying.
Closes: #864
2023-04-04 10:25:45 -07:00
William Casarin 1aa70efee0 Merge remote-tracking branch 'github/translations' 2023-04-04 10:23:29 -07:00
Swift e2812a9aa1 Add option to only show notification from people you follow
Changelog-Added: Add option to only show notification from people you follow
Closes: #866
2023-04-04 10:22:41 -07:00
William Casarin 679779ab3e Get around CCP bootstrap relay banning by caching user's relays as their bootstrap relays
Changelog-Fixed: Get around CCP bootstrap relay banning by caching user's relays as their bootstrap relays
2023-04-04 10:12:29 -07:00
transifex-integration[bot] 98a630248e Apply translations in vi
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'vi' language.
2023-04-04 15:16:56 +00:00
tyiu 2f4e33fc9f Fix localization issues and export strings for translation 2023-04-04 10:26:02 -04:00
transifex-integration[bot] ddf60e78b9 Apply translations in hu_HU
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'hu_HU' language.
2023-04-04 12:36:37 +00:00
transifex-integration[bot] 08badfc746 Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'ar' language.
2023-04-04 00:29:32 -04:00
transifex-integration[bot] 6dfc39e1ed Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ar' language.
2023-04-04 00:29:31 -04:00
transifex-integration[bot] 6655b6ac9d Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ar' language.
2023-04-04 00:29:31 -04:00
transifex-integration[bot] c81c14a761 Apply translations in ar
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'ar' language.
2023-04-04 00:29:30 -04:00
William Casarin 3da12e708f Only show translate button if autotranslate is off 2023-04-03 17:44:08 -07:00
William Casarin 3d97dc593e Simplify notification settings 2023-04-03 17:21:49 -07:00
William Casarin c6e5193111 Don't show translation status
It's too poppy
2023-04-03 17:12:10 -07:00
Swift 61ef709d91 Local notifications for other events
Changelog-Added: Added local notifications for other events
2023-04-03 16:38:39 -07:00
William Casarin f6133814e8 Merge remote-tracking branch 'github/translations' 2023-04-03 16:28:23 -07:00
ericholguin 1701dbdfb9 Add an empty view when a tagged user isnt found
Changelog-Added: Show a custom view when tagged user isn't found
2023-04-03 16:23:04 -07:00
William Casarin 8fe8611527 Add missing padding on notifications view 2023-04-03 15:43:14 -07:00
William Casarin 41f692a0c4 Cache fit/fill as well as height 2023-04-03 15:07:32 -07:00
William Casarin e0d4841147 Cache image heights to reduce popping 2023-04-03 15:02:35 -07:00
William Casarin 1bf171a09e Show referenced notes in DMs
Changelog-Added: Show referenced notes in DMs
2023-04-03 14:57:20 -07:00
William Casarin c5f3a8e509 v1.4.1 + changelog 2023-04-03 14:02:09 -07:00
William Casarin 02c973fbb2 Replace Divider with ThiccDivider 2023-04-03 13:57:57 -07:00
William Casarin 4996272942 Only truncate timeline text if enabled in settings
Changelog-Changed: Only truncate timeline text if enabled in settings
2023-04-03 11:30:05 -07:00
William Casarin 094f63bcff Make mentions wide in notifications like in timeline
Changelog-Changed: Make mentions wide in notifications like in timeline
2023-04-03 11:22:32 -07:00
William Casarin f9339440f2 Truncate long text in notification items
Changelog-Fixed: Truncate long text in notification items
2023-04-03 11:21:52 -07:00
William Casarin 997bc38885 Remove padding at top of divider on reply attachment bar 2023-04-03 11:11:51 -07:00
William Casarin b9d62e300b Restore missing reply description on selected events
Changelog-Fixed: Restore missing reply description on selected events
2023-04-03 10:21:11 -07:00
transifex-integration[bot] 1282b8f5f6 Apply translations in pl_PL
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'pl_PL' language.
2023-04-03 16:58:12 +00:00
William Casarin 127f1e07e3 Broadcast events you are replying to
Changelog-Changed: Broadcast events you are replying to
2023-04-03 09:54:56 -07:00
William Casarin cc190c3618 Also broadcast event's user profile
This should help propagation of user profiles

Changelog-Changed: Broadcast now also broadcasts event user's profile
2023-04-03 09:47:15 -07:00
Joel Klabo c9c51c6d4a Profile Picture Upload
Changelog-Added: Profile Picture Upload
Closes: #849
2023-04-03 09:37:10 -07:00
William Casarin b63159a29f Fix another crash in dynamic height calculation 2023-04-03 09:37:10 -07:00
William Casarin 647c6f8428 Refactor dynamic image height and fix crashing 2023-04-03 09:22:48 -07:00
transifex-integration[bot] c8f5a2cffc Apply translations in sv_SE
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'sv_SE' language.
2023-04-03 11:40:52 +00:00
transifex-integration[bot] 65e22ea0dc Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'el_GR' language.
2023-04-02 18:27:14 -04:00
transifex-integration[bot] e6ce0ef8a3 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'el_GR' language.
2023-04-02 18:27:14 -04:00
transifex-integration[bot] 5c949ea0c2 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'el_GR' language.
2023-04-02 18:27:14 -04:00
transifex-integration[bot] 4881d41831 Apply translations in el_GR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'el_GR' language.
2023-04-02 18:27:13 -04:00
transifex-integration[bot] af7177c436 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ja' language.
2023-04-02 18:27:13 -04:00
transifex-integration[bot] 26cf0380c0 Apply translations in ja
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ja' language.
2023-04-02 18:27:13 -04:00
transifex-integration[bot] 499e3f6fd4 Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'de' language.
2023-04-02 18:27:13 -04:00
transifex-integration[bot] 82b237754a Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'de' language.
2023-04-02 18:27:13 -04:00
mainvolume 0608222cb0 Dynamic Image View
A dynamic image modifier to adjust height from image format and ratio
2023-04-02 14:12:25 -07:00
William Casarin b83204898b add .rgignore 2023-04-02 09:07:20 -07:00
ericholguin 0dd74fde7f Improve reply view
Changelog-Changed: Improved look of reply view
2023-04-02 08:30:38 -07:00
Joel Klabo 7a55ea13e3 Save Camera Images Locally Then Upload
Closes: #847
2023-04-02 08:23:12 -07:00
William Casarin 2815827b9f Show sent DMs immediately
Now that we have a postbox abstraction, we can show DMs immediately. We
probably need an indicator on if it was delivered or not.

Changelog-Fixed: Show sent DMs immediately
2023-03-31 15:25:19 -07:00
William Casarin 4ac3e71039 Fix OK decoding 2023-03-31 15:22:11 -07:00
William Casarin 2596542cb6 Enable offline posting
You can now post, like, repost, reply offline

Changelog-Added: Enable offline posting
2023-03-31 15:14:55 -07:00
William Casarin 915f3901a7 Merge remote-tracking branch 'github/translations' 2023-03-31 10:30:02 -07:00
ericholguin 39f39c7382 Remove gradient in some places for visibility
Changelog-Changed: Remove gradient in some places for visibility
2023-03-31 10:12:11 -07:00
William Casarin f2ce146e98 Revert "Refactor auto-translations and add caching"
There are quite a few issues with this and is causing crashing

This reverts commit ae82114a33.
2023-03-31 10:01:31 -07:00
William Casarin 9ba3543d91 Fixed size of translated text
Changelog-Fixed: Fixed size of translated text
2023-03-31 09:26:39 -07:00
transifex-integration[bot] dec5de83b9 Apply translations in zh_HK
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'zh_HK' language.
2023-03-31 16:17:44 +00:00
transifex-integration[bot] ab6ec18e35 Apply translations in zh_TW
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'zh_TW' language.
2023-03-31 16:13:58 +00:00
tyiu 35ee2f5744 Replace deprecated UNNotificationPresentationOptions.alert with .banner and .list
Closes: #844
2023-03-31 09:07:51 -07:00
William Casarin 42e6281e9b Fix crash when reposting
Changelog-Fixed: Fix crash when reposting
2023-03-31 09:07:51 -07:00
tyiu ae82114a33 Refactor auto-translations and add caching
Changelog-Added: Add auto-translation caching to ruduce api usage
Closes: #843
2023-03-31 09:07:15 -07:00
transifex-integration[bot] 87d1cd9095 Apply translations in zh_CN
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'zh_CN' language.
2023-03-31 16:06:38 +00:00
transifex-integration[bot] 2d679bf087 Apply translations in vi
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'vi' language.
2023-03-31 15:57:28 +00:00
transifex-integration[bot] aaa6eb013a Apply translations in vi
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'vi' language.
2023-03-31 15:56:37 +00:00
transifex-integration[bot] fce689f0ef Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'cs' language.
2023-03-31 15:54:10 +00:00
transifex-integration[bot] 89f33be4cf Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'cs' language.
2023-03-31 15:51:19 +00:00
transifex-integration[bot] 96b6929235 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'es_ES' language.
2023-03-31 15:48:00 +00:00
transifex-integration[bot] a811a12da3 Apply translations in cs
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'cs' language.
2023-03-31 15:46:59 +00:00
transifex-integration[bot] 8edb1f289d Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.stringsdict'
on the 'es_ES' language.
2023-03-31 15:43:48 +00:00
transifex-integration[bot] cdbd8f2722 Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-03-31 15:39:10 +00:00
transifex-integration[bot] 069a8f52ca Apply translations in es_ES
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings'
on the 'es_ES' language.
2023-03-31 15:38:42 +00:00
transifex-integration[bot] 7664985768 Apply translations in fr_FR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'fr_FR' language.
2023-03-31 15:25:22 +00:00
transifex-integration[bot] a77b0e1bbc Apply translations in fr_FR
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'fr_FR' language.
2023-03-31 15:25:15 +00:00
transifex-integration[bot] d8e516841e Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'de' language.
2023-03-31 14:39:49 +00:00
transifex-integration[bot] dc33ad962d Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'de' language.
2023-03-31 14:39:41 +00:00
transifex-integration[bot] f7eae9275f Apply translations in ru
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ru' language.
2023-03-31 14:38:48 +00:00
transifex-integration[bot] e5adbb2fee Apply translations in ru
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'ru' language.
2023-03-31 14:37:49 +00:00
transifex-integration[bot] 88d26dc4c2 Apply translations in fr_CA
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'fr_CA' language.
2023-03-31 14:34:06 +00:00
transifex-integration[bot] 4d71297941 Apply translations in nl
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'nl' language.
2023-03-31 14:21:30 +00:00
transifex-integration[bot] 21ba936c72 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'es_419' language.
2023-03-31 14:19:37 +00:00
transifex-integration[bot] 04fa8f1805 Apply translations in es_419
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'es_419' language.
2023-03-31 14:19:29 +00:00
transifex-integration[bot] 3076e6ee7f Apply translations in de
100% translated for the source file 'damus/en-US.xcloc/Source Contents/damus/en-US.lproj/InfoPlist.strings'
on the 'de' language.
2023-03-31 14:18:05 +00:00
tyiu 08b7e50bd8 Fix localization issues and import translations 2023-03-31 10:10:26 -04:00
Swift 5a238502cb Support gif uploads!
Changelog-Added: Added support for gif uploads
Closes: #827
2023-03-30 12:51:07 -04:00
OlegAba b0aac1fc42 Fix unclickable image dismiss button
Changelog-Fixed: Fix unclickable image dismiss button
Closes: #833
2023-03-30 12:39:30 -04:00
OlegAba 72b51a81de Move and rename pfp image view 2023-03-30 12:37:33 -04:00
Joel Klabo 8ec1fa29b1 Add a Divider in the Follows List for Large Screens
Changelog-Added: Add a Divider in the Follows List for Large Screens
Closes: #838
2023-03-30 12:36:39 -04:00
Joel Klabo 81683f980a Allow Uploading Photos and Videos from Camera
Changelog-Added: Upload Photos and Videos from Camera
Closes: #840
2023-03-30 12:34:57 -04:00
William Casarin b9fc3f90d1 Fix unfollow button color 2023-03-30 12:28:54 -04:00
William Casarin 695699aa10 Fix broken npub searching 2023-03-30 12:26:06 -04:00
William Casarin 0a4e75bfec Add nip05 search
Changelog-Added: Added ability to lookup users by nip05 identifiers
2023-03-29 19:24:06 -04:00
William Casarin 9fef2f071a v1.4.0 2023-03-27 17:48:40 -04:00
William Casarin c03b4cac11 Zap Notifications: Include who it's from and message 2023-03-27 17:48:40 -04:00
Swift b773df1204 Local Zap Notifications
Changelog-Added: Local zap notifications
2023-03-27 15:50:00 -04:00
William Casarin c7a34379dd Merge remote-tracking branch 'github/translations' 2023-03-27 12:42:59 -04:00
William Casarin eabf37e35c Refactor damus color references 2023-03-27 12:39:38 -04:00
Bryan Montz e11147b217 Simplify grey colors with an adaptable color in xcassets
Closes: #805
2023-03-27 12:39:13 -04:00
William Casarin 7674f42596 Damus Colors Helper 2023-03-27 12:26:30 -04:00
William Casarin 8c37c8f008 Add some padding to the ReplyView 2023-03-27 12:16:39 -04:00
William Casarin 74dbbcf1a2 Fix image uploading 2023-03-27 12:15:24 -04:00
William Casarin e3283fc8f8 Merge remote-tracking branch 'eric/relay-config-changes' 2023-03-27 11:47:23 -04:00
William Casarin 54fdcd1c84 Small refactor for video uploader 2023-03-27 11:31:10 -04:00
Swift 5e0ff1a6a0 Video Uploads
Changelog-Added: Add support for video uploads
2023-03-27 11:30:58 -04:00
tyiu 6517dcba3f Fixed small notification hit boxes
Changelog-Fixed: Fixed small notification hit boxes
2023-03-27 11:14:04 -04:00
William Casarin 63e28d4d79 Enable auto-translate by default 2023-03-27 10:44:19 -04:00
tyiu e5c0400b54 Merge remote-tracking branch 'terry/tyiu/filter-language'
Changelog-Added: Auto Translation
2023-03-27 10:43:40 -04:00
William Casarin c6c47e824a reduce code duplication in nip05 gradients 2023-03-27 10:39:07 -04:00
tyiu 866e93d338 Add auto-translate setting 2023-03-27 10:31:58 -04:00
tyiu f75fc7eebe Add optional language filter on Universe feed 2023-03-27 10:26:18 -04:00
William Casarin d19596c17e Merge remote-tracking branch 'eric/gradient-all-the-things' 2023-03-27 10:22:01 -04:00
ericholguin 00da97307e remove unused nip05 color function 2023-03-25 14:34:48 -06:00
ericholguin 312c798bb5 use gradient on alert circle 2023-03-25 14:34:29 -06:00
ericholguin 7110650267 use gradient on cancel button 2023-03-25 14:34:04 -06:00
ericholguin 242c1011d9 use gradient on shaka 2023-03-25 14:33:06 -06:00
ericholguin e203eece85 use gradient on website link 2023-03-25 14:32:04 -06:00
ericholguin 1b60524070 use gradient on nip05 badge 2023-03-25 14:31:28 -06:00
ericholguin d15a2f0401 update icons 2023-03-25 08:22:19 -06:00
tyiu fd596241a2 Fix localization issues, import translations, and add Spanish (Spain), Vietnamese, and Portuguese (Brazil) 2023-03-24 22:31:20 -06:00
ericholguin b2ee924692 add button to make relay adds more obvious 2023-03-23 23:56:31 -06:00
ericholguin 6fc70748fe connect or disconnect from relay detail view 2023-03-23 23:56:04 -06:00
ericholguin 5e972dbf2d Use more recognized icons 2023-03-23 23:55:40 -06:00
ericholguin 4ebdd01b6c use bitcoin logo instead of dirty fiat 2023-03-23 23:55:14 -06:00
ericholguin 13c0c0d679 made relay addition more obvious 2023-03-23 23:54:42 -06:00
ericholguin 8297859f18 made relay removal more obvious 2023-03-23 23:54:22 -06:00
ericholguin e996d5703b buttons moved to relay config view to be outside of form 2023-03-23 23:53:35 -06:00
ericholguin dfc397337b view changes, added more obvious buttons, add relay in same view 2023-03-23 23:52:47 -06:00
1500 changed files with 109002 additions and 11736 deletions
-31
View File
@@ -1,31 +0,0 @@
name: Run Test Suite
run-name: Testing ${{ github.ref }} by @${{ github.actor }}
on:
push:
branches:
- "master"
pull_request:
branches:
- "*"
jobs:
run_tests:
runs-on: macos-12
strategy:
matrix:
include:
- xcode: "14.2"
ios: "16.2"
name: Test iOS (${{ matrix.ios }})
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Select Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.xcode }}
- name: Run Tests
run: xcodebuild test -scheme damus -project damus.xcodeproj -destination 'platform=iOS Simulator,name=iPhone 14,OS=${{ matrix.ios }}' | xcpretty && exit ${PIPESTATUS[0]}
+3
View File
@@ -1,5 +1,8 @@
xcuserdata
/.direnv
damus/TestingPrivate.swift
damus.xcodeproj/xcshareddata/xcbaselines
.DS_Store
TODO.bak
tags
build-git-hash.txt
+6
View File
@@ -0,0 +1,6 @@
Terry Yiu <git@tyiu.xyz> <963907+tyiu@users.noreply.github.com>
Ben Weeks <ben.weeks@knowall.ai> <ben.weeks@outlook.com>
Suhail Saqan <suhail.saqan@gmail.com> <43693074+suhailsaqan@users.noreply.github.com>
cr0bar <cr0bar@cr0.bar> <cr0bar@users.noreply.github.com>
Swift <scoder1747@gmail.com> <120697811+scoder1747@users.noreply.github.com>
Daniel D'Aquino <daniel@daquino.me> <patches@damus.io>
+2
View File
@@ -0,0 +1,2 @@
translations/
*.lproj/
+850 -4
View File
@@ -1,3 +1,829 @@
## [1.6-25] - 2023-10-31
### Added
- Tap to dismiss keyboard on user status view (ericholguin)
- Add setting that allows users to optionally disable the new profile action sheet feature (Daniel DAquino)
- Add follow button to profile action sheet (Daniel DAquino)
- Added reaction counters to nostrdb (William Casarin)
- Record when profile is last fetched in nostrdb (William Casarin)
### Changed
- Automatically load extra regional Japanese relays during account creation if user's region is set to Japan. (Daniel DAquino)
- Updated customize zap view (ericholguin)
- Users are now notified when you quote repost them (William Casarin)
- Save bandwidth by only fetching new profiles after a certain amount of time (William Casarin)
- Zap button on profile action sheet now zaps with a single click, while a long press brings custom zap view (Daniel DAquino)
### Fixed
- Use white font color in qrcode view (ericholguin)
- Fixed an issue where zapping would silently fail on default settings if the user does not have a lightning wallet preinstalled on their device. (Daniel DAquino)
[1.6-25]: https://github.com/damus-io/damus/releases/tag/v1.6-25
## [1.6-24] - 2023-10-22 - AppStore Rejection Cope
### Added
- Improve discoverability of profile zaps with zappability badges and profile action sheets (Daniel DAquino)
- Add suggested hashtags to universe view (Daniel DAquino)
- Suggest first post during onboarding (Daniel DAquino)
- Add expiry date for images in cache to be auto-deleted after a preset time to save space on storage (Daniel DAquino)
- Add QR scan nsec logins. (Jericho Hasselbush)
### Changed
- Improved status view design (ericholguin)
- Improve clear cache functionality (Daniel DAquino)
### Fixed
- Reduce size of event menu hitbox (William Casarin)
- Do not show DMs from muted users (Daniel DAquino)
- Add more spacing between display name and username, and prefix username with `@` character (Daniel DAquino)
- Broadcast quoted notes when posting a note with quotes (Daniel DAquino)
[1.6-24]: https://github.com/damus-io/damus/releases/tag/v1.6-24
## [1.6-23] - 2023-10-06 - Appstore Release
### Added
- Added merch store button to sidebar menu (Daniel DAquino)
### Changed
- Damus icon now opens sidebar (Daniel DAquino)
### Fixed
- Stop tab buttons from causing the root view to scroll to the top unless user is coming from another tab or already at the root view (Daniel DAquino)
- Fix profiles not updating (William Casarin)
- Fix issue where relays with trailing slashes cannot be removed (#1531) (Daniel DAquino)
[1.6-23]: https://github.com/damus-io/damus/releases/tag/v1.6-23
## [1.6-20] - 2023-10-04
### Changed
- Improve UX around clearing cache (Daniel DAquino)
- Show muted thread replies at the bottom of the thread view (#1522) (Daniel DAquino)
### Fixed
- Fix situations where the note composer cursor gets stuck in one place after tagging a user (Daniel DAquino)
- Fix some note composer issues, such as when copying/pasting larger text, and make the post composer more robust. (Daniel DAquino)
- Apply filters to hashtag search timeline view (Daniel DAquino)
- Hide quoted or reposted notes from people whom the user has muted. (#1216) (Daniel DAquino)
- Fix profile not updating (William Casarin)
- Fix small graphical toolbar bug when scrolling profiles (Daniel DAquino)
- Fix localization issues and export strings for translation (Terry Yiu)
[1.6-20]: https://github.com/damus-io/damus/releases/tag/v1.6-20
## [1.6-18] - 2023-09-21
### Added
- Add followed hashtags to your following list (Daniel DAquino)
- Add "Do not show #nsfw tagged posts" setting (Daniel DAquino)
- Hold tap to preview status URL (Jericho Hasselbush)
- Finnish translations (etrikaj)
### Changed
- Switch to nostrdb for @'s and user search (William Casarin)
- Use nostrdb for profiles (William Casarin)
- Updated relay view (ericholguin)
- Increase size of the hitbox on note ellipsis button (Daniel DAquino)
- Make carousel tab dots tappable (Bryan Montz)
- Move the "Follow you" badge into the profile header (Grimless)
### Fixed
- Fix text composer wrapping issue when mentioning npub (Daniel DAquino)
- Make blurred videos viewable by allowing blur to disappear once tapped (Daniel DAquino)
- Fix parsing issue with NIP-47 compliant NWC urls without double-slashes (Daniel DAquino)
- Fix padding of username next to pfp on some views (William Casarin)
- Fixes issue where username with multiple emojis would place cursor in strange position. (Jericho Hasselbush)
- Fixed audio in video playing twice (Bryan Montz)
- Fix crash when long pressing custom reactions (William Casarin)
- Fix random crashom due to old profile database (William Casarin)
[1.6-18]: https://github.com/damus-io/damus/releases/tag/v1.6-18
## [1.6-17] - 2023-08-23
### Added
- Add support for status URLs (William Casarin)
- Click music statuses to display in spotify (William Casarin)
- Add settings for disabling user statuses (William Casarin)
### Changed
- clear statuses if they only contain whitespace (William Casarin)
### Fixed
- Fix long status lines (William Casarin)
- Fix status events not expiring locally (William Casarin)
[1.6-17]: https://github.com/damus-io/damus/releases/tag/v1.6-17
## [1.6-16] - 2023-08-23
### Added
- Added live music statuses (William Casarin)
- Added generic user statuses (William Casarin)
### Fixed
- Avoid notification for zaps from muted profiles (tappu75e@duck.com)
- Fix text editing issues on characters added right after mention link (Daniel DAquino)
- Mute hellthreads everywhere (William Casarin)
[1.6-16]: https://github.com/damus-io/damus/releases/tag/v1.6-16
## [1.6-13] - 2023-08-18
### Fixed
- Fix bug where it would sometimes show -1 in replies (tappu75e@duck.com)
- Fix images and links occasionally appearing with escaped slashes (Daniel DAquino)
- Fixed nostrscript not working on smaller phones (William Casarin)
- Fix zaps sometimes not appearing (William Casarin)
- Fixed issue where reposts would sometimes repost the wrong thing (William Casarin)
- Fixed issue where sometimes there would be empty entries on your profile (William Casarin)
[1.6-13]: https://github.com/damus-io/damus/releases/tag/v1.6-13
## [1.6-11]: "Bugfix Sunday" - 2023-08-07
### Added
- Add close button to custom reactions (Suhail Saqan)
- Add ability to change order of custom reactions (Suhail Saqan)
- Adjustable font size (William Casarin)
### Changed
- Show renotes in Notes timeline (William Casarin)
### Fixed
- Ensure the person you're replying to is the first entry in the reply description (William Casarin)
- Don't cutoff text in notifications (William Casarin)
- Fix wikipedia url detection with parenthesis (William Casarin)
- Fixed old notifications always appearing on first start (William Casarin)
- Fix issue with slashes on relay urls causing relay connection problems (William Casarin)
- Fix rare crash triggered by local notifications (William Casarin)
- Fix crash when long-pressing reactions (William Casarin)
- Fixed nostr reporting decoding (William Casarin)
- Dismiss qr screen on scan (Suhail Saqan)
- Show QRCameraView regardless of same user (Suhail Saqan)
- Fix wiggle when long press reactions (Suhail Saqan)
- Fix reaction button breaking scrolling (Suhail Saqan)
- Fix crash when muting threads (Bryan Montz)
[1.6-11]: https://github.com/damus-io/damus/releases/tag/v1.6-11
## [1.6-8]: "nostrdb prep" 2023-08-03
### Added
- Suggested Users to Follow (Joel Klabo)
- Add support for multiple reactions (Suhail Saqan)
### Changed
- Improved memory usage and performance when processing events (William Casarin)
### Fixed
- Fixed disappearing text on iOS17 (cr0bar)
- Fix UTF support for hashtags (Daniel DAquino)
- Fix compilation error on test target in UserSearchCacheTests (Daniel DAquino)
- Fix nav crashing and buggyness (William Casarin)
- Allow relay logs to be opened in dev mode even if relay (Daniel D'Aquino)
- endless connection attempt loop after user removes relay (Bryan Montz)
[1.6-8]: https://github.com/damus-io/damus/releases/tag/v1.6-8
## 1.6 (7): "Less bad" - 2023-07-16
### Added
- Show nostr address username and support abbreviated _ usernames (William Casarin)
- Re-add nip05 badges to profiles (William Casarin)
- Add space when tagging users in posts if needed (William Casarin)
- Added padding under word count on longform account (William Casarin)
### Fixed
- Don't spam lnurls when validating zaps (William Casarin)
- Eliminate nostr address validation bandwidth on startup (William Casarin)
- Allow user to login to deleted profile (William Casarin)
- Fix issue where typing cc@bob would produce brokenb ccnostr:bob mention (William Casarin)
[1.6-7]: https://github.com/damus-io/damus/releases/tag/v1.6-7
## [1.6-6] - 2023-07-16
### Added
- New markdown renderer (William Casarin)
- Added feedback when user adds a relay that is already on the list (Daniel D'Aquino)
### Changed
- Hide nsec when logging in (cr0bar)
- Remove nip05 on events (William Casarin)
- Rename NIP05 to "nostr address" (William Casarin)
### Fixed
- Fixed issue where hashtags were leaking in DMs (William Casarin)
- Fix issue with emojis next to hashtags and urls (William Casarin)
- relay detail view is not immediately available after adding new relay (Bryan Montz)
- Fix nostr:nostr:... bugs (William Casarin)
[1.6-6]: https://github.com/damus-io/damus/releases/tag/v1.6-6
## [1.6-4] - 2023-07-13
### Added
- Add the ability to follow hashtags (William Casarin)
### Changed
- Remove note size restriction for longform events (William Casarin)
### Fixed
- Hide users and hashtags from home timeline when you unfollow (William Casarin)
- Fixed a bug where following a user might not work due to poor connectivity (William Casarin)
- Icon color for developer mode setting is incorrect in low-light mode (Bryan Montz)
- Fixed nav bar color on login, eula, and account creation (ericholguin)
### Removed
- Remove following Damus Will by default (William Casarin)
[1.6-4]: https://github.com/damus-io/damus/releases/tag/v1.6-4
## [1.6-3] - 2023-07-11
### Changed
- Start at top when reading longform events (William Casarin)
- Allow reposting and quote reposting multiple times (William Casarin)
### Fixed
- Show longform previews in notifications instead of the entire post (William Casarin)
- Fix padding on longform events (William Casarin)
- Fix action bar appearing on quoted longform previews (William Casarin)
[1.6-3]: https://github.com/damus-io/damus/releases/tag/v1.6-3
## [1.6-2] - 2023-07-11
### Added
- Add support for multilingual hashtags (cr0bar)
- Add r tag when mentioning a url (William Casarin)
- Add initial longform note support (William Casarin)
- Enable banner image editing (Joel Klabo)
- Add relay log in developer mode (Bryan Montz)
### Fixed
- Fix lag when creating large posts (William Casarin)
- Fix npub mentions failing to parse in some cases (William Casarin)
- Fix PostView initial string to skip mentioning self when on own profile (Terry Yiu)
- Fix freezing bug when tapping Developer settings menu (Terry Yiu)
- Fix potential fake profile zap attacks (William Casarin)
- Fix issue where malicious zappers can send fake zaps to another user's posts (William Casarin)
- Fix profile post button mentions (cr0bar)
- Fix icons on settings view (cr0bar)
- Fix Invalid Zap bug in reposts (William Casarin)
### Removed
- Remove old @ and & hex key mentions (William Casarin)
[1.6-2]: https://github.com/damus-io/damus/releases/tag/v1.6-2
## [1.6] - 2023-07-04
### Added
- Speed up user search (Terry Yiu)
- Add post button to profile pages (William Casarin)
- Add post button when logged in with private key and on own profile view (Terry Yiu)
### Changed
- Drop iOS15 support (Scott Penrose)
### Fixed
- Load more content on profile view (William Casarin)
- Fix reports to conform to NIP-56 (Terry Yiu)
- Fix profile navigation bugs from muted users list and relay list views (Terry Yiu)
- Fix navigation to translation settings view (Terry Yiu)
- Fixed all navigation issues (Scott Penrose)
- Disable post button when media upload in progress (Terry Yiu)
- Fix taps on mentions in note drafts to not redirect to other Nostr clients (Terry Yiu)
- Fix missing profile zap notification text (Terry Yiu)
[1.6]: https://github.com/damus-io/damus/releases/tag/v1.6
## [1.5-5] - 2023-06-24
### Fixed
- Remove note zaps to fit apples appstore guidelines
- Fix zap sheet popping (William Casarin)
- Fix CustomizeZapView from randomly disappearing (William Casarin)
- Fix "zapped your profile" strings to say "zapped you" (Terry Yiu)
- Fix reconnect loop issues on iOS17 (William Casarin)
- Fix some more thread jankiness (William Casarin)
- Fix spelling of Nostr to use Titlecase instead of lowercase (Terry Yiu)
- Rename all usages of the term Post as a noun to Note to conform to the Nostr spec (Terry Yiu)
- Fix text cutoff on login with npub (gladiusKatana)
- Fix hangs due to video player (William Casarin)
[1.5-5]: https://github.com/damus-io/damus/releases/tag/v1.5-5
## [1.5-2] - 2023-05-30
### Added
- Add new full-bleed video player (William Casarin)
- Add ability to show multiple posts per user in Universe (Ben Weeks)
- Custom iconography added for other areas of the app. (Ben Weeks)
- Custom iconography for the left navigation. (Ben Weeks)
- Custom iconography for the tab buttons. (Ben Weeks)
- Added dots under image carousel (Ben Weeks)
- Add profile caching (Bryan Montz)
- Add mention parsing and fine-grained text selection on description in ProfileView (Terry Yiu)
### Changed
- Redesign phase 1 (text, icons)
- Updated UI to use custom font (Ben Weeks)
### Fixed
- Fix side menu bug in landscape (OlegAba)
- Use "Follow me on nostr" text when looking at someone else's QR code (Ben Weeks)
- Fix issue where cursor dissapears when typing long message (gladiusKatana)
- Attempt fix for randomly broken animated gifs (William Casarin)
- Fix cursor jumping when pressing return (gladius)
- Fix side menu label size so that translations in longer languages fit without wrapping (Terry Yiu)
- Fix reaction notification title to be consistent with ReactionView (Terry Yiu)
- Fix nostr URL scheme to open properly even if there's already a different view open (Terry Yiu)
- Fix crash related to preloading events (Bryan Montz)
## v1.4.3 - 2023-05-08
### Added
- Add #zaps and #onlyzaps to custom hashtags (William Casarin)
- Add OnlyZaps mode: disable reactions, only zaps! (William Casarin)
- Add QR Code in profiles (ericholguin)
- Add confirmation alert when clearing all bookmarks (Swift)
- Add deep links for local notifications (Swift)
- Add friends filter to DMs (William Casarin)
- Add image metadata to image uploads (William Casarin)
- Add nokyctranslate translation option (symbsrcool)
- Add partial support for different repost variants (William Casarin)
- Add paste button to login (Suhail Saqan)
- Add q tag to quoted renotes (William Casarin)
- Add setting to hide reactions (Terry Yiu)
- Add thread muting (Terry Yiu)
- Add unmute option in profile view (Joshua Jiang)
- Add webp image support (William Casarin)
- Added event preloading when scrolling (William Casarin)
- Colorize friend icons (William Casarin)
- Friends filter for notifications (William Casarin)
- Preload images so they don't pop in (William Casarin)
- Preload profile pictures while scrolling (William Casarin)
- Preview media uploads when posting (Swift)
- Save keys when logging in and when creating new keypair (Bryan Montz)
- Show blurhash placeholders from image metadata (William Casarin)
- Top-level tab state restoration (Bryan Montz)
- You can now change the default zap type (William Casarin)
- new iconography (Roberto Agreda)
### Changed
- Add number formatting for sats entry and use selected zaps amount from picker as placeholder (Terry Yiu)
- Adjust attachment images placement when posting (Swift)
- Always check signatures of profile events (William Casarin)
- Ask permission before uploading media (Swift)
- Cached various UI elements so its not as laggy (William Casarin)
- Change 500 custom zap to 420 (William Casarin)
- Changed look of Repost and Quote buttons (ericholguin)
- Enable like button on OnlyZaps profiles for people who don't have OnlyZaps mode on (William Casarin)
- Load zaps instantly on events (William Casarin)
- New looks to the custom zaps view (ericholguin)
- Only show friends, not friend-of-friend in friend filter (William Casarin)
- Preload events when they are queued (William Casarin)
- Search hashtags automatically (William Casarin)
- Show DM message in local notification (William Casarin)
- replace Vault dependency with @KeychainStorage property wrapper (Bryan Montz)
### Fixed
- Dismiss bookmarks view when switching tabs (William Casarin)
- Do not allow non-numeric characters for sats amount and fix numeric entry for other number systems for all locales (Terry Yiu)
- Do not translate own notes if logged in with private key (Terry Yiu)
- Don't process blurhash if we already have image cached (William Casarin)
- Fix "translated from english" bugs (William Casarin)
- Fix Copy Link action does not dismiss ShareAction view (Bryan Montz)
- Fix auto-translations bug where languages in preferred language still gets translated (Terry Yiu)
- Fix bug where you could only mention users at the end of a post (Swift)
- Fix bug with reaction notifications referencing the wrong event (Terry Yiu)
- Fix buggy zap amounts and wallet selector settings (William Casarin)
- Fix camera not dismissing (Swift)
- Fix crash when loading DMs in the background (William Casarin)
- Fix crash when you have invalid relays in your relay list (William Casarin)
- Fix crash with LibreTranslate server setting selection and remove delisted vern server (Terry Yiu)
- Fix having to set onlyzaps mode every time on restart (William Casarin)
- Fix invalid DM author notifications (William Casarin)
- Fix issue where uploaded images were from someone else (Swift)
- Fix npub search fails on the first try (Bryan Montz)
- Fix parse mention without space in content (Joshua Jiang)
- Fix posts with no uploadedURLs always get two blank spaces at the end (Bryan Montz)
- Fix relay signal indicator, properly show how many relays you are connected to (William Casarin)
- Fix shuffling when choosing users to reply to (Joshua Jiang)
- Fix slow reconnection issues (Bryan Montz)
- Fix tap area when mentioning users (OlegAba)
- Fix thread incompatibility for clients that add more than one reply tag (William Casarin)
- Fix user notifications from old events immediately shown on install and login (Bryan Montz)
- Fix weird #\[0] artifacts appearing in posts (William Casarin)
- Fix wrong relative times on events (William Casarin)
- Fixed blurhash appearing behind loaded images when swiping on carousel (William Casarin)
- Fixed glitchy preview (William Casarin)
- Fixed preview elements popping in (William Casarin)
- Fixed repost turning green too early and not reposting sometimes (Swift)
- Home now dismisses reactions view (William Casarin)
- Load missing profiles from boosts on home view (Gísli Kristjánsson)
- Load missing profiles from boosts on profile view (Gísli Kristjánsson)
- Load profiles in hashtag searched (William Casarin)
- Made DMs less poppy (William Casarin)
- Preserve order of bookmarks when saving (William Casarin)
- Properly scroll DM view when keyboard is open (William Casarin)
- Saved Jack's soul. (Ben Weeks)
- Zap type selection on smaller phones (ericholguin)
[1.4.3-21]: https://github.com/damus-io/damus/releases/tag/v1.4.3-21
## [1.4.3-20] - 2023-05-04
### Added
- Add webp image support (William Casarin)
- Preload profile pictures while scrolling (William Casarin)
- Save keys when logging in and when creating new keypair (Bryan Montz)
- Top-level tab state restoration (Bryan Montz)
- Added event preloading when scrolling (William Casarin)
- Preload images so they don't pop in (William Casarin)
### Changed
- Preload events when they are queued (William Casarin)
- Search hashtags automatically (William Casarin)
- Cached various UI elements so its not as laggy (William Casarin)
### Fixed
- Don't process blurhash if we already have image cached (William Casarin)
- Home now dismisses reactions view (William Casarin)
- Fix auto-translations bug where languages in preferred language still gets translated (Terry Yiu)
- Fix wrong relative times on events (William Casarin)
- Load profiles in hashtag searched (William Casarin)
- Fix weird #\[0] artifacts appearing in posts (William Casarin)
- Fix "translated from english" bugs (Terry)
- Fix crash when loading DMs in the background (William Casarin)
- Fixed blurhash appearing behind loaded images when swiping on carousel (William Casarin)
- Fix camera not dismissing (Swift)
- Fix bug with reaction notifications referencing the wrong event (Terry Yiu)
- Fix Copy Link action does not dismiss ShareAction view (Bryan Montz)
- Saved Jack's soul. (Ben Weeks)
- Fixed preview elements popping in (William Casarin)
- Fixed glitchy preview (William Casarin)
[1.4.3-20]: https://github.com/damus-io/damus/releases/tag/v1.4.3-20
## [1.4.3-15] - 2023-04-29
### Added
- Add q tag to quoted renotes (William Casarin)
- Add confirmation alert when clearing all bookmarks (Swift)
- Show blurhash placeholders from image metadata (William Casarin)
- Add image metadata to image uploads (William Casarin)
### Changed
- Load zaps instantly on events (William Casarin)
### Fixed
- Fix thread incompatibility for clients that add more than one reply tag (amethyst, plebstr)
- Preserve order of bookmarks when saving (William Casarin)
- Fix crash when you have invalid relays in your relay list (William Casarin)
[1.4.3-14]: https://github.com/damus-io/damus/releases/tag/v1.4.3-14
## [1.4.3-10] - 2023-04-25
### Added
- Add paste button to login (Suhail Saqan)
- Add nokyctranslate translation option (symbsrcool)
- You can now change the default zap type (William Casarin)
- Add partial support for different repost variants (William Casarin)
### Changed
- Change 500 custom zap to 420 (William Casarin)
- New looks to the custom zaps view (ericholguin)
- Adjust attachment images placement when posting (Swift)
- Only show friends, not friend-of-friend in friend filter (William Casarin)
### Fixed
- Fix reposts on macos and ipad (William Casarin)
- Fix slow reconnection issues (Bryan Montz)
- Fix issue where uploaded images were from someone else (Swift)
- Fix crash with LibreTranslate server setting selection and remove delisted vern server (Terry Yiu)
- Fix buggy zap amounts and wallet selector settings (William Casarin)
[1.4.3-10]: https://github.com/damus-io/damus/releases/tag/v1.4.3-10
## [1.4.3-2] - 2023-04-17
### Added
- Add deep links for local notifications (Swift)
- Add thread muting (Terry Yiu)
- Preview media uploads when posting (Swift)
- Add QR Code in profiles (ericholguin)
### Changed
- Always check signatures of profile events (William Casarin)
- Ask permission before uploading media (Swift)
- Show DM message in local notification (William Casarin)
### Fixed
- Fixed repost turning green too early and not reposting sometimes (Swift)
- Fix shuffling when choosing users to reply to (Joshua Jiang)
- Do not translate own notes if logged in with private key (Terry Yiu)
- Load missing profiles from boosts on home view (Gísli Kristjánsson)
- Load missing profiles from boosts on profile view (Gísli Kristjánsson)
- Fix tap area when mentioning users (OlegAba)
- Fix invalid DM author notifications (William Casarin)
- Fix relay signal indicator, properly show how many relays you are connected to (William Casarin)
[1.4.3-2]: https://github.com/damus-io/damus/releases/tag/v1.4.3-2
## [1.4.2-2] - 2023-04-12
### Added
- Include #btc in custom #bitcoin hashtag (William Casarin)
- Make notification dots configurable (William Casarin)
### Changed
- Display follows in most recent to oldest (Luis Cabrera)
### Fixed
- Fix hitches caused by syncronous loading of cached images (William Casarin)
- Fix tabs sometimes not switching (William Casarin)
[1.4.2-2]: https://github.com/damus-io/damus/releases/tag/v1.4.2-2
## [1.4.1-8] - 2023-04-10
### Added
- Add support for nostr: bech32 urls in posts and DMs (NIP19) (Bartholomew Joyce)
### Fixed
- Don't leak mentions in DMs (William Casarin)
- Fix tap area when mentioning users (OlegAba)
[1.4.1-8]: https://github.com/damus-io/damus/releases/tag/v1.4.1-8
## [1.4.1-7] - 2023-04-07
### Added
- Add #zap and #zapathon custom hashtags (William Casarin)
- Add custom #plebchain icon (William Casarin)
### Changed
- Add validation to prevent whitespaces be inputted on NIP-05 input field (Terry Yiu)
- Change reply color from blue to purple. Blue is banned from Damus. (William Casarin)
### Fixed
- Fix padding in post view (OlegAba)
- Show most recently bookmarked notes at the top (Bryan Montz)
[1.4.1-7]: https://github.com/damus-io/damus/releases/tag/v1.4.1-7
## [1.4.1-6] - 2023-04-06
### Added
- Custom hashtags for #bitcoin, #nostr and #coffeechain (William Casarin)
### Changed
- Disable translations in DMs by default (William Casarin)
### Fixed
- Don't show Translating... if we're not actually translating (William Casarin)
[1.4.1-6]: https://github.com/damus-io/damus/releases/tag/v1.4.1-6
## [1.4.1-4] - 2023-04-06
### Added
- Cache translations (William Casarin)
### Fixed
- Fix translation text popping (William Casarin)
- Fix broken auto-translations (William Casarin)
- Fix extraneous padding on some image posts (William Casarin)
- Fix crash in relay list view (William Casarin)
[1.4.1-4]: https://github.com/damus-io/damus/releases/tag/v1.4.1-4
## [1.4.1-3] - 2023-04-05
### Added
- Added text truncation settings (William Casarin)
### Changed
- Rename block to mute (William Casarin)
### Fixed
- Reduce chopping of images (mainvolume)
- Fix some notification settings not saving (William Casarin)
- Fix broken camera uploads (again) (Joel Klabo)
[1.4.1-3]: https://github.com/damus-io/damus/releases/tag/v1.4.1-3
## [1.4.1-2] - 2023-04-04
### Added
- Reply counts (William Casarin)
- Add option to only show notification from people you follow (Swift)
- Added local notifications for other events (Swift)
- Show a custom view when tagged user isn't found (ericholguin)
- Show referenced notes in DMs (William Casarin)
### Changed
- Show full bleed images on selected events in threads (William Casarin)
- Improvement to square image displaying (mainvolume)
### Fixed
- Fix broken website links that have missing https:// prefixes (William Casarin)
- Get around CCP bootstrap relay banning by caching user's relays as their bootstrap relays (William Casarin)
[1.4.1-2]: https://github.com/damus-io/damus/releases/tag/v1.4.1-2
## [1.4.1] - 2023-04-03
### Added
- Profile Picture Upload (Joel Klabo)
- Enable offline posting (William Casarin)
- Add auto-translation caching to ruduce api usage (Terry Yiu)
- Added support for gif uploads (Swift)
- Add a Divider in the Follows List for Large Screens (Joel Klabo)
- Upload Photos and Videos from Camera (Joel Klabo)
- Added ability to lookup users by nip05 identifiers (William Casarin)
### Changed
- Only truncate timeline text if enabled in settings (William Casarin)
- Make mentions wide in notifications like in timeline (William Casarin)
- Broadcast events you are replying to (William Casarin)
- Broadcast now also broadcasts event user's profile (William Casarin)
- Improved look of reply view (ericholguin)
- Remove gradient in some places for visibility (ericholguin)
### Fixed
- Fix cropped images (mainvolume)
- Truncate long text in notification items (William Casarin)
- Restore missing reply description on selected events (William Casarin)
- Show sent DMs immediately (William Casarin)
- Fixed size of translated text (William Casarin)
- Fix crash when reposting (William Casarin)
- Fix unclickable image dismiss button (OlegAba)
[1.4.1]: https://github.com/damus-io/damus/releases/tag/v1.4.1
## [1.4.0] - 2023-03-27
### Added
- Local zap notifications (Swift)
- Add support for video uploads (Swift)
- Auto Translation (Terry Yiu)
- Portuguese (Brazil) translations (Andressa Munturo)
- Spanish (Spain) translations (Max Pleb)
- Vietnamese translations (ShiryoRyo)
### Fixed
- Fixed small notification hit boxes (Terry Yiu)
[1.4.0]: https://github.com/damus-io/damus/releases/tag/v1.4.0
## [1.3.0-7] - 2023-03-24
- New experimental timeline view
@@ -57,6 +883,10 @@
- Add image uploader (Swift)
- Add option to always show images (never blur) (William Casarin)
- Canadian French (Pierre - synoptic_okubo)
- Hungarian translations (Zoltan)
- Korean translations (sogoagain)
- Swedish translations (Pextar)
### Changed
@@ -79,6 +909,9 @@
- Extend user tagging search to all local profiles (William Casarin)
- Vibrate when a zap is received (Swift)
- New and Improved Share sheet (ericholguin)
- Bulgarian translations (elsat)
- Persian translations (Mahdi Taghizadeh)
- Ukrainian translations (Valeriia Khudiakova, Tony B)
### Changed
@@ -177,6 +1010,8 @@
- Customized zaps (William Casarin)
- Add new Notifications View (William Casarin)
- Bookmarking (Joel Klabo)
- Chinese, Traditional (Hong Kong) translations (rasputin)
- Chinese, Traditional (Taiwan) translations (rasputin)
### Changed
@@ -202,6 +1037,9 @@
- Added the ability to select text on posts (OlegAba)
- Added Posts or Post & Replies selector to Profile (ericholguin)
- Improved profile navbar (OlegAba)
- Czech translations (Martin Gabrhel)
- Indonesian translations (johnybergzy)
- Russian translations (Tony B)
### Changed
@@ -250,7 +1088,6 @@
### Added
- Relay Filtering (William Casarin)
- Japanese translations (Terry Yiu)
- Add password autofill on account login and creation (Terry Yiu)
- Show if relay is paid (William Casarin)
- Add "Follows You" indicator on profile (William Casarin)
@@ -263,6 +1100,10 @@
- Copy invoice button (Joel Klabo)
- Receive Lightning Zaps (William Casarin)
- Allow text selection in bio (Suhail Saqan)
- Chinese, Simplified (China mainland) translations (haolong, rasputin)
- Dutch translations (Heimen Stoffels - Vistaus)
- Greek translations (milicode)
- Japanese translations (akiomik, foxytanuki, Guetsu Ren - Nighthaven, h3y6e, middlingphys)
### Changed
@@ -297,6 +1138,7 @@
- LibreTranslate note translations (Terry Yiu)
- Added support for account deletion (William Casarin)
- User tagging and autocompletion in posts (Swift)
- Polish translations (pysiak)
### Changed
@@ -319,7 +1161,8 @@
### Added
- Added Arabic and Portuguese translations (Barodane, Antonio Chagas)
- Arabic translations (Barodane)
- Portuguese translations (Antonio Chagas)
- Add QRCode view for sharing your pubkey (ericholguin)
- Added nostr: uri handling (William Casarin)
@@ -346,7 +1189,8 @@
### Added
- Reposts view (Terry Yiu)
- Translations for it_IT, it_CH, fr_FR, de_DE, de_AT and lv_LV (Nicolò Carcagnì, Solobalbo, Gregor, Peter Gerstbach, SYX)
- Italian translations (Nicolò Carcagnì)
- Latvian translations (SYX)
- Added ability to block users (William Casarin)
- Added a way to report content (William Casarin)
- Stretchable profile cover header (Swift)
@@ -373,7 +1217,9 @@
- Show website on profiles (William Casarin)
- Add the ability to choose participants when replying (Joel Klabo)
- Translations for de_AT, de_DE, tr_TR, fr_FR (Gregor, Peter Gerstbach, Taylan Benli, Solobalbo)
- German translations (Gregor, Peter Gerstbach)
- Turkish translations (Taylan Benli)
- French (France) translations (Solobalbo)
- Add DM Message Requests (William Casarin)
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.damus</string>
</array>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.usernotifications.service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).NotificationService</string>
</dict>
</dict>
</plist>
@@ -0,0 +1,49 @@
//
// NostrEventInfoFromPushNotification.swift
// DamusNotificationService
//
// Created by Daniel DAquino on 2023-11-13.
//
import Foundation
/// The representation of a JSON-encoded Nostr Event used by the push notification server
/// Needs to match with https://gitlab.com/soapbox-pub/strfry-policies/-/raw/433459d8084d1f2d6500fdf916f22caa3b4d7be5/src/types.ts
struct NostrEventInfoFromPushNotification: Codable {
let id: String // Hex-encoded
let sig: String // Hex-encoded
let kind: NostrKind
let tags: [[String]]
let pubkey: String // Hex-encoded
let content: String
let created_at: Int
static func from(dictionary: [AnyHashable: Any]) -> NostrEventInfoFromPushNotification? {
guard let id = dictionary["id"] as? String,
let sig = dictionary["sig"] as? String,
let kind_int = dictionary["kind"] as? UInt32,
let kind = NostrKind(rawValue: kind_int),
let tags = dictionary["tags"] as? [[String]],
let pubkey = dictionary["pubkey"] as? String,
let content = dictionary["content"] as? String,
let created_at = dictionary["created_at"] as? Int else {
return nil
}
return NostrEventInfoFromPushNotification(id: id, sig: sig, kind: kind, tags: tags, pubkey: pubkey, content: content, created_at: created_at)
}
func reactionEmoji() -> String? {
guard self.kind == NostrKind.like else {
return nil
}
switch self.content {
case "", "+":
return "❤️"
case "-":
return "👎"
default:
return self.content
}
}
}
@@ -0,0 +1,48 @@
//
// NotificationFormatter.swift
// DamusNotificationService
//
// Created by Daniel DAquino on 2023-11-13.
//
import Foundation
import UserNotifications
struct NotificationFormatter {
static var shared = NotificationFormatter()
// TODO: These is a very generic notification formatter. Once we integrate NostrDB into the extension, we should reuse various functions present in `HomeModel.swift`
func formatMessage(event: NostrEventInfoFromPushNotification) -> UNNotificationContent? {
let content = UNMutableNotificationContent()
if let event_json_data = try? JSONEncoder().encode(event), // Must be encoded, as the notification completion handler requires this object to conform to `NSSecureCoding`
let event_json_string = String(data: event_json_data, encoding: .utf8) {
content.userInfo = [
"nostr_event_info": event_json_string
]
}
switch event.kind {
case .text:
content.title = NSLocalizedString("Someone posted a note", comment: "Title label for push notification where someone posted a note")
content.body = event.content
break
case .dm:
content.title = NSLocalizedString("New message", comment: "Title label for push notifications where a direct message was sent to the user")
content.body = NSLocalizedString("(Contents are encrypted)", comment: "Label on push notification indicating that the contents of the message are encrypted")
break
case .like:
guard let reactionEmoji = event.reactionEmoji() else {
content.title = NSLocalizedString("Someone reacted to your note", comment: "Generic title label for push notifications where someone reacted to the user's post")
break
}
content.title = NSLocalizedString("New note reaction", comment: "Title label for push notifications where someone reacted to the user's post with a specific emoji")
content.body = String(format: NSLocalizedString("Someone reacted to your note with %@", comment: "Body label for push notifications where someone reacted to the user's post with a specific emoji"), reactionEmoji)
break
case .zap:
content.title = NSLocalizedString("Someone zapped you ⚡️", comment: "Title label for a push notification where someone zapped the user")
break
default:
return nil
}
return content
}
}
@@ -0,0 +1,47 @@
//
// NotificationService.swift
// DamusNotificationService
//
// Created by Daniel DAquino on 2023-11-10.
//
import UserNotifications
import Foundation
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
let ndb: Ndb? = try? Ndb(owns_db_file: false)
// Modify the notification content here...
guard let nostrEventInfoDictionary = request.content.userInfo["nostr_event"] as? [AnyHashable: Any],
let nostrEventInfo = NostrEventInfoFromPushNotification.from(dictionary: nostrEventInfoDictionary) else {
contentHandler(request.content)
return;
}
// Log that we got a push notification
if let pubkey = Pubkey(hex: nostrEventInfo.pubkey),
let txn = ndb?.lookup_profile(pubkey) {
Log.debug("Got push notification from %s (%s)", for: .push_notifications, (txn.unsafeUnownedValue?.profile?.display_name ?? "Unknown"), nostrEventInfo.pubkey)
}
if let improvedContent = NotificationFormatter.shared.formatMessage(event: nostrEventInfo) {
contentHandler(improvedContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
+13
View File
@@ -0,0 +1,13 @@
all: nostrscript/primal.wasm
nostrscript/%.wasm: nostrscript/%.ts nostrscript/nostr.ts Makefile
asc $< --runtime stub --outFile $@ --optimize
tags:
find damus-c -name '*.c' -or -name '*.h' | xargs ctags
clean:
rm nostrscript/*.wasm
.PHONY: tags
-1
View File
@@ -1,4 +1,3 @@
dependencies: [
.Package(url: "https://github.com/daltoniam/Starscream.git", majorVersion: 4),
.Package(url: "https://github.com/jb55/secp256k1.swift.git", branch: "main")
]
+21 -4
View File
@@ -92,13 +92,30 @@ damus implements the following [Nostr Implementation Possibilities][nips]
## Contributing
Contributors welcome!
Contributors welcome! Start by examining known issues: https://github.com/damus-io/damus/issues.
### Code
### Mailing lists
[Email patches][git-send-email] to jb55@jb55.com are preferred, but I accept PRs on GitHub as well.
We have a few mailing lists that anyone can join to get involved in damus development:
[git-send-email]: http://git-send-email.io
- [dev][dev-list] - development discussions
- [patches][patches-list] - code submission and review
- [product][product-list] - product discussions
- [design][design-list] - design discussions
[dev-list]: https://damus.io/list/dev
[patches-list]: https://damus.io/list/patches
[product-list]: https://damus.io/list/product
[design-list]: https://damus.io/list/design
### Contributing
See [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)
### Privacy
Your internet protocol (IP) address is exposed to the relays you connect to, and third party media hosters (e.g. nostr.build, imgur.com, giphy.com, youtube.com etc.) that render on Damus. If you want to improve your privacy, consider utilizing a service that masks your IP address (e.g. a VPN) from trackers online.
The relay also learns which public keys you are requesting, meaning your public key will be tied to your IP address.
### Translations
View File
+10 -3
View File
@@ -91,13 +91,12 @@ int bech32_encode(char *output, const char *hrp, const uint8_t *data, size_t dat
return 1;
}
bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t max_input_len) {
bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t input_len) {
uint32_t chk = 1;
size_t i;
size_t input_len = strlen(input);
size_t hrp_len;
int have_lower = 0, have_upper = 0;
if (input_len < 8 || input_len > max_input_len) {
if (input_len < 8) {
return BECH32_ENCODING_NONE;
}
*data_len = 0;
@@ -154,6 +153,14 @@ bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const
}
}
bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t max_input_len) {
size_t len = strlen(input);
if (len > max_input_len) {
return BECH32_ENCODING_NONE;
}
return bech32_decode_len(hrp, data, data_len, input, len);
}
int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, const uint8_t* in, size_t inlen, int inbits, int pad) {
uint32_t val = 0;
int bits = 0;
+8
View File
@@ -118,6 +118,14 @@ bech32_encoding bech32_decode(
size_t max_input_len
);
bech32_encoding bech32_decode_len(
char *hrp,
uint8_t *data,
size_t *data_len,
const char *input,
size_t input_len
);
/* Helper from bech32: translates inbits-bit bytes to outbits-bit bytes.
* @outlen is incremented as bytes are added.
* @pad is true if we're to pad, otherwise truncate last byte if necessary
+57
View File
@@ -0,0 +1,57 @@
//
// block.h
// damus
//
// Created by William Casarin on 2023-04-09.
//
#ifndef block_h
#define block_h
#include "nostr_bech32.h"
#include "str_block.h"
#define MAX_BLOCKS 1024
enum block_type {
BLOCK_HASHTAG = 1,
BLOCK_TEXT = 2,
BLOCK_MENTION_INDEX = 3,
BLOCK_MENTION_BECH32 = 4,
BLOCK_URL = 5,
BLOCK_INVOICE = 6,
};
typedef struct invoice_block {
struct str_block invstr;
union {
struct bolt11 *bolt11;
};
} invoice_block_t;
typedef struct mention_bech32_block {
struct str_block str;
struct nostr_bech32 bech32;
} mention_bech32_block_t;
typedef struct note_block {
enum block_type type;
union {
struct str_block str;
struct invoice_block invoice;
struct mention_bech32_block mention_bech32;
int mention_index;
} block;
} block_t;
typedef struct note_blocks {
int words;
int num_blocks;
struct note_block *blocks;
} blocks_t;
void blocks_init(struct note_blocks *blocks);
void blocks_free(struct note_blocks *blocks);
#endif /* block_h */
+703
View File
@@ -0,0 +1,703 @@
#ifndef JB55_CURSOR_H
#define JB55_CURSOR_H
#include "typedefs.h"
#include "varint.h"
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <string.h>
#define unlikely(x) __builtin_expect((x),0)
#define likely(x) __builtin_expect((x),1)
struct cursor {
unsigned char *start;
unsigned char *p;
unsigned char *end;
};
struct array {
struct cursor cur;
unsigned int elem_size;
};
static inline void reset_cursor(struct cursor *cursor)
{
cursor->p = cursor->start;
}
static inline void wipe_cursor(struct cursor *cursor)
{
reset_cursor(cursor);
memset(cursor->start, 0, cursor->end - cursor->start);
}
static inline void make_cursor(u8 *start, u8 *end, struct cursor *cursor)
{
cursor->start = start;
cursor->p = start;
cursor->end = end;
}
static inline void make_array(struct array *a, u8* start, u8 *end, unsigned int elem_size)
{
make_cursor(start, end, &a->cur);
a->elem_size = elem_size;
}
static inline int cursor_eof(struct cursor *c)
{
return c->p == c->end;
}
static inline void *cursor_malloc(struct cursor *mem, unsigned long size)
{
void *ret;
if (mem->p + size > mem->end) {
return NULL;
}
ret = mem->p;
mem->p += size;
return ret;
}
static inline void *cursor_alloc(struct cursor *mem, unsigned long size)
{
void *ret;
if (!(ret = cursor_malloc(mem, size))) {
return 0;
}
memset(ret, 0, size);
return ret;
}
static inline int cursor_slice(struct cursor *mem, struct cursor *slice, size_t size)
{
u8 *p;
if (!(p = cursor_alloc(mem, size))) {
return 0;
}
make_cursor(p, mem->p, slice);
return 1;
}
static inline void copy_cursor(struct cursor *src, struct cursor *dest)
{
dest->start = src->start;
dest->p = src->p;
dest->end = src->end;
}
static inline int cursor_skip(struct cursor *cursor, int n)
{
if (cursor->p + n >= cursor->end)
return 0;
cursor->p += n;
return 1;
}
static inline int pull_byte(struct cursor *cursor, u8 *c)
{
if (unlikely(cursor->p >= cursor->end))
return 0;
*c = *cursor->p;
cursor->p++;
return 1;
}
static inline int parse_byte(struct cursor *cursor, u8 *c)
{
if (unlikely(cursor->p >= cursor->end))
return 0;
*c = *cursor->p;
//cursor->p++;
return 1;
}
static inline int parse_char(struct cursor *cur, char c) {
if (cur->p >= cur->end)
return 0;
if (*cur->p == c) {
cur->p++;
return 1;
}
return 0;
}
static inline int peek_char(struct cursor *cur, int ind) {
if ((cur->p + ind < cur->start) || (cur->p + ind >= cur->end))
return -1;
return *(cur->p + ind);
}
static inline int cursor_pull_c_str(struct cursor *cursor, const char **str)
{
*str = (const char*)cursor->p;
for (; cursor->p < cursor->end; cursor->p++) {
if (*cursor->p == 0) {
cursor->p++;
return 1;
}
}
return 0;
}
static inline int cursor_push_byte(struct cursor *cursor, u8 c)
{
if (unlikely(cursor->p + 1 > cursor->end)) {
return 0;
}
*cursor->p = c;
cursor->p++;
return 1;
}
static inline int cursor_pull(struct cursor *cursor, u8 *data, int len)
{
if (unlikely(cursor->p + len > cursor->end)) {
return 0;
}
memcpy(data, cursor->p, len);
cursor->p += len;
return 1;
}
static inline int pull_data_into_cursor(struct cursor *cursor,
struct cursor *dest,
unsigned char **data,
int len)
{
int ok;
if (unlikely(dest->p + len > dest->end)) {
printf("not enough room in dest buffer\n");
return 0;
}
ok = cursor_pull(cursor, dest->p, len);
if (!ok) return 0;
*data = dest->p;
dest->p += len;
return 1;
}
static inline int cursor_dropn(struct cursor *cur, int size, int n)
{
if (n == 0)
return 1;
if (unlikely(cur->p - size*n < cur->start)) {
return 0;
}
cur->p -= size*n;
return 1;
}
static inline int cursor_drop(struct cursor *cur, int size)
{
return cursor_dropn(cur, size, 1);
}
static inline unsigned char *cursor_topn(struct cursor *cur, int len, int n)
{
n += 1;
if (unlikely(cur->p - len*n < cur->start)) {
return NULL;
}
return cur->p - len*n;
}
static inline unsigned char *cursor_top(struct cursor *cur, int len)
{
if (unlikely(cur->p - len < cur->start)) {
return NULL;
}
return cur->p - len;
}
static inline int cursor_top_int(struct cursor *cur, int *i)
{
u8 *p;
if (unlikely(!(p = cursor_top(cur, sizeof(*i))))) {
return 0;
}
*i = *((int*)p);
return 1;
}
static inline int cursor_pop(struct cursor *cur, u8 *data, int len)
{
if (unlikely(cur->p - len < cur->start)) {
return 0;
}
cur->p -= len;
memcpy(data, cur->p, len);
return 1;
}
static inline int cursor_push(struct cursor *cursor, u8 *data, int len)
{
if (unlikely(cursor->p + len >= cursor->end)) {
return 0;
}
if (cursor->p != data)
memcpy(cursor->p, data, len);
cursor->p += len;
return 1;
}
static inline int cursor_push_int(struct cursor *cursor, int i)
{
return cursor_push(cursor, (u8*)&i, sizeof(i));
}
static inline size_t cursor_count(struct cursor *cursor, size_t elem_size)
{
return (cursor->p - cursor->start)/elem_size;
}
/* TODO: push_varint */
static inline int push_varint(struct cursor *cursor, int n)
{
int ok, len;
unsigned char b;
len = 0;
while (1) {
b = (n & 0xFF) | 0x80;
n >>= 7;
if (n == 0) {
b &= 0x7F;
ok = cursor_push_byte(cursor, b);
len++;
if (!ok) return 0;
break;
}
ok = cursor_push_byte(cursor, b);
len++;
if (!ok) return 0;
}
return len;
}
/* TODO: pull_varint */
static inline int pull_varint(struct cursor *cursor, int *n)
{
int ok, i;
unsigned char b;
*n = 0;
for (i = 0;; i++) {
ok = pull_byte(cursor, &b);
if (!ok) return 0;
*n |= ((int)b & 0x7F) << (i * 7);
/* is_last */
if ((b & 0x80) == 0) {
return i+1;
}
if (i == 4) return 0;
}
return 0;
}
static inline int cursor_pull_int(struct cursor *cursor, int *i)
{
return cursor_pull(cursor, (u8*)i, sizeof(*i));
}
static inline int cursor_push_u32(struct cursor *cursor, uint32_t i) {
return cursor_push(cursor, (unsigned char*)&i, sizeof(i));
}
static inline int cursor_push_u16(struct cursor *cursor, u16 i)
{
return cursor_push(cursor, (u8*)&i, sizeof(i));
}
static inline void *index_cursor(struct cursor *cursor, unsigned int index, int elem_size)
{
u8 *p;
p = &cursor->start[elem_size * index];
if (unlikely(p >= cursor->end))
return NULL;
return (void*)p;
}
static inline int push_sized_str(struct cursor *cursor, const char *str, int len)
{
return cursor_push(cursor, (u8*)str, len);
}
static inline int cursor_push_lowercase(struct cursor *cur, const char *str, int len)
{
int i;
if (unlikely(cur->p + len >= cur->end))
return 0;
for (i = 0; i < len; i++)
cur->p[i] = tolower(str[i]);
cur->p += len;
return 1;
}
static inline int cursor_push_str(struct cursor *cursor, const char *str)
{
return cursor_push(cursor, (u8*)str, (int)strlen(str));
}
static inline int cursor_push_c_str(struct cursor *cursor, const char *str)
{
return cursor_push_str(cursor, str) && cursor_push_byte(cursor, 0);
}
/* TODO: push varint size */
static inline int push_prefixed_str(struct cursor *cursor, const char *str)
{
int ok, len;
len = (int)strlen(str);
ok = push_varint(cursor, len);
if (!ok) return 0;
return push_sized_str(cursor, str, len);
}
static inline int pull_prefixed_str(struct cursor *cursor, struct cursor *dest_buf, const char **str)
{
int len, ok;
ok = pull_varint(cursor, &len);
if (!ok) return 0;
if (unlikely(dest_buf->p + len > dest_buf->end)) {
return 0;
}
ok = pull_data_into_cursor(cursor, dest_buf, (unsigned char**)str, len);
if (!ok) return 0;
ok = cursor_push_byte(dest_buf, 0);
return 1;
}
static inline int cursor_remaining_capacity(struct cursor *cursor)
{
return (int)(cursor->end - cursor->p);
}
#define max(a,b) ((a) > (b) ? (a) : (b))
static inline void cursor_print_around(struct cursor *cur, int range)
{
unsigned char *c;
printf("[%ld/%ld]\n", cur->p - cur->start, cur->end - cur->start);
c = max(cur->p - range, cur->start);
for (; c < cur->end && c < (cur->p + range); c++) {
printf("%02x", *c);
}
printf("\n");
c = max(cur->p - range, cur->start);
for (; c < cur->end && c < (cur->p + range); c++) {
if (c == cur->p) {
printf("^");
continue;
}
printf(" ");
}
printf("\n");
}
#undef max
static inline int pull_bytes(struct cursor *cur, int count, const u8 **bytes) {
if (cur->p + count > cur->end)
return 0;
*bytes = cur->p;
cur->p += count;
return 1;
}
static inline int parse_str(struct cursor *cur, const char *str) {
int i;
char c, cs;
unsigned long len;
len = strlen(str);
if (cur->p + len >= cur->end)
return 0;
for (i = 0; i < len; i++) {
c = tolower(cur->p[i]);
cs = tolower(str[i]);
if (c != cs)
return 0;
}
cur->p += len;
return 1;
}
static inline int is_whitespace(char c) {
return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
}
static inline int is_underscore(char c) {
return c == '_';
}
static inline int is_utf8_byte(u8 c) {
return c & 0x80;
}
static inline int parse_utf8_char(struct cursor *cursor, unsigned int *code_point, unsigned int *utf8_length)
{
u8 first_byte;
if (!parse_byte(cursor, &first_byte))
return 0; // Not enough data
// Determine the number of bytes in this UTF-8 character
int remaining_bytes = 0;
if (first_byte < 0x80) {
*code_point = first_byte;
return 1;
} else if ((first_byte & 0xE0) == 0xC0) {
remaining_bytes = 1;
*utf8_length = remaining_bytes + 1;
*code_point = first_byte & 0x1F;
} else if ((first_byte & 0xF0) == 0xE0) {
remaining_bytes = 2;
*utf8_length = remaining_bytes + 1;
*code_point = first_byte & 0x0F;
} else if ((first_byte & 0xF8) == 0xF0) {
remaining_bytes = 3;
*utf8_length = remaining_bytes + 1;
*code_point = first_byte & 0x07;
} else {
remaining_bytes = 0;
*utf8_length = 1; // Assume 1 byte length for unrecognized UTF-8 characters
// TODO: We need to gracefully handle unrecognized UTF-8 characters
printf("Invalid UTF-8 byte: %x\n", *code_point);
*code_point = ((first_byte & 0xF0) << 6); // Prevent testing as punctuation
return 0; // Invalid first byte
}
// Peek at remaining bytes
for (int i = 0; i < remaining_bytes; ++i) {
signed char next_byte;
if ((next_byte = peek_char(cursor, i+1)) == -1) {
*utf8_length = 1;
return 0; // Not enough data
}
// Debugging lines
//printf("Cursor: %s\n", cursor->p);
//printf("Codepoint: %x\n", *code_point);
//printf("Codepoint <<6: %x\n", ((*code_point << 6) | (next_byte & 0x3F)));
//printf("Remaining bytes: %x\n", remaining_bytes);
//printf("First byte: %x\n", first_byte);
//printf("Next byte: %x\n", next_byte);
//printf("Bitwise AND result: %x\n", (next_byte & 0xC0));
if ((next_byte & 0xC0) != 0x80) {
*utf8_length = 1;
return 0; // Invalid byte in sequence
}
*code_point = (*code_point << 6) | (next_byte & 0x3F);
}
return 1;
}
/**
* Checks if a given Unicode code point is a punctuation character
*
* @param codepoint The Unicode code point to check. @return true if the
* code point is a punctuation character, false otherwise.
*/
static inline int is_punctuation(unsigned int codepoint) {
// Check for underscore (underscore is not treated as punctuation)
if (is_underscore(codepoint))
return 0;
// Check for ASCII punctuation
if (ispunct(codepoint))
return 1;
// Check for Unicode punctuation exceptions (punctuation allowed in hashtags)
if (codepoint == 0x301C || codepoint == 0xFF5E) // Japanese Wave Dash / Tilde
return 0;
// Check for Unicode punctuation
// NOTE: We may need to adjust the codepoint ranges in the future,
// to include/exclude certain types of Unicode characters in hashtags.
// Unicode Blocks Reference: https://www.compart.com/en/unicode/block
return (
// Latin-1 Supplement No-Break Space (NBSP): U+00A0
(codepoint == 0x00A0) ||
// Latin-1 Supplement Punctuation: U+00A1 to U+00BF
(codepoint >= 0x00A1 && codepoint <= 0x00BF) ||
// General Punctuation: U+2000 to U+206F
(codepoint >= 0x2000 && codepoint <= 0x206F) ||
// Currency Symbols: U+20A0 to U+20CF
(codepoint >= 0x20A0 && codepoint <= 0x20CF) ||
// Supplemental Punctuation: U+2E00 to U+2E7F
(codepoint >= 0x2E00 && codepoint <= 0x2E7F) ||
// CJK Symbols and Punctuation: U+3000 to U+303F
(codepoint >= 0x3000 && codepoint <= 0x303F) ||
// Ideographic Description Characters: U+2FF0 to U+2FFF
(codepoint >= 0x2FF0 && codepoint <= 0x2FFF)
);
}
static inline int is_right_boundary(int c) {
return is_whitespace(c) || is_punctuation(c);
}
static inline int is_left_boundary(char c) {
return is_right_boundary(c) || is_utf8_byte(c);
}
static inline int is_alphanumeric(char c) {
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
}
static inline int consume_until_boundary(struct cursor *cur) {
unsigned int c;
unsigned int char_length = 1;
unsigned int *utf8_char_length = &char_length;
while (cur->p < cur->end) {
c = *cur->p;
*utf8_char_length = 1;
if (is_whitespace(c))
return 1;
// Need to check for UTF-8 characters, which can be multiple bytes long
if (is_utf8_byte(c)) {
if (!parse_utf8_char(cur, &c, utf8_char_length)) {
if (!is_right_boundary(c)){
// TODO: We should work towards handling all UTF-8 characters.
printf("Invalid UTF-8 code point: %x\n", c);
}
}
}
if (is_right_boundary(c))
return 1;
// Need to use a variable character byte length for UTF-8 (2-4 bytes)
if (cur->p + *utf8_char_length <= cur->end)
cur->p += *utf8_char_length;
else
cur->p++;
}
return 1;
}
static inline int consume_until_whitespace(struct cursor *cur, int or_end) {
char c;
int consumedAtLeastOne = 0;
while (cur->p < cur->end) {
c = *cur->p;
if (is_whitespace(c))
return consumedAtLeastOne;
cur->p++;
consumedAtLeastOne = 1;
}
return or_end;
}
static inline int consume_until_non_alphanumeric(struct cursor *cur, int or_end) {
char c;
int consumedAtLeastOne = 0;
while (cur->p < cur->end) {
c = *cur->p;
if (!is_alphanumeric(c))
return consumedAtLeastOne;
cur->p++;
consumedAtLeastOne = 1;
}
return or_end;
}
static inline int cursor_memset(struct cursor *cursor, unsigned char c, int n)
{
if (cursor->p + n >= cursor->end)
return 0;
memset(cursor->p, c, n);
cursor->p += n;
return 1;
}
#endif
+6
View File
@@ -5,3 +5,9 @@
#include "damus.h"
#include "bolt11.h"
#include "amount.h"
#include "nostr_bech32.h"
#include "wasm.h"
#include "nostrscript.h"
#include "nostrdb.h"
#include "lmdb.h"
+185 -134
View File
@@ -6,88 +6,12 @@
//
#include "damus.h"
#include "cursor.h"
#include "bolt11.h"
#include "bech32.h"
#include <stdlib.h>
#include <string.h>
typedef unsigned char u8;
struct cursor {
const u8 *p;
const u8 *start;
const u8 *end;
};
static inline int is_whitespace(char c) {
return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
}
static inline int is_boundary(char c) {
return !isalnum(c);
}
static inline int is_invalid_url_ending(char c) {
return c == '!' || c == '?' || c == ')' || c == '.' || c == ',' || c == ';';
}
static void make_cursor(struct cursor *c, const u8 *content, size_t len)
{
c->start = content;
c->end = content + len;
c->p = content;
}
static int consume_until_boundary(struct cursor *cur) {
char c;
while (cur->p < cur->end) {
c = *cur->p;
if (is_boundary(c))
return 1;
cur->p++;
}
return 1;
}
static int consume_until_whitespace(struct cursor *cur, int or_end) {
char c;
bool consumedAtLeastOne = false;
while (cur->p < cur->end) {
c = *cur->p;
if (is_whitespace(c))
return consumedAtLeastOne;
cur->p++;
consumedAtLeastOne = true;
}
return or_end;
}
static int parse_char(struct cursor *cur, char c) {
if (cur->p >= cur->end)
return 0;
if (*cur->p == c) {
cur->p++;
return 1;
}
return 0;
}
static inline int peek_char(struct cursor *cur, int ind) {
if ((cur->p + ind < cur->start) || (cur->p + ind >= cur->end))
return -1;
return *(cur->p + ind);
}
static int parse_digit(struct cursor *cur, int *digit) {
int c;
if ((c = peek_char(cur, 0)) == -1)
@@ -103,32 +27,10 @@ static int parse_digit(struct cursor *cur, int *digit) {
return 0;
}
static int parse_str(struct cursor *cur, const char *str) {
int i;
char c, cs;
unsigned long len;
len = strlen(str);
if (cur->p + len >= cur->end)
return 0;
for (i = 0; i < len; i++) {
c = tolower(cur->p[i]);
cs = tolower(str[i]);
if (c != cs)
return 0;
}
cur->p += len;
return 1;
}
static int parse_mention(struct cursor *cur, struct block *block) {
static int parse_mention_index(struct cursor *cur, struct note_block *block) {
int d1, d2, d3, ind;
const u8 *start = cur->p;
u8 *start = cur->p;
if (!parse_str(cur, "#["))
return 0;
@@ -151,15 +53,15 @@ static int parse_mention(struct cursor *cur, struct block *block) {
return 0;
}
block->type = BLOCK_MENTION;
block->block.mention = ind;
block->type = BLOCK_MENTION_INDEX;
block->block.mention_index = ind;
return 1;
}
static int parse_hashtag(struct cursor *cur, struct block *block) {
static int parse_hashtag(struct cursor *cur, struct note_block *block) {
int c;
const u8 *start = cur->p;
u8 *start = cur->p;
if (!parse_char(cur, '#'))
return 0;
@@ -179,7 +81,7 @@ static int parse_hashtag(struct cursor *cur, struct block *block) {
return 1;
}
static int add_block(struct blocks *blocks, struct block block)
static int add_block(struct note_blocks *blocks, struct note_block block)
{
if (blocks->num_blocks + 1 >= MAX_BLOCKS)
return 0;
@@ -188,9 +90,9 @@ static int add_block(struct blocks *blocks, struct block block)
return 1;
}
static int add_text_block(struct blocks *blocks, const u8 *start, const u8 *end)
static int add_text_block(struct note_blocks *blocks, const u8 *start, const u8 *end)
{
struct block b;
struct note_block b;
if (start == end)
return 1;
@@ -202,8 +104,74 @@ static int add_text_block(struct blocks *blocks, const u8 *start, const u8 *end)
return add_block(blocks, b);
}
static int parse_url(struct cursor *cur, struct block *block) {
const u8 *start = cur->p;
static int consume_url_fragment(struct cursor *cur)
{
int c;
if ((c = peek_char(cur, 0)) < 0)
return 1;
if (c != '#' && c != '?') {
return 1;
}
cur->p++;
return consume_until_whitespace(cur, 1);
}
static int consume_url_path(struct cursor *cur)
{
int c;
if ((c = peek_char(cur, 0)) < 0)
return 1;
if (c != '/') {
return 1;
}
while (cur->p < cur->end) {
c = *cur->p;
if (c == '?' || c == '#' || is_whitespace(c)) {
return 1;
}
cur->p++;
}
return 1;
}
static int consume_url_host(struct cursor *cur)
{
char c;
int count = 0;
while (cur->p < cur->end) {
c = *cur->p;
// TODO: handle IDNs
if (is_alphanumeric(c) || c == '.' || c == '-')
{
count++;
cur->p++;
continue;
}
return count != 0;
}
// this means the end of the URL hostname is the end of the buffer and we finished
return count != 0;
}
static int parse_url(struct cursor *cur, struct note_block *block) {
u8 *start = cur->p;
u8 *host;
int host_len;
struct cursor path_cur;
if (!parse_str(cur, "http"))
return 0;
@@ -219,15 +187,58 @@ static int parse_url(struct cursor *cur, struct block *block) {
return 0;
}
}
if (!consume_until_whitespace(cur, 1)) {
cur->p = start;
return 0;
// make sure to save the hostname. We will use this to detect damus.io links
host = cur->p;
if (!consume_url_host(cur)) {
cur->p = start;
return 0;
}
// strip any unwanted characters
while(is_invalid_url_ending(peek_char(cur, -1))) cur->p--;
// get the length of the host string
host_len = (int)(cur->p - host);
// save the current parse state so that we can continue from here when
// parsing the bech32 in the damus.io link if we have it
copy_cursor(cur, &path_cur);
// skip leading /
cursor_skip(&path_cur, 1);
if (!consume_url_path(cur)) {
cur->p = start;
return 0;
}
if (!consume_url_fragment(cur)) {
cur->p = start;
return 0;
}
// smart parens
if (start - 1 >= 0 &&
start < cur->end &&
*(start - 1) == '(' &&
(cur->p - 1) < cur->end &&
*(cur->p - 1) == ')')
{
cur->p--;
}
// save the bech32 string pos in case we hit a damus.io link
block->block.str.start = (const char *)path_cur.p;
// if we have a damus link, make it a mention
if (host_len == 8
&& !strncmp((const char *)host, "damus.io", 8)
&& parse_nostr_bech32(&path_cur, &block->block.mention_bech32.bech32))
{
block->block.str.end = (const char *)path_cur.p;
block->type = BLOCK_MENTION_BECH32;
return 1;
}
block->type = BLOCK_URL;
block->block.str.start = (const char *)start;
block->block.str.end = (const char *)cur->p;
@@ -235,8 +246,8 @@ static int parse_url(struct cursor *cur, struct block *block) {
return 1;
}
static int parse_invoice(struct cursor *cur, struct block *block) {
const u8 *start, *end;
static int parse_invoice(struct cursor *cur, struct note_block *block) {
u8 *start, *end;
char *fail;
struct bolt11 *bolt11;
// optional
@@ -274,7 +285,28 @@ static int parse_invoice(struct cursor *cur, struct block *block) {
return 1;
}
static int add_text_then_block(struct cursor *cur, struct blocks *blocks, struct block block, const u8 **start, const u8 *pre_mention)
static int parse_mention_bech32(struct cursor *cur, struct note_block *block) {
u8 *start = cur->p;
parse_char(cur, '@');
parse_str(cur, "nostr:");
block->block.str.start = (const char *)cur->p;
if (!parse_nostr_bech32(cur, &block->block.mention_bech32.bech32)) {
cur->p = start;
return 0;
}
block->block.str.end = (const char *)cur->p;
block->type = BLOCK_MENTION_BECH32;
return 1;
}
static int add_text_then_block(struct cursor *cur, struct note_blocks *blocks, struct note_block block, u8 **start, const u8 *pre_mention)
{
if (!add_text_block(blocks, *start, pre_mention))
return 0;
@@ -287,23 +319,29 @@ static int add_text_then_block(struct cursor *cur, struct blocks *blocks, struct
return 1;
}
int damus_parse_content(struct blocks *blocks, const char *content) {
int damus_parse_content(struct note_blocks *blocks, const char *content) {
int cp, c;
struct cursor cur;
struct block block;
const u8 *start, *pre_mention;
struct note_block block;
u8 *start, *pre_mention;
blocks->words = 0;
blocks->num_blocks = 0;
make_cursor(&cur, (const u8*)content, strlen(content));
make_cursor((u8*)content, (u8*)content + strlen(content), &cur);
start = cur.p;
while (cur.p < cur.end && blocks->num_blocks < MAX_BLOCKS) {
cp = peek_char(&cur, -1);
c = peek_char(&cur, 0);
// new word
if (is_whitespace(cp) && !is_whitespace(c)) {
blocks->words++;
}
pre_mention = cur.p;
if (cp == -1 || is_whitespace(cp)) {
if (c == '#' && (parse_mention(&cur, &block) || parse_hashtag(&cur, &block))) {
if (cp == -1 || is_left_boundary(cp) || c == '#') {
if (c == '#' && (parse_mention_index(&cur, &block) || parse_hashtag(&cur, &block))) {
if (!add_text_then_block(&cur, blocks, block, &start, pre_mention))
return 0;
continue;
@@ -315,6 +353,10 @@ int damus_parse_content(struct blocks *blocks, const char *content) {
if (!add_text_then_block(&cur, blocks, block, &start, pre_mention))
return 0;
continue;
} else if ((c == 'n' || c == '@') && parse_mention_bech32(&cur, &block)) {
if (!add_text_then_block(&cur, blocks, block, &start, pre_mention))
return 0;
continue;
}
}
@@ -329,14 +371,23 @@ int damus_parse_content(struct blocks *blocks, const char *content) {
return 1;
}
void blocks_init(struct blocks *blocks) {
blocks->blocks = malloc(sizeof(struct block) * MAX_BLOCKS);
void blocks_init(struct note_blocks *blocks) {
blocks->blocks = malloc(sizeof(struct note_block) * MAX_BLOCKS);
blocks->num_blocks = 0;
}
void blocks_free(struct blocks *blocks) {
if (blocks->blocks) {
free(blocks->blocks);
blocks->num_blocks = 0;
void blocks_free(struct note_blocks *blocks) {
if (!blocks->blocks) {
return;
}
for (int i = 0; i < blocks->num_blocks; ++i) {
if (blocks->blocks[i].type == BLOCK_MENTION_BECH32) {
free(blocks->blocks[i].block.mention_bech32.bech32.buffer);
blocks->blocks[i].block.mention_bech32.bech32.buffer = NULL;
}
}
free(blocks->blocks);
blocks->num_blocks = 0;
}
+3 -38
View File
@@ -9,45 +9,10 @@
#define damus_h
#include <stdio.h>
#include "block.h"
#define MAX_BLOCKS 1024
typedef unsigned char u8;
enum block_type {
BLOCK_HASHTAG = 1,
BLOCK_TEXT = 2,
BLOCK_MENTION = 3,
BLOCK_URL = 4,
BLOCK_INVOICE = 5,
};
typedef struct str_block {
const char *start;
const char *end;
} str_block_t;
typedef struct invoice_block {
struct str_block invstr;
union {
struct bolt11 *bolt11;
};
} invoice_block_t;
typedef struct block {
enum block_type type;
union {
struct str_block str;
struct invoice_block invoice;
int mention;
} block;
} block_t;
typedef struct blocks {
int num_blocks;
struct block *blocks;
} blocks_t;
void blocks_init(struct blocks *blocks);
void blocks_free(struct blocks *blocks);
int damus_parse_content(struct blocks *blocks, const char *content);
int damus_parse_content(struct note_blocks *blocks, const char *content);
#endif /* damus_h */
+15
View File
@@ -0,0 +1,15 @@
#ifndef PROTOVERSE_DEBUG_H
#define PROTOVERSE_DEBUG_H
#include <stdio.h>
#define unusual(...) fprintf(stderr, "UNUSUAL: " __VA_ARGS__)
#ifdef DEBUG
#define debug(...) printf(__VA_ARGS__)
#else
#define debug(...)
#endif
#endif /* PROTOVERSE_DEBUG_H */
+34
View File
@@ -0,0 +1,34 @@
#include "error.h"
#include <stdlib.h>
#include <stdarg.h>
int note_error_(struct errors *errs_, struct cursor *p, const char *fmt, ...)
{
static char buf[512];
struct error err;
struct cursor *errs;
va_list ap;
errs = &errs_->cur;
if (errs_->enabled == 0)
return 0;
va_start(ap, fmt);
vsprintf(buf, fmt, ap);
va_end(ap);
err.msg = buf;
err.pos = p ? (int)(p->p - p->start) : 0;
if (!cursor_push_error(errs, &err)) {
fprintf(stderr, "arena OOM when recording error, ");
fprintf(stderr, "errs->p at %ld, remaining %ld, strlen %ld\n",
errs->p - errs->start, errs->end - errs->p, strlen(buf));
}
return 0;
}
+33
View File
@@ -0,0 +1,33 @@
#ifndef PROTOVERSE_ERROR_H
#define PROTOVERSE_ERROR_H
#include "cursor.h"
struct error {
int pos;
const char *msg;
};
struct errors {
struct cursor cur;
int enabled;
};
#define note_error(errs, p, fmt, ...) note_error_(errs, p, "%s: " fmt, __FUNCTION__, ##__VA_ARGS__)
static inline int cursor_push_error(struct cursor *cur, struct error *err)
{
return cursor_push_int(cur, err->pos) &&
cursor_push_c_str(cur, err->msg);
}
static inline int cursor_pull_error(struct cursor *cur, struct error *err)
{
return cursor_pull_int(cur, &err->pos) &&
cursor_pull_c_str(cur, &err->msg);
}
int note_error_(struct errors *errs, struct cursor *p, const char *fmt, ...);
#endif /* PROTOVERSE_ERROR_H */
-9
View File
@@ -39,15 +39,6 @@ bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize)
return slen == 0 && bufsize == 0;
}
static char hexchar(unsigned int val)
{
if (val < 10)
return '0' + val;
if (val < 16)
return 'a' + val - 10;
abort();
}
bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize)
{
size_t i;
+12 -1
View File
@@ -26,7 +26,7 @@ bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize);
/**
* hex_encode - Create a nul-terminated hex string
* @buf: the buffer to read the data from
* @bufsize: the length of @buf
* @bufsize: the length of buf
* @dest: the string to fill
* @destsize: the max size of the string
*
@@ -70,4 +70,15 @@ static inline size_t hex_data_size(size_t strlen)
{
return strlen / 2;
}
static inline char hexchar(unsigned int val)
{
if (val < 10)
return '0' + val;
if (val < 16)
return 'a' + val - 10;
abort();
}
#endif /* CCAN_HEX_H */
+4
View File
@@ -52,9 +52,13 @@
*/
#define unlikely(cond) __builtin_expect(!!(cond), 0)
#else
#ifndef likely
#define likely(cond) (!!(cond))
#endif
#ifndef unlikely
#define unlikely(cond) (!!(cond))
#endif
#endif
#else /* CCAN_LIKELY_DEBUG versions */
#include <ccan/str/str.h>
+306
View File
@@ -0,0 +1,306 @@
//
// nostr_bech32.c
// damus
//
// Created by William Casarin on 2023-04-09.
//
#include "nostr_bech32.h"
#include <stdlib.h>
#include "cursor.h"
#include "bech32.h"
#define MAX_TLVS 16
#define TLV_SPECIAL 0
#define TLV_RELAY 1
#define TLV_AUTHOR 2
#define TLV_KIND 3
#define TLV_KNOWN_TLVS 4
struct nostr_tlv {
u8 type;
u8 len;
const u8 *value;
};
struct nostr_tlvs {
struct nostr_tlv tlvs[MAX_TLVS];
int num_tlvs;
};
static int parse_nostr_tlv(struct cursor *cur, struct nostr_tlv *tlv) {
// get the tlv tag
if (!pull_byte(cur, &tlv->type))
return 0;
// unknown, fail!
if (tlv->type >= TLV_KNOWN_TLVS)
return 0;
// get the length
if (!pull_byte(cur, &tlv->len))
return 0;
// is the reported length greater then our buffer? if so fail
if (cur->p + tlv->len > cur->end)
return 0;
tlv->value = cur->p;
cur->p += tlv->len;
return 1;
}
static int parse_nostr_tlvs(struct cursor *cur, struct nostr_tlvs *tlvs) {
int i;
tlvs->num_tlvs = 0;
for (i = 0; i < MAX_TLVS; i++) {
if (parse_nostr_tlv(cur, &tlvs->tlvs[i])) {
tlvs->num_tlvs++;
} else {
break;
}
}
if (tlvs->num_tlvs == 0)
return 0;
return 1;
}
static int find_tlv(struct nostr_tlvs *tlvs, u8 type, struct nostr_tlv **tlv) {
*tlv = NULL;
for (int i = 0; i < tlvs->num_tlvs; i++) {
if (tlvs->tlvs[i].type == type) {
*tlv = &tlvs->tlvs[i];
return 1;
}
}
return 0;
}
static int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) {
// Parse type
if (strcmp(prefix, "note") == 0) {
*type = NOSTR_BECH32_NOTE;
return 1;
} else if (strcmp(prefix, "npub") == 0) {
*type = NOSTR_BECH32_NPUB;
return 1;
} else if (strcmp(prefix, "nsec") == 0) {
*type = NOSTR_BECH32_NSEC;
return 1;
} else if (strcmp(prefix, "nprofile") == 0) {
*type = NOSTR_BECH32_NPROFILE;
return 1;
} else if (strcmp(prefix, "nevent") == 0) {
*type = NOSTR_BECH32_NEVENT;
return 1;
} else if (strcmp(prefix, "nrelay") == 0) {
*type = NOSTR_BECH32_NRELAY;
return 1;
} else if (strcmp(prefix, "naddr") == 0) {
*type = NOSTR_BECH32_NADDR;
return 1;
}
return 0;
}
static int parse_nostr_bech32_note(struct cursor *cur, struct bech32_note *note) {
return pull_bytes(cur, 32, &note->event_id);
}
static int parse_nostr_bech32_npub(struct cursor *cur, struct bech32_npub *npub) {
return pull_bytes(cur, 32, &npub->pubkey);
}
static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) {
return pull_bytes(cur, 32, &nsec->nsec);
}
static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) {
struct nostr_tlv *tlv;
struct str_block *str;
relays->num_relays = 0;
for (int i = 0; i < tlvs->num_tlvs; i++) {
tlv = &tlvs->tlvs[i];
if (tlv->type != TLV_RELAY)
continue;
if (relays->num_relays + 1 > MAX_RELAYS)
break;
str = &relays->relays[relays->num_relays++];
str->start = (const char*)tlv->value;
str->end = (const char*)(tlv->value + tlv->len);
}
return 1;
}
static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) {
struct nostr_tlvs tlvs;
struct nostr_tlv *tlv;
if (!parse_nostr_tlvs(cur, &tlvs))
return 0;
if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv))
return 0;
if (tlv->len != 32)
return 0;
nevent->event_id = tlv->value;
if (find_tlv(&tlvs, TLV_AUTHOR, &tlv)) {
nevent->pubkey = tlv->value;
} else {
nevent->pubkey = NULL;
}
return tlvs_to_relays(&tlvs, &nevent->relays);
}
static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *naddr) {
struct nostr_tlvs tlvs;
struct nostr_tlv *tlv;
if (!parse_nostr_tlvs(cur, &tlvs))
return 0;
if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv))
return 0;
naddr->identifier.start = (const char*)tlv->value;
naddr->identifier.end = (const char*)tlv->value + tlv->len;
if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv))
return 0;
naddr->pubkey = tlv->value;
return tlvs_to_relays(&tlvs, &naddr->relays);
}
static int parse_nostr_bech32_nprofile(struct cursor *cur, struct bech32_nprofile *nprofile) {
struct nostr_tlvs tlvs;
struct nostr_tlv *tlv;
if (!parse_nostr_tlvs(cur, &tlvs))
return 0;
if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv))
return 0;
if (tlv->len != 32)
return 0;
nprofile->pubkey = tlv->value;
return tlvs_to_relays(&tlvs, &nprofile->relays);
}
static int parse_nostr_bech32_nrelay(struct cursor *cur, struct bech32_nrelay *nrelay) {
struct nostr_tlvs tlvs;
struct nostr_tlv *tlv;
if (!parse_nostr_tlvs(cur, &tlvs))
return 0;
if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv))
return 0;
nrelay->relay.start = (const char*)tlv->value;
nrelay->relay.end = (const char*)tlv->value + tlv->len;
return 1;
}
int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj) {
u8 *start, *end;
start = cur->p;
if (!consume_until_non_alphanumeric(cur, 1)) {
cur->p = start;
return 0;
}
end = cur->p;
size_t data_len;
size_t input_len = end - start;
if (input_len < 10 || input_len > 10000) {
return 0;
}
obj->buffer = malloc(input_len * 2);
if (!obj->buffer)
return 0;
u8 data[input_len];
char prefix[input_len];
if (bech32_decode_len(prefix, data, &data_len, (const char*)start, input_len) == BECH32_ENCODING_NONE) {
cur->p = start;
return 0;
}
obj->buflen = 0;
if (!bech32_convert_bits(obj->buffer, &obj->buflen, 8, data, data_len, 5, 0)) {
goto fail;
}
if (!parse_nostr_bech32_type(prefix, &obj->type)) {
goto fail;
}
struct cursor bcur;
make_cursor(obj->buffer, obj->buffer + obj->buflen, &bcur);
switch (obj->type) {
case NOSTR_BECH32_NOTE:
if (!parse_nostr_bech32_note(&bcur, &obj->data.note))
goto fail;
break;
case NOSTR_BECH32_NPUB:
if (!parse_nostr_bech32_npub(&bcur, &obj->data.npub))
goto fail;
break;
case NOSTR_BECH32_NSEC:
if (!parse_nostr_bech32_nsec(&bcur, &obj->data.nsec))
goto fail;
break;
case NOSTR_BECH32_NEVENT:
if (!parse_nostr_bech32_nevent(&bcur, &obj->data.nevent))
goto fail;
break;
case NOSTR_BECH32_NADDR:
if (!parse_nostr_bech32_naddr(&bcur, &obj->data.naddr))
goto fail;
break;
case NOSTR_BECH32_NPROFILE:
if (!parse_nostr_bech32_nprofile(&bcur, &obj->data.nprofile))
goto fail;
break;
case NOSTR_BECH32_NRELAY:
if (!parse_nostr_bech32_nrelay(&bcur, &obj->data.nrelay))
goto fail;
break;
}
return 1;
fail:
free(obj->buffer);
cur->p = start;
return 0;
}
+84
View File
@@ -0,0 +1,84 @@
//
// nostr_bech32.h
// damus
//
// Created by William Casarin on 2023-04-09.
//
#ifndef nostr_bech32_h
#define nostr_bech32_h
#include <stdio.h>
#include "str_block.h"
#include "cursor.h"
typedef unsigned char u8;
#define MAX_RELAYS 10
struct relays {
struct str_block relays[MAX_RELAYS];
int num_relays;
};
enum nostr_bech32_type {
NOSTR_BECH32_NOTE = 1,
NOSTR_BECH32_NPUB = 2,
NOSTR_BECH32_NPROFILE = 3,
NOSTR_BECH32_NEVENT = 4,
NOSTR_BECH32_NRELAY = 5,
NOSTR_BECH32_NADDR = 6,
NOSTR_BECH32_NSEC = 7,
};
struct bech32_note {
const u8 *event_id;
};
struct bech32_npub {
const u8 *pubkey;
};
struct bech32_nsec {
const u8 *nsec;
};
struct bech32_nevent {
struct relays relays;
const u8 *event_id;
const u8 *pubkey; // optional
};
struct bech32_nprofile {
struct relays relays;
const u8 *pubkey;
};
struct bech32_naddr {
struct relays relays;
struct str_block identifier;
const u8 *pubkey;
};
struct bech32_nrelay {
struct str_block relay;
};
typedef struct nostr_bech32 {
enum nostr_bech32_type type;
u8 *buffer; // holds strings and tlv stuff
size_t buflen;
union {
struct bech32_note note;
struct bech32_npub npub;
struct bech32_nsec nsec;
struct bech32_nevent nevent;
struct bech32_nprofile nprofile;
struct bech32_naddr naddr;
struct bech32_nrelay nrelay;
} data;
} nostr_bech32_t;
int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj);
#endif /* nostr_bech32_h */
+42
View File
@@ -0,0 +1,42 @@
#ifndef CURSOR_PARSER
#define CURSOR_PARSER
#include "cursor.h"
static int consume_bytes(struct cursor *cursor, const unsigned char *match, int len)
{
int i;
if (cursor->p + len > cursor->end) {
fprintf(stderr, "consume_bytes overflow\n");
return 0;
}
for (i = 0; i < len; i++) {
if (cursor->p[i] != match[i])
return 0;
}
cursor->p += len;
return 1;
}
static inline int consume_byte(struct cursor *cursor, unsigned char match)
{
if (unlikely(cursor->p >= cursor->end))
return 0;
if (*cursor->p != match)
return 0;
cursor->p++;
return 1;
}
static inline int consume_u32(struct cursor *cursor, unsigned int match)
{
return consume_bytes(cursor, (unsigned char*)&match, sizeof(match));
}
#endif /* CURSOR_PARSER */
+16
View File
@@ -0,0 +1,16 @@
//
// str_block.h
// damus
//
// Created by William Casarin on 2023-04-09.
//
#ifndef str_block_h
#define str_block_h
typedef struct str_block {
const char *start;
const char *end;
} str_block_t;
#endif /* str_block_h */
+14
View File
@@ -0,0 +1,14 @@
#ifndef PROTOVERSE_TYPEDEFS_H
#define PROTOVERSE_TYPEDEFS_H
#include <stdint.h>
typedef unsigned char u8;
typedef unsigned int u32;
typedef unsigned short u16;
typedef uint64_t u64;
typedef int64_t s64;
#endif /* PROTOVERSE_TYPEDEFS_H */
+14
View File
@@ -0,0 +1,14 @@
#ifndef PROTOVERSE_VARINT_H
#define PROTOVERSE_VARINT_H
#define VARINT_MAX_LEN 9
#include <stddef.h>
#include <stdint.h>
size_t varint_put(unsigned char buf[VARINT_MAX_LEN], uint64_t v);
size_t varint_size(uint64_t v);
size_t varint_get(const unsigned char *p, size_t max, int64_t *val);
#endif /* PROTOVERSE_VARINT_H */
+7299
View File
File diff suppressed because it is too large Load Diff
+850
View File
@@ -0,0 +1,850 @@
#ifndef PROTOVERSE_WASM_H
#define PROTOVERSE_WASM_H
static const unsigned char WASM_MAGIC[] = {0,'a','s','m'};
#define WASM_VERSION 0x01
#define MAX_U32_LEB128_BYTES 5
#define MAX_U64_LEB128_BYTES 10
#define MAX_CUSTOM_SECTIONS 32
#define MAX_BUILTINS 64
#define BUILTIN_SUSPEND 42
#define FUNC_TYPE_TAG 0x60
#include "cursor.h"
#include "error.h"
#ifdef NOINLINE
#define INLINE __attribute__((noinline))
#else
#define INLINE inline
#endif
#define interp_error(p, fmt, ...) note_error(&((p)->errors), interp_codeptr(p), fmt, ##__VA_ARGS__)
#define parse_err(p, fmt, ...) note_error(&((p)->errs), &(p)->cur, fmt, ##__VA_ARGS__)
enum valtype {
val_i32 = 0x7F,
val_i64 = 0x7E,
val_f32 = 0x7D,
val_f64 = 0x7C,
val_ref_null = 0xD0,
val_ref_func = 0x70,
val_ref_extern = 0x6F,
};
enum const_instr {
ci_const_i32 = 0x41,
ci_const_i64 = 0x42,
ci_const_f32 = 0x43,
ci_const_f64 = 0x44,
ci_ref_null = 0xD0,
ci_ref_func = 0xD2,
ci_global_get = 0x23,
ci_end = 0x0B,
};
enum limit_type {
limit_min = 0x00,
limit_min_max = 0x01,
};
struct limits {
u32 min;
u32 max;
enum limit_type type;
};
enum section_tag {
section_custom,
section_type,
section_import,
section_function,
section_table,
section_memory,
section_global,
section_export,
section_start,
section_element,
section_code,
section_data,
section_data_count,
section_name,
num_sections,
};
enum name_subsection_tag {
name_subsection_module,
name_subsection_funcs,
name_subsection_locals,
num_name_subsections,
};
enum reftype {
funcref = 0x70,
externref = 0x6F,
};
struct resulttype {
unsigned char *valtypes; /* enum valtype */
u32 num_valtypes;
};
struct functype {
struct resulttype params;
struct resulttype result;
};
struct table {
enum reftype reftype;
struct limits limits;
};
struct tablesec {
struct table *tables;
u32 num_tables;
};
enum elem_mode {
elem_mode_passive,
elem_mode_active,
elem_mode_declarative,
};
struct expr {
u8 *code;
u32 code_len;
};
struct refval {
u32 addr;
};
struct table_inst {
struct refval *refs;
enum reftype reftype;
u32 num_refs;
};
struct numval {
union {
int i32;
u32 u32;
int64_t i64;
uint64_t u64;
float f32;
double f64;
};
};
struct val {
enum valtype type;
union {
struct numval num;
struct refval ref;
};
};
struct elem_inst {
struct val val;
u16 elem;
u16 init;
};
struct elem {
struct expr offset;
u32 tableidx;
struct expr *inits;
u32 num_inits;
enum elem_mode mode;
enum reftype reftype;
struct val val;
};
struct customsec {
const char *name;
unsigned char *data;
u32 data_len;
};
struct elemsec {
struct elem *elements;
u32 num_elements;
};
struct memsec {
struct limits *mems; /* memtype */
u32 num_mems;
};
struct funcsec {
u32 *type_indices;
u32 num_indices;
};
enum mut {
mut_const,
mut_var,
};
struct globaltype {
enum valtype valtype;
enum mut mut;
};
struct globalsec {
struct global *globals;
u32 num_globals;
};
struct typesec {
struct functype *functypes;
u32 num_functypes;
};
enum import_type {
import_func,
import_table,
import_mem,
import_global,
};
struct importdesc {
enum import_type type;
union {
u32 typeidx;
struct limits tabletype;
struct limits memtype;
struct globaltype globaltype;
};
};
struct import {
const char *module_name;
const char *name;
struct importdesc desc;
int resolved_builtin;
};
struct importsec {
struct import *imports;
u32 num_imports;
};
struct global {
struct globaltype type;
struct expr init;
struct val val;
};
struct local_def {
u32 num_types;
enum valtype type;
};
/* "code" */
struct wasm_func {
struct expr code;
struct local_def *local_defs;
u32 num_local_defs;
};
enum func_type {
func_type_wasm,
func_type_builtin,
};
struct func {
union {
struct wasm_func *wasm_func;
struct builtin *builtin;
};
u32 num_locals;
struct functype *functype;
enum func_type type;
const char *name;
u32 idx;
};
struct codesec {
struct wasm_func *funcs;
u32 num_funcs;
};
enum exportdesc {
export_func,
export_table,
export_mem,
export_global,
};
struct wexport {
const char *name;
u32 index;
enum exportdesc desc;
};
struct exportsec {
struct wexport *exports;
u32 num_exports;
};
struct nameassoc {
u32 index;
const char *name;
};
struct namemap {
struct nameassoc *names;
u32 num_names;
};
struct namesec {
const char *module_name;
struct namemap func_names;
int parsed;
};
struct wsection {
enum section_tag tag;
};
enum bulk_tag {
i_memory_copy = 10,
i_memory_fill = 11,
i_table_init = 12,
i_elem_drop = 13,
i_table_copy = 14,
i_table_grow = 15,
i_table_size = 16,
i_table_fill = 17,
};
enum instr_tag {
/* control instructions */
i_unreachable = 0x00,
i_nop = 0x01,
i_block = 0x02,
i_loop = 0x03,
i_if = 0x04,
i_else = 0x05,
i_end = 0x0B,
i_br = 0x0C,
i_br_if = 0x0D,
i_br_table = 0x0E,
i_return = 0x0F,
i_call = 0x10,
i_call_indirect = 0x11,
/* parametric instructions */
i_drop = 0x1A,
i_select = 0x1B,
i_selects = 0x1C,
/* variable instructions */
i_local_get = 0x20,
i_local_set = 0x21,
i_local_tee = 0x22,
i_global_get = 0x23,
i_global_set = 0x24,
i_table_get = 0x25,
i_table_set = 0x26,
/* memory instructions */
i_i32_load = 0x28,
i_i64_load = 0x29,
i_f32_load = 0x2A,
i_f64_load = 0x2B,
i_i32_load8_s = 0x2C,
i_i32_load8_u = 0x2D,
i_i32_load16_s = 0x2E,
i_i32_load16_u = 0x2F,
i_i64_load8_s = 0x30,
i_i64_load8_u = 0x31,
i_i64_load16_s = 0x32,
i_i64_load16_u = 0x33,
i_i64_load32_s = 0x34,
i_i64_load32_u = 0x35,
i_i32_store = 0x36,
i_i64_store = 0x37,
i_f32_store = 0x38,
i_f64_store = 0x39,
i_i32_store8 = 0x3A,
i_i32_store16 = 0x3B,
i_i64_store8 = 0x3C,
i_i64_store16 = 0x3D,
i_i64_store32 = 0x3E,
i_memory_size = 0x3F,
i_memory_grow = 0x40,
/* numeric instructions */
i_i32_const = 0x41,
i_i64_const = 0x42,
i_f32_const = 0x43,
i_f64_const = 0x44,
i_i32_eqz = 0x45,
i_i32_eq = 0x46,
i_i32_ne = 0x47,
i_i32_lt_s = 0x48,
i_i32_lt_u = 0x49,
i_i32_gt_s = 0x4A,
i_i32_gt_u = 0x4B,
i_i32_le_s = 0x4C,
i_i32_le_u = 0x4D,
i_i32_ge_s = 0x4E,
i_i32_ge_u = 0x4F,
i_i64_eqz = 0x50,
i_i64_eq = 0x51,
i_i64_ne = 0x52,
i_i64_lt_s = 0x53,
i_i64_lt_u = 0x54,
i_i64_gt_s = 0x55,
i_i64_gt_u = 0x56,
i_i64_le_s = 0x57,
i_i64_le_u = 0x58,
i_i64_ge_s = 0x59,
i_i64_ge_u = 0x5A,
i_f32_eq = 0x5B,
i_f32_ne = 0x5C,
i_f32_lt = 0x5D,
i_f32_gt = 0x5E,
i_f32_le = 0x5F,
i_f32_ge = 0x60,
i_f64_eq = 0x61,
i_f64_ne = 0x62,
i_f64_lt = 0x63,
i_f64_gt = 0x64,
i_f64_le = 0x65,
i_f64_ge = 0x66,
i_i32_clz = 0x67,
i_i32_ctz = 0x68,
i_i32_popcnt = 0x69,
i_i32_add = 0x6A,
i_i32_sub = 0x6B,
i_i32_mul = 0x6C,
i_i32_div_s = 0x6D,
i_i32_div_u = 0x6E,
i_i32_rem_s = 0x6F,
i_i32_rem_u = 0x70,
i_i32_and = 0x71,
i_i32_or = 0x72,
i_i32_xor = 0x73,
i_i32_shl = 0x74,
i_i32_shr_s = 0x75,
i_i32_shr_u = 0x76,
i_i32_rotl = 0x77,
i_i32_rotr = 0x78,
i_i64_clz = 0x79,
i_i64_ctz = 0x7A,
i_i64_popcnt = 0x7B,
i_i64_add = 0x7C,
i_i64_sub = 0x7D,
i_i64_mul = 0x7E,
i_i64_div_s = 0x7F,
i_i64_div_u = 0x80,
i_i64_rem_s = 0x81,
i_i64_rem_u = 0x82,
i_i64_and = 0x83,
i_i64_or = 0x84,
i_i64_xor = 0x85,
i_i64_shl = 0x86,
i_i64_shr_s = 0x87,
i_i64_shr_u = 0x88,
i_i64_rotl = 0x89,
i_i64_rotr = 0x8A,
i_f32_abs = 0x8b,
i_f32_neg = 0x8c,
i_f32_ceil = 0x8d,
i_f32_floor = 0x8e,
i_f32_trunc = 0x8f,
i_f32_nearest = 0x90,
i_f32_sqrt = 0x91,
i_f32_add = 0x92,
i_f32_sub = 0x93,
i_f32_mul = 0x94,
i_f32_div = 0x95,
i_f32_min = 0x96,
i_f32_max = 0x97,
i_f32_copysign = 0x98,
i_f64_abs = 0x99,
i_f64_neg = 0x9a,
i_f64_ceil = 0x9b,
i_f64_floor = 0x9c,
i_f64_trunc = 0x9d,
i_f64_nearest = 0x9e,
i_f64_sqrt = 0x9f,
i_f64_add = 0xa0,
i_f64_sub = 0xa1,
i_f64_mul = 0xa2,
i_f64_div = 0xa3,
i_f64_min = 0xa4,
i_f64_max = 0xa5,
i_f64_copysign = 0xa6,
i_i32_wrap_i64 = 0xa7,
i_i32_trunc_f32_s = 0xa8,
i_i32_trunc_f32_u = 0xa9,
i_i32_trunc_f64_s = 0xaa,
i_i32_trunc_f64_u = 0xab,
i_i64_extend_i32_s = 0xac,
i_i64_extend_i32_u = 0xad,
i_i64_trunc_f32_s = 0xae,
i_i64_trunc_f32_u = 0xaf,
i_i64_trunc_f64_s = 0xb0,
i_i64_trunc_f64_u = 0xb1,
i_f32_convert_i32_s = 0xb2,
i_f32_convert_i32_u = 0xb3,
i_f32_convert_i64_s = 0xb4,
i_f32_convert_i64_u = 0xb5,
i_f32_demote_f64 = 0xb6,
i_f64_convert_i32_s = 0xb7,
i_f64_convert_i32_u = 0xb8,
i_f64_convert_i64_s = 0xb9,
i_f64_convert_i64_u = 0xba,
i_f64_promote_f32 = 0xbb,
i_i32_reinterpret_f32 = 0xbc,
i_i64_reinterpret_f64 = 0xbd,
i_f32_reinterpret_i32 = 0xbe,
i_f64_reinterpret_i64 = 0xbf,
i_i32_extend8_s = 0xc0,
i_i32_extend16_s = 0xc1,
i_i64_extend8_s = 0xc2,
i_i64_extend16_s = 0xc3,
i_i64_extend32_s = 0xc4,
i_ref_null = 0xD0,
i_ref_is_null = 0xD1,
i_ref_func = 0xD2,
i_bulk_op = 0xFC,
/* TODO: more instrs */
};
enum blocktype_tag {
blocktype_empty,
blocktype_valtype,
blocktype_index,
};
struct blocktype {
enum blocktype_tag tag;
union {
enum valtype valtype;
int type_index;
};
};
struct instrs {
unsigned char *data;
u32 len;
};
struct block {
struct blocktype type;
struct expr instrs;
};
struct memarg {
u32 offset;
u32 align;
};
struct br_table {
u32 num_label_indices;
u32 label_indices[512];
u32 default_label;
};
struct call_indirect {
u32 tableidx;
u32 typeidx;
};
struct table_init {
u32 tableidx;
u32 elemidx;
};
struct table_copy {
u32 from;
u32 to;
};
struct bulk_op {
enum bulk_tag tag;
union {
struct table_init table_init;
struct table_copy table_copy;
u32 idx;
};
};
struct select_instr {
u8 *valtypes;
u32 num_valtypes;
};
struct instr {
enum instr_tag tag;
int pos;
union {
struct br_table br_table;
struct bulk_op bulk_op;
struct call_indirect call_indirect;
struct memarg memarg;
struct select_instr select;
struct block block;
struct expr else_block;
double f64;
float f32;
int i32;
u32 u32;
int64_t i64;
u64 u64;
unsigned char memidx;
enum reftype reftype;
};
};
enum datamode {
datamode_active,
datamode_passive,
};
struct wdata_active {
u32 mem_index;
struct expr offset_expr;
};
struct wdata {
struct wdata_active active;
u8 *bytes;
u32 bytes_len;
enum datamode mode;
};
struct datasec {
struct wdata *datas;
u32 num_datas;
};
struct startsec {
u32 start_fn;
};
struct module {
unsigned int parsed;
unsigned int custom_sections;
struct func *funcs;
u32 num_funcs;
struct customsec custom_section[MAX_CUSTOM_SECTIONS];
struct typesec type_section;
struct funcsec func_section;
struct importsec import_section;
struct exportsec export_section;
struct codesec code_section;
struct tablesec table_section;
struct memsec memory_section;
struct globalsec global_section;
struct startsec start_section;
struct elemsec element_section;
struct datasec data_section;
struct namesec name_section;
};
// make sure the struct is packed so that
struct label {
u32 instr_pos; // resolved status is stored in HOB of pos
u32 jump;
};
struct callframe {
struct cursor code;
struct val *locals;
struct func *func;
u16 prev_stack_items;
};
struct resolver {
u16 label;
u8 end_tag;
u8 start_tag;
};
struct global_inst {
struct val val;
};
struct module_inst {
struct table_inst *tables;
struct global_inst *globals;
struct elem_inst *elements;
u32 num_tables;
u32 num_globals;
u32 num_elements;
int start_fn;
unsigned char *globals_init;
};
struct wasi {
int argc;
const char **argv;
int environc;
const char **environ;
};
struct wasm_interp;
struct builtin {
const char *name;
int (*fn)(struct wasm_interp *);
int (*prepare_args)(struct wasm_interp *);
};
struct wasm_interp {
struct module *module;
struct module_inst module_inst;
struct wasi wasi;
void *context;
struct builtin builtins[MAX_BUILTINS];
int num_builtins;
int prev_resolvers, quitting;
struct errors errors; /* struct error */
size_t ops;
struct cursor callframes; /* struct callframe */
struct cursor stack; /* struct val */
struct cursor mem; /* u8/mixed */
struct cursor memory; /* memory pages (65536 blocks) */
struct cursor locals; /* struct val */
struct cursor labels; /* struct labels */
struct cursor num_labels;
// resolve stack for the current function. every time a control
// instruction is encountered, the label index is pushed. When an
// instruction is popped, we can resolve the label
struct cursor resolver_stack; /* struct resolver */
struct cursor resolver_offsets; /* int */
};
struct wasm_parser {
struct module module;
struct builtin *builtins;
u32 num_builtins;
struct cursor cur;
struct cursor mem;
struct errors errs;
};
int run_wasm(unsigned char *wasm, unsigned long len, int argc, const char **argv, char **env, int *retval);
int parse_wasm(struct wasm_parser *p);
int wasm_interp_init(struct wasm_interp *interp, struct module *module);
void wasm_parser_free(struct wasm_parser *parser);
void wasm_parser_init(struct wasm_parser *p, u8 *wasm, size_t wasm_len, size_t arena_size, struct builtin *, int num_builtins);
void wasm_interp_free(struct wasm_interp *interp);
int interp_wasm_module(struct wasm_interp *interp, int *retval);
int interp_wasm_module_resume(struct wasm_interp *interp, int *retval);
void print_error_backtrace(struct errors *errors);
void setup_wasi(struct wasm_interp *interp, int argc, const char **argv, char **env);
void print_callstack(struct wasm_interp *interp);
// builtin helpers
int get_params(struct wasm_interp *interp, struct val** vals, u32 num_vals);
int get_var_params(struct wasm_interp *interp, struct val** vals, u32 *num_vals);
u8 *interp_mem_ptr(struct wasm_interp *interp, u32 ptr, int size);
static INLINE struct callframe *top_callframe(struct cursor *cur)
{
return (struct callframe*)cursor_top(cur, sizeof(struct callframe));
}
static INLINE struct cursor *interp_codeptr(struct wasm_interp *interp)
{
struct callframe *frame;
if (unlikely(!(frame = top_callframe(&interp->callframes))))
return 0;
return &frame->code;
}
static INLINE int mem_ptr_str(struct wasm_interp *interp, u32 ptr,
const char **str)
{
// still technically unsafe if the string runs over the end of memory...
if (!(*str = (const char*)interp_mem_ptr(interp, ptr, 1))) {
return interp_error(interp, "int memptr");
}
return 1;
}
static INLINE int mem_ptr_i32(struct wasm_interp *interp, u32 ptr, int **i)
{
if (!(*i = (int*)interp_mem_ptr(interp, ptr, sizeof(int))))
return interp_error(interp, "int memptr");
return 1;
}
static INLINE int cursor_pushval(struct cursor *cur, struct val *val)
{
return cursor_push(cur, (u8*)val, sizeof(*val));
}
static INLINE int cursor_push_i32(struct cursor *stack, int i)
{
struct val val;
val.type = val_i32;
val.num.i32 = i;
return cursor_pushval(stack, &val);
}
static INLINE int stack_push_i32(struct wasm_interp *interp, int i)
{
return cursor_push_i32(&interp->stack, i);
}
static INLINE struct callframe *top_callframes(struct cursor *cur, int top)
{
return (struct callframe*)cursor_topn(cur, sizeof(struct callframe), top);
}
static INLINE int was_section_parsed(struct module *module,
enum section_tag section)
{
if (section == section_custom)
return module->custom_sections > 0;
return module->parsed & (1 << section);
}
#endif /* PROTOVERSE_WASM_H */
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,14 @@
{
"pins" : [
{
"identity" : "gsplayer",
"kind" : "remoteSourceControl",
"location" : "https://github.com/wxxsw/GSPlayer",
"state" : {
"revision" : "aa6dad7943d52f5207f7fcc2ad3e4274583443b8",
"version" : "0.2.26"
}
},
{
"identity" : "kingfisher",
"kind" : "remoteSourceControl",
@@ -18,21 +27,29 @@
}
},
{
"identity" : "starscream",
"identity" : "swift-markdown-ui",
"kind" : "remoteSourceControl",
"location" : "https://github.com/daltoniam/Starscream",
"location" : "https://github.com/damus-io/swift-markdown-ui",
"state" : {
"revision" : "df8d82047f6654d8e4b655d1b1525c64e1059d21",
"version" : "4.0.4"
"revision" : "76bb7971da7fbf429de1c84f1244adf657242fee"
}
},
{
"identity" : "vault",
"identity" : "swift-snapshot-testing",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SparrowTek/Vault",
"location" : "https://github.com/pointfreeco/swift-snapshot-testing",
"state" : {
"revision" : "87db56c3c8b6421c65b0745f73e08b0dc56f79d4",
"version" : "1.0.3"
"revision" : "5b356adceabff6ca027f6574aac79e9fee145d26",
"version" : "1.14.1"
}
},
{
"identity" : "swift-syntax",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-syntax.git",
"state" : {
"revision" : "74203046135342e4a4a627476dd6caf8b28fe11b",
"version" : "509.0.0"
}
}
],
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1500"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "D79C4C132AFEB061003A41B4"
BuildableName = "DamusNotificationService.appex"
BlueprintName = "DamusNotificationService"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEE227F7A08100C66700"
BuildableName = "damus.app"
BlueprintName = "damus"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<RemoteRunnable
runnableDebuggingMode = "1"
BundleIdentifier = "com.jb55.damus2"
RemotePath = "/Users/danielnogueira/Library/Developer/CoreSimulator/Devices/99E60B35-CE5D-4B45-AC35-00818C0AF3CB/data/Containers/Bundle/Application/5A083DD0-FDE2-43D7-9172-2F97FAD18F20/damus.app">
</RemoteRunnable>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEE227F7A08100C66700"
BuildableName = "damus.app"
BlueprintName = "damus"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</MacroExpansion>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
askForAppToLaunch = "Yes"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEE227F7A08100C66700"
BuildableName = "damus.app"
BlueprintName = "damus"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1500"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEE227F7A08100C66700"
BuildableName = "damus.app"
BlueprintName = "damus"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEF227F7A08200C66700"
BuildableName = "damusTests.xctest"
BlueprintName = "damusTests"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEFC27F7A08200C66700"
BuildableName = "damusUITests.xctest"
BlueprintName = "damusUITests"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEE227F7A08100C66700"
BuildableName = "damus.app"
BlueprintName = "damus"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4CE6DEE227F7A08100C66700"
BuildableName = "damus.app"
BlueprintName = "damus"
ReferencedContainer = "container:damus.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1420"
LastUpgradeVersion = "1500"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -26,7 +26,8 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES">
<Testables>
<TestableReference
skipped = "NO">
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x00",
"green" : "0x00",
"red" : "0x00"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFF",
"green" : "0xFF",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xF4",
"green" : "0xEE",
"red" : "0xEE"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x1E",
"green" : "0x1C",
"red" : "0x1C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFF",
"green" : "0xFF",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x00",
"green" : "0x00",
"red" : "0x00"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"red" : "0xBE",
"green" : "0x5F",
"blue" : "0x00"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE3",
"green" : "0xD7",
"red" : "0xF7"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x20",
"green" : "0x13",
"red" : "0x61"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x63",
"green" : "0x11",
"red" : "0xF5"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x6E",
"green" : "0x20",
"red" : "0xF8"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xEE",
"green" : "0xE8",
"red" : "0xF7"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x35",
"green" : "0x04",
"red" : "0x8B"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x3D",
"green" : "0x07",
"red" : "0x9C"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x44",
"green" : "0x06",
"red" : "0xB2"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x2D",
"green" : "0x05",
"red" : "0x75"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xD8",
"green" : "0xC2",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xED",
"green" : "0x26",
"red" : "0xBF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFA",
"green" : "0xFA",
"red" : "0xF9"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x24",
"green" : "0x22",
"red" : "0x20"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE3",
"green" : "0xE1",
"red" : "0xDD"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x2A",
"green" : "0x26",
"red" : "0x23"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x59",
"green" : "0x53",
"red" : "0x4A"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x85",
"green" : "0x7A",
"red" : "0x6A"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE4",
"green" : "0xF1",
"red" : "0xD6"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x38",
"green" : "0x5C",
"red" : "0x12"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x5A",
"green" : "0xAB",
"red" : "0x04"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x64",
"green" : "0xBF",
"red" : "0x03"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xF0",
"green" : "0xF7",
"red" : "0xE8"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x1F",
"green" : "0x33",
"red" : "0x0A"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x34",
"green" : "0x64",
"red" : "0x02"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x3F",
"green" : "0x79",
"red" : "0x02"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x1F",
"green" : "0x3C",
"red" : "0x01"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE4",
"green" : "0xFF",
"red" : "0xAD"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xD1",
"green" : "0xEE",
"red" : "0xFE"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x12",
"green" : "0x43",
"red" : "0x5C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x1C",
"green" : "0xAD",
"red" : "0xF9"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x2C",
"green" : "0xB5",
"red" : "0xFC"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE1",
"green" : "0xF4",
"red" : "0xFE"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x0A",
"green" : "0x25",
"red" : "0x33"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x06",
"green" : "0x85",
"red" : "0xC6"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x03",
"green" : "0x93",
"red" : "0xDD"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x04",
"green" : "0x6A",
"red" : "0x9F"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xCC",
"green" : "0xF5",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x05",
"green" : "0xDF",
"red" : "0xFA"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "bitcoin-hashtag.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "bitcoin-hashtag.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "bitcoin-hashtag.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="12.843903"
height="17"
viewBox="0 0 12.843902 16.999999"
version="1.1"
id="svg2"
sodipodi:docname="bitcoin-hashtag.svg"
inkscape:version="1.3-dev (77bc73e, 2022-05-18)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<sodipodi:namedview
id="namedview2"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="31.12"
inkscape:cx="4.2577121"
inkscape:cy="7.535347"
inkscape:window-width="1526"
inkscape:window-height="957"
inkscape:window-x="1637"
inkscape:window-y="10"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<g
id="surface1"
transform="matrix(0.94507527,0,0,0.94507527,-4.5943665,-3.2875042)">
<path
style="fill:#f59119;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.40637"
d="M 18.388175,10.742602 C 18.668352,8.874761 17.240002,7.8694225 15.295251,7.193703 L 15.927019,4.6611305 14.383304,4.2765743 13.768015,6.7432244 C 13.361486,6.644338 12.943967,6.545453 12.531944,6.4520613 L 13.152726,3.9689298 11.609011,3.584375 10.977241,6.1169476 C 10.642129,6.0400371 10.312509,5.9686201 9.988384,5.886215 L 9.993834,5.880715 7.8623408,5.3478364 7.4558114,6.9959316 c 0,0 1.1426793,0.2636953 1.1207046,0.2801765 0.6207823,0.1538223 0.7361485,0.5658464 0.714174,0.8954659 l -0.7196673,2.889659 c 0.043949,0.01099 0.098885,0.02747 0.1648089,0.04944 L 8.5710227,11.072223 7.5601911,15.11555 c -0.076912,0.192277 -0.26919,0.477948 -0.7031873,0.368073 0.010984,0.02198 -1.1261994,-0.280174 -1.1261994,-0.280174 l -0.7636164,1.76346 2.0106754,0.505417 c 0.3735682,0.0934 0.7361485,0.186784 1.0987301,0.280176 l -0.6427568,2.565534 1.5437155,0.384556 0.6317701,-2.538067 c 0.4230107,0.115364 0.8295407,0.219746 1.2305777,0.318632 l -0.63177,2.527079 1.543716,0.384557 0.637263,-2.560042 c 2.631459,0.499922 4.614667,0.296656 5.444208,-2.082094 0.670226,-1.917284 -0.03296,-3.021507 -1.417363,-3.741176 1.010832,-0.236227 1.768957,-0.895465 1.972221,-2.268877 z m -3.526922,4.944286 c -0.477949,1.917283 -3.702721,0.884477 -4.752008,0.620782 l 0.851514,-3.395075 c 1.043795,0.2582 4.394922,0.774604 3.900494,2.774293 z M 15.3392,10.715134 c -0.433999,1.74698 -3.120394,0.857008 -3.993884,0.642757 l 0.769111,-3.081939 c 0.87349,0.219746 3.675252,0.620784 3.224773,2.439182 z m 0,0"
id="path2" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "coffee.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "coffee.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "coffee.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<svg
version="1.1"
x="0px"
y="0px"
viewBox="0 0 13.999999 18"
enable-background="new 0 0 1000 1000"
xml:space="preserve"
id="svg4"
sodipodi:docname="coffee.svg"
width="14"
height="18"
inkscape:version="1.3-dev (77bc73e, 2022-05-18)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs4" /><sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="10.680141"
inkscape:cx="-17.181421"
inkscape:cy="4.07298"
inkscape:window-width="1368"
inkscape:window-height="947"
inkscape:window-x="1764"
inkscape:window-y="58"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<metadata
id="metadata1"> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g
id="g4"
transform="matrix(0.01779387,0,0,0.01779387,-1.8340539,0.04465199)"><g
transform="matrix(0.1,0,0,-0.1,0,511)"
id="g3"><path
d="m 4302.6,4870.6 c 149.5,-177.8 240.5,-319.3 347.6,-545.6 119.2,-254.6 169.7,-448.6 183.9,-699.2 22.2,-462.7 -137.4,-778 -539.5,-1060.9 -474.9,-335.4 -685,-739.6 -687,-1315.5 0,-260.7 38.4,-501.1 115.2,-739.6 50.5,-149.5 56.6,-159.6 60.6,-97 18.2,234.4 56.6,476.9 101,626.4 121.2,422.3 305.1,622.4 885.1,959.8 424.3,248.5 575.9,487 575.9,905.3 -2,501.1 -359.7,1295.3 -798.2,1768.1 -82.8,88.9 -198,202.1 -256.6,250.6 l -105.1,86.9 z"
id="path1"
style="fill:#be5f00;fill-opacity:1" /><path
d="m 5981.8,3577.3 c 272.8,-369.8 309.2,-846.7 90.9,-1192.2 -147.5,-232.4 -373.8,-406.2 -822.4,-638.5 -592,-303.1 -854.7,-683 -854.7,-1232.6 0,-276.8 14.2,-343.5 72.7,-343.5 38.4,0 48.5,16.2 68.7,111.1 34.4,167.7 135.4,349.6 262.7,476.9 147.5,145.5 349.6,244.5 838.6,412.2 503.2,171.8 725.4,280.9 846.7,416.3 210.1,232.4 276.8,535.5 202.1,903.2 -76.8,373.8 -216.2,618.3 -537.5,943.7 -155.7,155.6 -214.3,206.1 -167.8,143.4 z"
id="path2"
style="fill:#be5f00;fill-opacity:1" /><path
d="M 2748.7,592.8 C 2158.7,507.9 1732.3,352.3 1542.4,156.3 1415.1,25 1409,-11.4 1427.2,-445.8 c 34.3,-832.5 181.9,-1729.7 462.7,-2829 153.6,-600.1 309.2,-1113.4 351.6,-1159.9 56.6,-62.6 272.8,-157.6 476.9,-210.1 668.8,-173.8 2172.2,-196 2960.3,-42.4 357.7,68.7 604.2,163.7 731.5,278.9 68.7,60.6 84.9,92.9 107.1,198 64.7,335.4 56.6,319.3 131.3,319.3 107.1,0 438.5,92.9 602.2,167.7 220.3,103.1 363.7,202.1 567.8,398.1 470.8,452.6 759.8,1149.8 761.8,1840.8 0,398.1 -72.7,614.3 -274.8,818.4 -220.3,222.3 -466.8,309.2 -937.6,325.4 l -309.2,12.1 14.2,218.2 14.2,218.2 -56.6,52.5 C 6866.9,314 6274.9,499.9 5696.9,582.7 L 5614,594.8 5533.2,457.4 5450.4,322 5565.6,305.8 c 588,-84.9 868.9,-159.6 978,-256.6 56.6,-50.5 60.6,-62.6 44.5,-113.2 -80.8,-226.3 -1000.2,-371.8 -2329.8,-371.8 -1220.5,0 -2097.5,123.3 -2295.5,321.3 -52.5,54.5 -56.6,66.7 -36.4,111.1 48.5,107.1 341.5,206.1 822.4,276.8 143.5,20.2 301.1,38.4 349.6,38.4 46.5,0 84.9,4 84.9,8.1 0,8.1 -175.8,295 -185.9,305.1 -4.2,2.1 -115.3,-12 -248.7,-32.2 z m 4797.1,-1614.5 c 153.6,-26.3 272.8,-82.8 317.2,-153.6 56.6,-84.9 60.6,-400.1 8.1,-652.7 -111.1,-545.6 -404.1,-996.2 -788.1,-1220.5 -139.4,-80.8 -333.4,-151.5 -355.6,-129.3 -8.1,8.1 18.2,216.2 58.6,462.7 78.8,482.9 159.6,1073 202.1,1450.8 l 24.2,232.4 70.7,12.1 c 115.3,20.3 325.4,20.3 462.8,-1.9 z"
id="path3"
style="fill:#be5f00;fill-opacity:1" /></g></g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "nostr-hashtag.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "nostr-hashtag.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "nostr-hashtag.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.0"
width="18pt"
height="18.199053pt"
viewBox="0 0 18 18.199053"
preserveAspectRatio="xMidYMid"
id="svg1"
sodipodi:docname="nostr-hashtag.svg"
inkscape:version="1.3-dev (77bc73e, 2022-05-18)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="pt"
showgrid="false"
inkscape:zoom="5.4017383"
inkscape:cx="50.354161"
inkscape:cy="-13.514168"
inkscape:window-width="1497"
inkscape:window-height="866"
inkscape:window-x="1747"
inkscape:window-y="96"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" />
<metadata
id="metadata1">
Created by potrace 1.15, written by Peter Selinger 2001-2017
</metadata>
<g
transform="matrix(0.00138509,0,0,-0.00138509,0.3,17.927982)"
fill="#000000"
stroke="none"
id="g1">
<path
d="m 11315,12756 c -49,-23 -135,-71 -190,-106 -128,-81 -170,-100 -222,-100 -37,0 -43,-3 -43,-22 0,-11 12,-36 26,-55 l 26,-34 -20,-37 c -128,-248 -171,-359 -212,-547 -56,-262 -43,-645 36,-1045 48,-244 104,-451 234,-865 158,-503 280,-942 320,-1145 27,-140 60,-448 60,-559 0,-164 -39,-366 -92,-478 -57,-123 -176,-222 -286,-239 -49,-8 -50,-23 -5,-38 18,-6 34,-14 38,-18 13,-13 -25,-66 -97,-134 -121,-115 -267,-174 -432,-174 -200,0 -327,87 -732,507 -233,240 -541,529 -604,567 -31,18 -32,18 -27,0 3,-11 9,-36 13,-56 8,-49 -5,-49 -65,1 -75,62 -168,118 -250,150 -134,51 -214,63 -481,70 l -245,6 -65,41 c -100,63 -125,68 -295,66 -186,-3 -262,7 -484,64 -279,71 -341,67 -780,-61 -334,-97 -442,-118 -761,-150 -200,-19 -365,-19 -496,1 -58,9 -107,14 -111,11 -3,-4 6,-22 21,-41 l 27,-35 -23,-5 c -13,-3 -61,-8 -106,-11 -113,-9 -157,-26 -219,-87 -50,-49 -54,-51 -140,-64 -60,-10 -108,-25 -153,-48 -304,-157 -331,-166 -471,-166 -48,0 -120,7 -160,15 -40,9 -74,13 -78,10 -3,-3 0,-20 7,-37 6,-18 10,-34 7,-36 -2,-3 -24,0 -47,7 -24,6 -103,16 -176,23 -163,15 -350,1 -521,-40 l -114,-26 51,-23 c 53,-23 76,-50 66,-77 -3,-8 -51,-38 -105,-66 -251,-129 -515,-384 -727,-703 -110,-166 -208,-325 -217,-355 -6,-21 -5,-22 34,-16 36,6 41,4 41,-12 0,-11 -15,-45 -34,-76 -46,-75 -76,-161 -127,-359 -78,-307 -137,-444 -243,-569 -38,-44 -51,-67 -43,-72 7,-4 40,-8 75,-8 37,0 62,-4 62,-11 0,-6 -12,-26 -27,-45 -32,-43 -24,-53 48,-60 108,-11 103,-6 95,-82 -4,-37 -11,-128 -15,-202 -5,-74 -16,-164 -26,-200 -22,-85 -75,-190 -136,-269 -27,-35 -49,-67 -49,-72 0,-4 17,-11 38,-14 20,-3 49,-8 64,-10 64,-10 285,31 408,76 101,37 249,117 348,188 54,38 110,75 126,80 15,6 70,11 123,11 267,0 582,98 766,239 34,26 72,53 83,59 25,13 31,8 58,-46 21,-40 38,-32 57,26 30,93 97,200 141,223 25,14 38,3 98,-86 27,-38 73,-95 104,-125 31,-30 56,-63 56,-75 0,-11 -20,-60 -45,-110 -42,-84 -81,-202 -70,-213 3,-3 27,16 54,41 50,47 81,59 81,34 0,-8 -10,-49 -21,-93 -26,-97 -32,-275 -10,-313 l 14,-25 36,41 c 42,48 118,88 251,131 102,33 185,47 345,57 55,4 159,13 230,21 292,34 285,35 368,-56 66,-72 122,-115 170,-130 20,-6 37,-15 37,-19 0,-12 -22,-35 -75,-77 -27,-21 -151,-133 -275,-248 -424,-394 -462,-415 -864,-486 -65,-12 -145,-29 -177,-39 -191,-60 -348,-213 -554,-541 -103,-165 -162,-241 -292,-383 -176,-190 -332,-333 -778,-711 -497,-422 -750,-737 -895,-1113 -64,-165 -104,-203 -216,-203 -38,0 -94,7 -124,15 -74,20 -244,20 -301,0 -27,-10 -61,-33 -87,-62 -41,-45 -43,-46 -89,-39 -25,3 -67,18 -92,33 C 457,781 369,812 175,813 49,814 0,786 0,713 0,669 31,628 122,557 204,491 254,434 469,153 527,77 549,57 597,33 652,7 662,5 780,6 c 69,0 150,6 180,14 30,7 132,32 225,56 281,72 308,76 511,84 181,6 195,8 247,34 76,37 137,107 231,267 230,392 287,481 394,626 219,293 469,581 756,869 284,284 368,342 641,439 164,59 295,123 410,199 101,68 257,219 295,286 14,24 56,76 93,116 100,106 177,142 437,203 165,40 229,62 390,133 191,85 220,94 460,143 118,24 239,49 267,56 29,7 56,10 59,6 4,-3 15,-50 26,-104 14,-73 21,-159 25,-331 6,-265 -3,-385 -47,-605 -50,-247 -105,-393 -222,-592 -59,-98 -74,-167 -58,-256 23,-126 61,-177 174,-232 95,-47 169,-52 357,-28 125,16 244,22 505,26 667,12 1011,-35 1799,-241 277,-73 308,-86 376,-161 72,-79 113,-170 175,-388 19,-66 42,-130 50,-143 42,-63 155,-112 261,-112 109,0 124,57 54,206 -48,102 -53,149 -17,165 31,15 73,-5 102,-48 12,-18 45,-87 75,-153 57,-132 106,-197 173,-233 35,-18 56,-21 136,-20 73,2 110,-3 159,-19 89,-29 333,-32 403,-5 114,44 140,145 60,231 -23,24 -112,72 -272,143 -71,32 -199,124 -250,179 -71,78 -111,140 -224,343 -132,236 -172,297 -262,391 -58,61 -94,89 -148,115 -113,56 -85,53 -866,85 -223,9 -616,36 -656,45 -11,2 -86,12 -165,20 -179,20 -595,95 -712,130 -145,42 -319,139 -371,208 -32,42 -53,102 -67,187 -22,144 48,316 261,640 125,190 193,317 230,428 31,95 60,282 60,392 0,76 4,102 16,114 20,20 25,18 192,-102 73,-52 168,-114 210,-137 83,-47 132,-82 132,-95 0,-4 -14,-17 -32,-28 l -32,-21 29,-11 c 108,-41 305,-52 707,-39 186,6 345,9 353,5 8,-3 15,-15 15,-27 0,-20 3,-21 54,-15 110,13 266,81 426,187 89,58 99,63 170,69 161,14 229,78 523,495 88,124 143,185 169,185 2,0 2,-27 0,-60 -2,-33 0,-60 5,-60 23,0 140,145 212,263 117,192 165,317 271,712 106,394 111,410 135,410 15,0 22,-10 29,-40 13,-53 12,-52 42,-24 40,36 103,133 154,234 25,50 50,90 55,90 6,0 11,-17 13,-37 2,-21 7,-38 12,-38 19,0 93,101 139,190 29,56 87,206 140,363 50,147 114,318 142,380 132,288 199,526 246,867 25,190 25,756 0,975 -23,195 -53,379 -78,485 -46,194 -152,515 -233,706 -130,306 -218,564 -260,764 -48,228 -48,572 1,770 31,128 82,204 166,246 64,33 118,83 187,174 120,158 184,199 503,321 250,96 347,153 347,204 0,41 -42,57 -174,68 -112,9 -385,70 -439,99 -10,5 -27,29 -37,54 -23,53 -99,137 -159,176 -56,35 -72,36 -40,1 24,-26 23,-26 -13,3 -21,16 -42,41 -47,56 -9,26 -14,28 -60,28 -50,0 -101,16 -101,32 0,4 -42,8 -92,7 -88,0 -98,-3 -183,-43 z m 550,-126 c 10,-11 16,-20 13,-20 -3,0 -13,9 -23,20 -10,11 -16,20 -13,20 3,0 13,-9 23,-20 z"
id="path1"
style="fill:#cc43c5;fill-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "plebchain.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "plebchain.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "plebchain.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 21.315096 18"
width="21.315096"
height="18"
version="1.1"
id="svg21"
sodipodi:docname="plebchain.svg"
inkscape:version="1.3-dev (77bc73e, 2022-05-18)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs21" />
<sodipodi:namedview
id="namedview21"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="19.666667"
inkscape:cx="12.762712"
inkscape:cy="12.991525"
inkscape:window-width="1418"
inkscape:window-height="883"
inkscape:window-x="1745"
inkscape:window-y="10"
inkscape:window-maximized="0"
inkscape:current-layer="svg21" />
<path
d="M 18.625339,11.886754 C 17.668676,9.87076 15.553749,8.748431 12.298294,7.531368 12.258627,7.5164347 11.514296,7.2747022 10.649566,6.9942364 9.6532356,6.6713042 8.5682391,6.7520372 7.6316422,7.220569 L 5.7999816,8.136166 13.616623,17.9338 h 4.316652 l 0.703264,-1.662727 c 0.593598,-1.401862 0.641198,-3.009057 -0.0112,-4.384319 z"
id="path5"
style="fill:#bf26ed;fill-opacity:1;stroke-width:0.466665" />
<path
d="M 16.627546,5.1089093 C 16.710146,4.5484447 16.797412,3.95578 16.838479,3.6790475 17.083011,2.0219197 15.937348,0.48005806 14.28022,0.23552546 12.623092,-0.00900704 11.081231,1.1366559 10.836698,2.7937838 c -0.0406,0.2762657 -0.128333,0.8689305 -0.210932,1.4298619 -0.282799,0.058333 -0.513332,0.2851324 -0.558132,0.5870648 -0.0658,0.441465 0.084,1.0145298 0.370999,1.2072625 0.09707,1.4303286 1.118596,2.778524 2.547992,2.989457 1.429395,0.210933 2.796257,-0.785398 3.302589,-2.1265932 0.330399,-0.1021996 0.639331,-0.6071313 0.703731,-1.0490632 0.0434,-0.302399 -0.111533,-0.5856647 -0.365399,-0.7228643 z"
id="path10"
style="fill:#bf26ed;fill-opacity:1;stroke-width:0.466665" />
<path
d="m 21.193864,14.872477 c -0.0392,-0.501665 -0.310799,-0.956663 -0.684131,-1.294529 l -1.900727,-1.723394 c 0,0 0.172666,0.346732 0.332732,1.276796 L 15.53415,11.550288 c -0.878731,-0.405999 -1.835861,-0.616465 -2.804191,-0.616465 h -0.807331 c -0.87733,0 -1.681394,-0.553464 -1.9338602,-1.393928 C 9.8926348,9.220696 9.819835,8.832897 9.7904351,8.363432 V 8.362965 C 10.503966,7.7651672 10.944031,6.8285703 10.968765,5.8700401 11.247364,5.6651742 11.372897,5.0865094 11.28843,4.648311 11.230564,4.3482453 10.990698,4.1317127 10.706032,4.0850462 10.599632,3.5283147 10.487633,2.93985 10.435366,2.6654509 10.121301,1.0199896 8.5327726,-0.05940684 6.8873113,0.25419216 5.2418501,0.56779106 4.1624536,2.1567859 4.4760526,3.8022471 4.5283191,4.0766462 4.6407854,4.665111 4.7467184,5.2218423 4.4989192,5.3697751 4.355653,5.6595742 4.4125861,5.9596399 4.4956525,6.3983051 4.8255848,6.8901701 5.159717,6.9779032 5.2950499,7.2952355 5.4798493,7.5892345 5.7015152,7.8510336 L 5.7999816,8.136166 5.2171168,11.699621 3.2925898,12.11822 C 3.041524,12.177953 2.8109914,12.278752 2.6061254,12.411752 1.8342613,12.912484 1.5458622,13.865414 1.7731282,14.725478 1.8309946,14.943877 2.8833245,17.9338 2.8833245,17.9338 H 15.133284 l 0.408332,-1.691661 3.480855,0.605265 c 1.184397,0.211399 2.267993,-0.748064 2.171393,-1.974927 z"
id="path16"
style="fill:#f59119;fill-opacity:1;stroke-width:0.466665" />
<path
d="m 12.589026,15.06801 -2.251659,-0.776531 c 0,0 0.96693,-0.1106 0.95853,-0.625798 -4.67e-4,-0.03687 -0.01213,-0.240332 -0.307999,-0.210932 -0.0812,0.0079 -0.734064,0.07327 -1.1927962,0.118999 -0.3028657,0.03033 -0.6015314,0.09007 -0.8927304,0.178733 l -0.1591328,0.04853 -3.5256551,-2.101393 c 0,0 0,0 0.3495322,-0.763464 C 6.1779803,9.600561 5.8004482,8.136166 5.8004482,8.136166 L 1.324663,10.373825 C 0.63539857,10.718224 0.2,11.422889 0.2,12.193819 c 0,0.939397 0.64306455,1.756528 1.5558615,1.977727 l 6.4357789,1.371062 2.5834586,0.955731 c 0.167999,0.0532 0.329932,0.0602 0.517065,0.0033 0.187599,-0.05693 0.246399,-0.09847 0.337398,-0.165199 0.2464,-0.180133 0.706065,-0.536665 1.037864,-0.795664 0.170799,-0.133933 0.125533,-0.402266 -0.0784,-0.472732 z"
id="path21"
style="fill:#bf26ed;fill-opacity:1;stroke-width:0.466665" />
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "zapathon.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "zapathon.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "zapathon.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="11.106925"
height="18"
viewBox="0 0 2.9387073 4.7624999"
version="1.1"
id="svg1"
inkscape:version="1.3-dev (77bc73e, 2022-05-18)"
sodipodi:docname="zapathon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="16.96875"
inkscape:cy="9.96875"
inkscape:window-width="1406"
inkscape:window-height="767"
inkscape:window-x="1741"
inkscape:window-y="214"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-10.993855,-8.058313)">
<g
transform="matrix(0.01604881,0,0,-0.01604881,10.573102,13.422443)"
id="g10"
inkscape:label="Bolt"
style="display:inline">
<path
id="path14"
style="fill:#c98f19;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1"
d="m 94.833712,155.13322 -8.129016,18.00903 -55.167069,-3.59001 18.868958,-24.19503 44.825648,2.77303 z m 83.691438,80.98476 -8.89814,-11.93085 -11.755,-16.519 -1.505,-2.114 -43.191,-60.691 L 63.081111,74.14633 79.705774,38.853232 C 121.34411,95.870625 162.2814,153.39008 203.27601,210.87013 Z m -22.57414,11.14115 12.32197,61.15287 -21.22997,22.33399 -17.432,-69.53486 -7.0256,-30.70796 27.52164,-9.9823 5.84396,26.73826"
sodipodi:nodetypes="cccccccccccccccccccccc" />
<path
id="path16"
style="fill:#fadf05;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1"
d="m 178.78514,236.43412 -5.679,-0.377 -8.065,-0.533 -5.9,-0.389 -33.394,-2.212 6.162,29.388 6.223,29.667 8.95029,38.92409 -54.426393,-75.90909 -61.5969,-86.55 44.1332,2.921 8.9137,0.589 -6.1723,-29.396 -0.9867,-4.71 -1.5106,-7.209 -11.7273,-55.917704 16.3074,22.9175 37.169603,52.234204 43.189,60.693 1.505,2.113 16.907,23.756 h -0.002"
sodipodi:nodetypes="cccccccccccccccccccccc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+23
View File
@@ -0,0 +1,23 @@
{
"images": [
{
"filename": "alby.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "alby.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "alby.svg"
}
],
"info": {
"author": "xcode",
"version": 1
}
}
+11
View File
@@ -0,0 +1,11 @@
<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="3.59995" cy="3.59995" r="3.59995" transform="matrix(-1 0 0 1 13.832 9.96094)" fill="black"/>
<path d="M9.63215 13.0205L16.3521 19.7404" stroke="black" stroke-width="1.79997"/>
<circle cx="39.6317" cy="13.5609" r="3.59995" fill="black"/>
<path d="M40.2917 13.0205L33.5718 19.7404" stroke="black" stroke-width="1.79997"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.2538 35.0429C9.31357 34.1193 8.18436 32.045 8.56261 29.9297C10.1861 20.8506 16.9519 14.041 25.0517 14.041C33.1712 14.041 39.9502 20.8836 41.5526 29.9957C41.9253 32.1149 40.7869 34.1881 38.84 35.1043C34.6741 37.0648 30.0209 38.1606 25.1117 38.1606C20.1516 38.1606 15.4528 37.0419 11.2538 35.0429Z" fill="#FFDF6F"/>
<path d="M41.5526 29.9957L42.439 29.8398L41.5526 29.9957ZM38.84 35.1043L38.4568 34.29L38.84 35.1043ZM9.44855 30.0881C11.0173 21.3153 17.5017 14.941 25.0517 14.941V13.141C16.402 13.141 9.35492 20.3859 7.67668 29.7713L9.44855 30.0881ZM25.0517 14.941C32.62 14.941 39.1178 21.3464 40.6662 30.1516L42.439 29.8398C40.7826 20.4209 33.7225 13.141 25.0517 13.141V14.941ZM38.4568 34.29C34.4082 36.1952 29.8856 37.2607 25.1117 37.2607V39.0606C30.1561 39.0606 34.9399 37.9343 39.2232 35.9187L38.4568 34.29ZM25.1117 37.2607C20.2883 37.2607 15.7213 36.173 11.6407 34.2303L10.867 35.8556C15.1842 37.9108 20.015 39.0606 25.1117 39.0606V37.2607ZM40.6662 30.1516C40.965 31.8506 40.0553 33.5378 38.4568 34.29L39.2232 35.9187C41.5185 34.8385 42.8855 32.3791 42.439 29.8398L40.6662 30.1516ZM7.67668 29.7713C7.22342 32.306 8.57956 34.7666 10.867 35.8556L11.6407 34.2303C10.0476 33.4719 9.14529 31.784 9.44855 30.0881L7.67668 29.7713Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.7154 32.7862C13.1536 32.1501 12.2272 30.4884 12.7684 28.8913C14.4373 23.9658 19.3057 20.4014 25.0515 20.4014C30.7973 20.4014 35.6657 23.9658 37.3346 28.8913C37.8758 30.4884 36.9494 32.1501 35.3876 32.7862C32.1977 34.0853 28.7082 34.8012 25.0515 34.8012C21.3948 34.8012 17.9053 34.0853 14.7154 32.7862Z" fill="black"/>
<ellipse cx="29.1918" cy="28.0806" rx="2.99995" ry="2.39996" fill="white"/>
<ellipse cx="20.6037" cy="28.0816" rx="2.99995" ry="2.39996" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "bitcoin-logo.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" viewBox="0 0 20 20" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.862745%,57.647059%,10.196078%);fill-opacity:1;" d="M 19.699219 12.417969 C 18.363281 17.777344 12.9375 21.035156 7.582031 19.699219 C 2.226562 18.363281 -1.035156 12.9375 0.300781 7.582031 C 1.636719 2.222656 7.0625 -1.035156 12.417969 0.300781 C 17.773438 1.632812 21.035156 7.0625 19.699219 12.417969 Z M 19.699219 12.417969 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 14.410156 8.574219 C 14.609375 7.246094 13.59375 6.53125 12.210938 6.050781 L 12.660156 4.25 L 11.5625 3.976562 L 11.125 5.730469 C 10.835938 5.660156 10.539062 5.589844 10.246094 5.523438 L 10.6875 3.757812 L 9.589844 3.484375 L 9.140625 5.285156 C 8.902344 5.230469 8.667969 5.179688 8.4375 5.121094 L 8.441406 5.117188 L 6.925781 4.738281 L 6.636719 5.910156 C 6.636719 5.910156 7.449219 6.097656 7.433594 6.109375 C 7.875 6.21875 7.957031 6.511719 7.941406 6.746094 L 7.429688 8.800781 C 7.460938 8.808594 7.5 8.820312 7.546875 8.835938 L 7.429688 8.808594 L 6.710938 11.683594 C 6.65625 11.820312 6.519531 12.023438 6.210938 11.945312 C 6.21875 11.960938 5.410156 11.746094 5.410156 11.746094 L 4.867188 13 L 6.296875 13.359375 C 6.5625 13.425781 6.820312 13.492188 7.078125 13.558594 L 6.621094 15.382812 L 7.71875 15.65625 L 8.167969 13.851562 C 8.46875 13.933594 8.757812 14.007812 9.042969 14.078125 L 8.59375 15.875 L 9.691406 16.148438 L 10.144531 14.328125 C 12.015625 14.683594 13.425781 14.539062 14.015625 12.847656 C 14.492188 11.484375 13.992188 10.699219 13.007812 10.1875 C 13.726562 10.019531 14.265625 9.550781 14.410156 8.574219 Z M 11.902344 12.089844 C 11.5625 13.453125 9.269531 12.71875 8.523438 12.53125 L 9.128906 10.117188 C 9.871094 10.300781 12.253906 10.667969 11.902344 12.089844 Z M 12.242188 8.554688 C 11.933594 9.796875 10.023438 9.164062 9.402344 9.011719 L 9.949219 6.820312 C 10.570312 6.976562 12.5625 7.261719 12.242188 8.554688 Z M 12.242188 8.554688 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1,15 +1,12 @@
{
"images" : [
{
"filename" : "shaka-full.pdf",
"filename" : "eula-bg.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}
+28
View File
@@ -0,0 +1,28 @@
<svg width="430" height="813" viewBox="0 0 430 813" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_f_1069_29012)">
<path d="M44.0811 256.851L186.315 111L276.203 223.574L244.02 388.295L69.9751 697.084L100.678 498.338L44.0811 256.851Z" fill="url(#paint0_linear_1069_29012)"/>
</g>
<g filter="url(#filter1_f_1069_29012)">
<path d="M116.509 587.348L206.677 479.401L230.746 273.265L266.666 231.183L367.424 396.975L281.292 659.008L266.665 801.413L66.889 763.694L116.509 587.348Z" fill="url(#paint1_linear_1069_29012)"/>
</g>
<defs>
<filter id="filter0_f_1069_29012" x="-66.6248" y="0.294121" width="453.534" height="807.496" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="55.3529" result="effect1_foregroundBlur_1069_29012"/>
</filter>
<filter id="filter1_f_1069_29012" x="-43.8172" y="120.477" width="521.947" height="791.642" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="55.3529" result="effect1_foregroundBlur_1069_29012"/>
</filter>
<linearGradient id="paint0_linear_1069_29012" x1="230.179" y1="166.577" x2="-67.7956" y2="310.108" gradientUnits="userSpaceOnUse">
<stop stop-color="#D34CD9"/>
<stop offset="1" stop-color="#4E4DF4"/>
</linearGradient>
<linearGradient id="paint1_linear_1069_29012" x1="139.483" y1="462.902" x2="377.854" y2="565.47" gradientUnits="userSpaceOnUse">
<stop stop-color="#0DE8FF"/>
<stop offset="1" stop-color="#641AAE"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,15 +1,12 @@
{
"images" : [
{
"filename" : "shaka-line.pdf",
"filename" : "gradient.jpg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "Fundrise.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "Fundrise.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "Fundrise.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.3111 8.87301C12.8205 9.2228 12.2201 9.42856 11.5716 9.42856C9.91471 9.42856 8.57157 8.08541 8.57157 6.42856C8.57157 4.7717 9.91471 3.42856 11.5716 3.42856C12.6456 3.42856 13.5877 3.99292 14.1177 4.84125M6.85728 18.9319H9.09467C9.38639 18.9319 9.67632 18.9666 9.95912 19.0359L12.3232 19.6105C12.8361 19.7354 13.3705 19.7475 13.8889 19.6469L16.5027 19.1384C17.1931 19.0039 17.8284 18.6732 18.3261 18.189L20.1755 16.39C20.7036 15.8772 20.7036 15.0449 20.1755 14.5312C19.7 14.0686 18.947 14.0166 18.4091 14.4088L16.2538 15.9813C15.9451 16.2069 15.5695 16.3284 15.1833 16.3284H13.102H14.4268C15.1735 16.3284 15.7783 15.74 15.7783 15.0136V14.7506C15.7783 14.1476 15.3564 13.6217 14.7551 13.4759L12.7104 12.9786C12.3776 12.8979 12.0368 12.8571 11.6942 12.8571C10.8673 12.8571 9.37033 13.5418 9.37033 13.5418L6.85728 14.5928M18.8573 7.2857C18.8573 8.94256 17.5141 10.2857 15.8573 10.2857C14.2004 10.2857 12.8573 8.94256 12.8573 7.2857C12.8573 5.62884 14.2004 4.2857 15.8573 4.2857C17.5141 4.2857 18.8573 5.62884 18.8573 7.2857ZM3.42871 14.2286V19.2C3.42871 19.6801 3.42871 19.9201 3.52213 20.1034C3.60431 20.2647 3.73544 20.3958 3.89672 20.478C4.08007 20.5714 4.3201 20.5714 4.80014 20.5714H5.48585C5.9659 20.5714 6.20592 20.5714 6.38927 20.478C6.55055 20.3958 6.68168 20.2647 6.76386 20.1034C6.85728 19.9201 6.85728 19.6801 6.85728 19.2V14.2286C6.85728 13.7485 6.85728 13.5085 6.76386 13.3251C6.68168 13.1638 6.55055 13.0328 6.38927 12.9506C6.20592 12.8571 5.9659 12.8571 5.48585 12.8571H4.80014C4.3201 12.8571 4.08007 12.8571 3.89672 12.9506C3.73544 13.0328 3.60431 13.1638 3.52213 13.3251C3.42871 13.5085 3.42871 13.7485 3.42871 14.2286Z" stroke="black" stroke-width="1.71429" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "GIF.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "GIF.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "GIF.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.14272 5.99999H18.857C19.3304 5.99999 19.7141 6.38375 19.7141 6.85713V17.1428C19.7141 17.6162 19.3304 18 18.857 18H5.14272C4.66933 18 4.28557 17.6162 4.28557 17.1428V6.85714C4.28557 6.38375 4.66933 5.99999 5.14272 5.99999ZM2.57129 6.85714C2.57129 5.43698 3.72256 4.28571 5.14272 4.28571H18.857C20.2772 4.28571 21.4284 5.43697 21.4284 6.85713V17.1428C21.4284 18.563 20.2772 19.7143 18.857 19.7143H5.14272C3.72256 19.7143 2.57129 18.563 2.57129 17.1428V6.85714ZM9.22631 11.2305C9.2052 11.1445 9.17192 11.069 9.12647 11.0041C9.08102 10.9375 9.0242 10.8815 8.95602 10.8361C8.88946 10.789 8.81153 10.7541 8.72225 10.7313C8.63459 10.707 8.538 10.6948 8.43248 10.6948C8.2052 10.6948 8.01121 10.7492 7.8505 10.858C7.69141 10.9667 7.56965 11.1234 7.48524 11.3279C7.40244 11.5325 7.36105 11.7792 7.36105 12.0682C7.36105 12.3604 7.40082 12.6104 7.48037 12.8182C7.55991 13.026 7.67842 13.1851 7.83589 13.2955C7.99335 13.4059 8.18897 13.4611 8.42274 13.4611C8.62891 13.4611 8.80017 13.431 8.93653 13.371C9.07452 13.3109 9.17761 13.2257 9.24579 13.1153C9.31024 13.0109 9.34423 12.8892 9.34775 12.75H8.44222V11.7857H10.6533V12.4773C10.6533 12.9318 10.5567 13.3206 10.3635 13.6437C10.1719 13.9651 9.90731 14.2119 9.56965 14.3839C9.23361 14.5544 8.84806 14.6396 8.413 14.6396C7.92761 14.6396 7.50147 14.5365 7.13459 14.3304C6.7677 14.1242 6.48118 13.8304 6.27501 13.4489C6.07046 13.0674 5.96819 12.6137 5.96819 12.0877C5.96819 11.6753 6.03069 11.3101 6.15569 10.9919C6.28231 10.6737 6.45764 10.4051 6.68166 10.1859C6.90569 9.96512 7.16462 9.79872 7.45845 9.68671C7.75228 9.57307 8.06722 9.51625 8.40326 9.51625C8.69871 9.51625 8.97306 9.55846 9.22631 9.64288C9.48118 9.72567 9.70602 9.84417 9.90082 9.99839C10.0972 10.151 10.2555 10.332 10.3757 10.5414C10.4958 10.7508 10.5688 10.9805 10.5948 11.2305H9.22631ZM13.3242 9.58443V14.5714H11.9703V9.58443H13.3242ZM14.6515 9.58443V14.5714H16.0054V12.6234H17.9437V11.5325H16.0054V10.6753H18.158V9.58443H14.6515Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "Key.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "Key.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "Key.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.5001 8.99999C17.3285 8.99999 18.0001 8.32841 18.0001 7.49997C18.0001 6.67154 17.3285 5.99996 16.5001 5.99996C15.6717 5.99996 15.0001 6.67154 15.0001 7.49997C15.0001 8.32841 15.6717 8.99999 16.5001 8.99999Z" fill="black"/>
<path d="M11.2501 18.0001V17.2501H12.7501C13.1643 17.2501 13.5001 16.9143 13.5001 16.5V15H15.0001C18.3138 15 21.0001 12.3137 21.0001 8.99999C21.0001 5.68625 18.3138 2.99994 15.0001 2.99994C11.6864 2.99994 9.00005 5.68625 9.00005 8.99999C9.00005 9.58815 9.0849 10.1576 9.24333 10.6961L3.43934 16.5C3.15804 16.7814 3 17.1629 3 17.5607V19.5001C3 20.3285 3.67158 21.0001 4.50001 21.0001H7.50004C8.32847 21.0001 9.00005 20.3285 9.00005 19.5001V18.7501H10.5001C10.9143 18.7501 11.2501 18.4143 11.2501 18.0001ZM10.5001 8.99999C10.5001 6.51469 12.5148 4.49995 15.0001 4.49995C17.4854 4.49995 19.5001 6.51469 19.5001 8.99999C19.5001 11.4853 17.4854 13.5 15.0001 13.5H12.7501C12.3359 13.5 12.0001 13.8358 12.0001 14.25V15.75H10.5001C10.0858 15.75 9.75005 16.0858 9.75005 16.5V17.2501H8.25004C7.83582 17.2501 7.50004 17.5858 7.50004 18.0001V19.5001H4.50001V17.5607L10.6335 11.4272C10.8436 11.2171 10.9099 10.9028 10.8025 10.6258C10.6074 10.1225 10.5001 9.57468 10.5001 8.99999Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "NFC.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "NFC.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "NFC.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.28787 16.8167C9.51778 17.0243 9.85483 17.0578 10.1227 16.9038C11.8035 15.9306 12.9285 14.0712 12.9285 11.9998C12.9285 9.9284 11.8057 8.06904 10.1227 7.09583C9.78117 6.89941 9.34367 7.01548 9.14725 7.35699C8.95082 7.69851 9.06689 8.136 9.4084 8.33243C10.6539 9.0534 11.4999 10.4462 11.4999 11.9998C11.4999 13.3703 10.8414 14.6158 9.83028 15.3859L6.26335 12.1828C5.96871 11.9194 5.51782 11.944 5.25443 12.2364C4.99104 12.5288 5.01559 12.9819 5.308 13.2453L9.28787 16.8167ZM5.14059 7.18289C4.91068 6.9753 4.57363 6.94182 4.30578 7.09583C2.62276 8.06904 1.5 9.9284 1.5 11.9998C1.5 14.0712 2.62276 15.9306 4.30578 16.9038C4.64729 17.1002 5.08479 16.9841 5.28121 16.6426C5.47764 16.3011 5.36157 15.8636 5.02005 15.6672C3.77453 14.9462 2.92856 13.5556 2.92856 11.9998C2.92856 10.6293 3.58703 9.38376 4.59818 8.61368L8.16511 11.8168C8.45975 12.0802 8.91064 12.0556 9.17403 11.7632C9.43742 11.4708 9.41287 11.0177 9.12046 10.7543L5.14059 7.18289Z" fill="black"/>
<path d="M18.6611 3.29748C19.0684 2.87729 19.7029 2.9049 20.0765 3.36339C23.9746 8.12351 23.9746 15.8766 20.0761 20.6367C19.8785 20.8784 19.6085 21 19.3386 21C19.0968 21 18.8508 20.9016 18.6611 20.703C18.2543 20.2825 18.2275 19.5705 18.6018 19.1135C21.8136 15.1901 21.8136 8.80995 18.6018 4.887C18.2275 4.42997 18.2543 3.7179 18.6611 3.29748Z" fill="black"/>
<path d="M15.2492 8.57679C14.8839 8.10992 14.9251 7.3993 15.3405 6.98915C15.7574 6.61884 16.3869 6.66571 16.7538 7.09007C18.8521 9.77599 18.8521 14.1424 16.7538 16.8259C16.5562 17.0794 16.2792 17.2083 16.0008 17.2083C15.7661 17.2083 15.5309 17.0738 15.3405 16.9285C14.9251 16.5183 14.884 15.8081 15.2492 15.3408C16.7071 13.4752 16.7071 10.4415 15.2492 8.57679Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "activity.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "activity.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "activity.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2 11.9999H5.26711C5.70339 11.9999 6.08932 11.717 6.2207 11.301L8.7616 3.2548C8.83517 3.02184 9.16483 3.02184 9.2384 3.2548L14.7616 20.745C14.8352 20.9779 15.1648 20.9779 15.2384 20.745L17.7793 12.6987C17.9107 12.2827 18.2966 11.9999 18.7329 11.9999H22" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 447 B

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "add-bookmark.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "add-bookmark.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "add-bookmark.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13 7C13 6.44772 12.5523 6 12 6C11.4477 6 11 6.44772 11 7H13ZM11 13C11 13.5523 11.4477 14 12 14C12.5523 14 13 13.5523 13 13H11ZM15 11C15.5523 11 16 10.5523 16 10C16 9.44772 15.5523 9 15 9L15 11ZM9 9C8.44772 9 8 9.44771 8 10C8 10.5523 8.44772 11 9 11L9 9ZM16.47 20.1929L15.8888 21.0066L15.8888 21.0066L16.47 20.1929ZM12.93 17.6643L13.5112 16.8505L13.5112 16.8505L12.93 17.6643ZM11.07 17.6643L10.4888 16.8505L10.4888 16.8505L11.07 17.6643ZM7.52998 20.1929L6.94874 19.3791L6.94874 19.3791L7.52998 20.1929ZM12.2456 17.2595L12.4911 16.2901L12.4911 16.2901L12.2456 17.2595ZM11.7544 17.2595L11.5089 16.2901L11.5089 16.2901L11.7544 17.2595ZM5.20836 20.6678L6 20.0568L6 20.0568L5.20836 20.6678ZM5.96294 21.0561L5.92589 22.0554L5.92589 22.0554L5.96294 21.0561ZM18.7916 20.6678L18 20.0568L18 20.0568L18.7916 20.6678ZM18.0371 21.0561L18.0741 22.0554L18.0741 22.0554L18.0371 21.0561ZM18.891 3.54601L18 4L18 4L18.891 3.54601ZM18.454 3.10899L18.908 2.21799L18.908 2.21799L18.454 3.10899ZM5.10899 3.54601L4.21799 3.09202L4.21799 3.09202L5.10899 3.54601ZM5.54601 3.10899L5.09202 2.21799L5.09202 2.21799L5.54601 3.10899ZM11 7V13H13V7H11ZM15 9L9 9L9 11L15 11L15 9ZM18 4.6V18.8909H20V4.6H18ZM6 18.8909V4.6H4V18.8909H6ZM6.6 4H17.4V2H6.6V4ZM17.0513 19.3791L13.5112 16.8505L12.3487 18.478L15.8888 21.0066L17.0513 19.3791ZM10.4888 16.8505L6.94874 19.3791L8.11122 21.0066L11.6513 18.478L10.4888 16.8505ZM13.5112 16.8505C13.2454 16.6606 12.9003 16.3938 12.4911 16.2901L12 18.2289C11.956 18.2178 11.9466 18.2043 12.0065 18.2412C12.0771 18.2846 12.1705 18.3507 12.3487 18.478L13.5112 16.8505ZM11.6513 18.478C11.8295 18.3507 11.9229 18.2846 11.9935 18.2412C12.0534 18.2043 12.044 18.2178 12 18.2289L11.5089 16.2901C11.0997 16.3938 10.7546 16.6606 10.4888 16.8505L11.6513 18.478ZM12.4911 16.2901C12.1688 16.2085 11.8312 16.2085 11.5089 16.2901L12 18.2289H12L12.4911 16.2901ZM4 18.8909C4 19.3733 3.999 19.8046 4.0302 20.1459C4.06022 20.4742 4.1313 20.909 4.41673 21.2788L6 20.0568C6.07706 20.1567 6.04397 20.2053 6.02189 19.9638C6.001 19.7353 6 19.4131 6 18.8909H4ZM6.94874 19.3791C6.52379 19.6827 6.26104 19.8691 6.06296 19.9849C5.85365 20.1073 5.87396 20.0521 6 20.0568L5.92589 22.0554C6.39272 22.0727 6.7878 21.8779 7.07244 21.7115C7.3683 21.5385 7.71867 21.287 8.11122 21.0066L6.94874 19.3791ZM4.41673 21.2788C4.77954 21.7489 5.33249 22.0334 5.92589 22.0554L6 20.0568L6 20.0568L4.41673 21.2788ZM18 18.8909C18 19.4131 17.999 19.7353 17.9781 19.9638C17.956 20.2053 17.9229 20.1567 18 20.0568L19.5833 21.2788C19.8687 20.909 19.9398 20.4742 19.9698 20.1459C20.001 19.8046 20 19.3733 20 18.8909H18ZM15.8888 21.0066C16.2813 21.287 16.6317 21.5385 16.9276 21.7115C17.2122 21.8779 17.6073 22.0727 18.0741 22.0554L18 20.0568C18.126 20.0521 18.1463 20.1073 17.937 19.9849C17.739 19.8691 17.4762 19.6827 17.0513 19.3791L15.8888 21.0066ZM18 20.0568L18 20.0568L18.0741 22.0554C18.6675 22.0334 19.2205 21.7489 19.5833 21.2788L18 20.0568ZM20 4.6C20 4.33647 20.0008 4.07869 19.9831 3.86177C19.9644 3.63318 19.9203 3.36344 19.782 3.09202L18 4C17.9707 3.94249 17.9811 3.91972 17.9897 4.02463C17.9992 4.14122 18 4.30347 18 4.6H20ZM17.4 4C17.6965 4 17.8588 4.00078 17.9754 4.0103C18.0803 4.01887 18.0575 4.0293 18 4L18.908 2.21799C18.6366 2.07969 18.3668 2.03562 18.1382 2.01695C17.9213 1.99922 17.6635 2 17.4 2V4ZM19.782 3.09202C19.5903 2.71569 19.2843 2.40973 18.908 2.21799L18 4L18 4L19.782 3.09202ZM6 4.6C6 4.30347 6.00078 4.14122 6.0103 4.02463C6.01887 3.91972 6.0293 3.94249 6 4L4.21799 3.09202C4.07969 3.36344 4.03562 3.63318 4.01695 3.86177C3.99922 4.07869 4 4.33648 4 4.6H6ZM6.6 2C6.33647 2 6.07869 1.99922 5.86177 2.01695C5.63318 2.03562 5.36344 2.07969 5.09202 2.21799L6 4C5.94249 4.0293 5.91972 4.01887 6.02463 4.0103C6.14122 4.00078 6.30347 4 6.6 4V2ZM6 4L6 4L5.09202 2.21799C4.71569 2.40973 4.40973 2.71569 4.21799 3.09202L6 4Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "add-reaction.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "add-reaction.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "add-reaction.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.4986 9.5C10.4986 10.3284 9.939 11 9.24864 11C8.55828 11 7.99864 10.3284 7.99864 9.5C7.99864 8.67157 8.55828 8 9.24864 8C9.939 8 10.4986 8.67157 10.4986 9.5Z" fill="black"/>
<path d="M15.9986 9.5C15.9986 10.3284 15.439 11 14.7486 11C14.0583 11 13.4986 10.3284 13.4986 9.5C13.4986 8.67157 14.0583 8 14.7486 8C15.439 8 15.9986 8.67157 15.9986 9.5Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.9986 1C19.5509 1 19.9986 1.44772 19.9986 2V4H21.9986C22.5509 4 22.9986 4.44772 22.9986 5C22.9986 5.55228 22.5509 6 21.9986 6H19.9986V8C19.9986 8.55228 19.5509 9 18.9986 9C18.4464 9 17.9986 8.55228 17.9986 8V6H15.9986C15.4464 6 14.9986 5.55228 14.9986 5C14.9986 4.44772 15.4464 4 15.9986 4H17.9986V2C17.9986 1.44772 18.4464 1 18.9986 1ZM11.9926 2.94507C12.0533 3.494 11.6576 3.98826 11.1087 4.04902C7.11036 4.49161 4 7.88325 4 12C3.99999 16.4183 7.5817 20 12 20C16.1171 20 19.509 16.889 19.9511 12.8901C20.0118 12.3412 20.506 11.9454 21.0549 12.0061C21.6039 12.0667 21.9997 12.5609 21.939 13.1099C21.3862 18.1109 17.1479 22 12 22C6.47714 22 1.99998 17.5228 2 12C2 6.85256 5.88834 2.61466 10.8886 2.06116C11.4375 2.0004 11.9318 2.39614 11.9926 2.94507ZM8.46341 14.1213C8.85393 13.7308 9.4871 13.7308 9.87762 14.1213C11.0492 15.2929 12.9487 15.2929 14.1203 14.1213C14.5108 13.7308 15.1439 13.7308 15.5345 14.1213C15.925 14.5118 15.925 15.145 15.5345 15.5355C13.5818 17.4882 10.416 17.4882 8.46341 15.5355C8.07288 15.145 8.07288 14.5118 8.46341 14.1213Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,26 @@
{
"images": [
{
"filename": "added-bookmark.svg",
"idiom": "universal",
"scale": "1x"
},
{
"idiom": "universal",
"scale": "2x",
"filename": "added-bookmark.svg"
},
{
"idiom": "universal",
"scale": "3x",
"filename": "added-bookmark.svg"
}
],
"info": {
"author": "xcode",
"version": 1
},
"properties": {
"template-rendering-intent": "template"
}
}
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.47 20.1929L15.8888 21.0066L15.8888 21.0066L16.47 20.1929ZM12.93 17.6643L13.5112 16.8505L13.5112 16.8505L12.93 17.6643ZM11.07 17.6643L10.4888 16.8505L10.4888 16.8505L11.07 17.6643ZM7.52998 20.1929L6.94874 19.3791L6.94874 19.3791L7.52998 20.1929ZM12.2456 17.2595L12.4911 16.2901L12.4911 16.2901L12.2456 17.2595ZM11.7544 17.2595L11.5089 16.2901L11.5089 16.2901L11.7544 17.2595ZM5.20836 20.6678L6 20.0568L6 20.0568L5.20836 20.6678ZM5.96294 21.0561L5.92589 22.0554L5.92589 22.0554L5.96294 21.0561ZM18.7916 20.6678L18 20.0568L18 20.0568L18.7916 20.6678ZM18.0371 21.0561L18.0741 22.0554L18.0741 22.0554L18.0371 21.0561ZM18.891 3.54601L18 4L18 4L18.891 3.54601ZM18.454 3.10899L18.908 2.21799L18.908 2.21799L18.454 3.10899ZM5.10899 3.54601L4.21799 3.09202L4.21799 3.09202L5.10899 3.54601ZM5.54601 3.10899L5.09202 2.21799L5.09202 2.21799L5.54601 3.10899ZM10.2071 9.54289C9.81658 9.15237 9.18342 9.15237 8.79289 9.54289C8.40237 9.93342 8.40237 10.5666 8.79289 10.9571L10.2071 9.54289ZM11 11.75L10.2929 12.4571C10.6834 12.8476 11.3166 12.8476 11.7071 12.4571L11 11.75ZM15.2071 8.95711C15.5976 8.56658 15.5976 7.93342 15.2071 7.54289C14.8166 7.15237 14.1834 7.15237 13.7929 7.54289L15.2071 8.95711ZM18 4.6V18.8909H20V4.6H18ZM6 18.8909V4.6H4V18.8909H6ZM6.6 4H17.4V2H6.6V4ZM17.0513 19.3791L13.5112 16.8505L12.3487 18.478L15.8888 21.0066L17.0513 19.3791ZM10.4888 16.8505L6.94874 19.3791L8.11122 21.0066L11.6513 18.478L10.4888 16.8505ZM13.5112 16.8505C13.2454 16.6606 12.9003 16.3938 12.4911 16.2901L12 18.2289C11.956 18.2178 11.9466 18.2043 12.0065 18.2412C12.0771 18.2846 12.1705 18.3507 12.3487 18.478L13.5112 16.8505ZM11.6513 18.478C11.8295 18.3507 11.9229 18.2846 11.9935 18.2412C12.0534 18.2043 12.044 18.2178 12 18.2289L11.5089 16.2901C11.0997 16.3938 10.7546 16.6606 10.4888 16.8505L11.6513 18.478ZM12.4911 16.2901C12.1688 16.2085 11.8312 16.2085 11.5089 16.2901L12 18.2289H12L12.4911 16.2901ZM4 18.8909C4 19.3733 3.999 19.8046 4.0302 20.1459C4.06022 20.4742 4.1313 20.909 4.41673 21.2788L6 20.0568C6.07706 20.1567 6.04397 20.2053 6.02189 19.9638C6.001 19.7353 6 19.4131 6 18.8909H4ZM6.94874 19.3791C6.52379 19.6827 6.26104 19.8691 6.06296 19.9849C5.85365 20.1073 5.87396 20.0521 6 20.0568L5.92589 22.0554C6.39272 22.0727 6.7878 21.8779 7.07244 21.7115C7.3683 21.5385 7.71867 21.287 8.11122 21.0066L6.94874 19.3791ZM4.41673 21.2788C4.77954 21.7489 5.33249 22.0334 5.92589 22.0554L6 20.0568L6 20.0568L4.41673 21.2788ZM18 18.8909C18 19.4131 17.999 19.7353 17.9781 19.9638C17.956 20.2053 17.9229 20.1567 18 20.0568L19.5833 21.2788C19.8687 20.909 19.9398 20.4742 19.9698 20.1459C20.001 19.8046 20 19.3733 20 18.8909H18ZM15.8888 21.0066C16.2813 21.287 16.6317 21.5385 16.9276 21.7115C17.2122 21.8779 17.6073 22.0727 18.0741 22.0554L18 20.0568C18.126 20.0521 18.1463 20.1073 17.937 19.9849C17.739 19.8691 17.4762 19.6827 17.0513 19.3791L15.8888 21.0066ZM18 20.0568L18 20.0568L18.0741 22.0554C18.6675 22.0334 19.2205 21.7489 19.5833 21.2788L18 20.0568ZM20 4.6C20 4.33647 20.0008 4.07869 19.9831 3.86177C19.9644 3.63318 19.9203 3.36344 19.782 3.09202L18 4C17.9707 3.94249 17.9811 3.91972 17.9897 4.02463C17.9992 4.14122 18 4.30347 18 4.6H20ZM17.4 4C17.6965 4 17.8588 4.00078 17.9754 4.0103C18.0803 4.01887 18.0575 4.0293 18 4L18.908 2.21799C18.6366 2.07969 18.3668 2.03562 18.1382 2.01695C17.9213 1.99922 17.6635 2 17.4 2V4ZM19.782 3.09202C19.5903 2.71569 19.2843 2.40973 18.908 2.21799L18 4L18 4L19.782 3.09202ZM6 4.6C6 4.30347 6.00078 4.14122 6.0103 4.02463C6.01887 3.91972 6.0293 3.94249 6 4L4.21799 3.09202C4.07969 3.36344 4.03562 3.63318 4.01695 3.86177C3.99922 4.07869 4 4.33648 4 4.6H6ZM6.6 2C6.33647 2 6.07869 1.99922 5.86177 2.01695C5.63318 2.03562 5.36344 2.07969 5.09202 2.21799L6 4C5.94249 4.0293 5.91972 4.01887 6.02463 4.0103C6.14122 4.00078 6.30347 4 6.6 4V2ZM6 4L6 4L5.09202 2.21799C4.71569 2.40973 4.40973 2.71569 4.21799 3.09202L6 4ZM8.79289 10.9571L10.2929 12.4571L11.7071 11.0429L10.2071 9.54289L8.79289 10.9571ZM11.7071 12.4571L15.2071 8.95711L13.7929 7.54289L10.2929 11.0429L11.7071 12.4571Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Some files were not shown because too many files have changed in this diff Show More