Commit Graph

12688 Commits

Author SHA1 Message Date
Vitor Pamplona 47f700afb3 Merge pull request #2644 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-04-29 08:14:11 -04:00
Crowdin Bot 893ac76e3f New Crowdin translations by GitHub Action 2026-04-29 12:11:59 +00:00
Vitor Pamplona 94d3982f88 Merge pull request #2645 from greenart7c3/claude/add-payment-targets-settings-QgGFg
Add payment targets navigation to settings screen
2026-04-29 08:10:12 -04:00
Claude 8078e72bc1 feat: expose payment targets settings in account settings
Add a navigation row in AllSettingsScreen to open the existing
PaymentTargetsScreen, so users can configure their NIP-A3 payment
targets (kind 10133) from the account settings menu.
2026-04-29 11:59:39 +00:00
Vitor Pamplona aef0683bd6 Merge pull request #2639 from davotoula/fix-sonar-empty-functions
Fix sonar empty functions and string literals
2026-04-29 07:53:22 -04:00
Vitor Pamplona fe02f61d46 Merge pull request #2642 from mstrofnone/fix/last-seen-formatting
Fix Last Seen formatting for older timestamps ("Last seen Jan 14 ago" → "Last seen on Jan 14, 2026 (3 months ago)")
2026-04-29 07:53:07 -04:00
Vitor Pamplona da30e7ada0 Merge pull request #2643 from mstrofnone/fix/vlc-download-retry
ci(desktop): retry vlcDownload on transient network failures
2026-04-29 07:51:24 -04:00
David Kaspar 19e19192e3 Merge pull request #2641 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-04-29 12:32:55 +02:00
mstrofnone fd7ce48964 ci(desktop): retry vlcDownload on transient network failures
Every desktop packaging job (Windows MSI, macOS DMG, Linux DEB) currently
breaks on the smallest blip when fetching VLC from get.videolan.org. The
`ir.mahozad.vlc-setup` plugin registers `vlcDownload` / `upxDownload`
tasks that extend `de.undercouch.gradle.tasks.download.Download`, but it
does not configure retries or a generous read timeout, so a single
`SocketTimeoutException` aborts the build.

Recent main runs all failed at the same step:

    > Task :desktopApp:vlcDownload FAILED
    > A failure occurred while executing ...DefaultWorkAction
       > java.net.SocketTimeoutException: Read timed out

Configure all `Download` tasks in this project with:

  - 5 attempts total (initial + 4 retries),
  - 30 s connect timeout,
  - 5 min read timeout (VLC archives are 40-90 MB and the mirror can be
    slow under load),
  - `tempAndMove` so a partial download from one attempt cannot poison
    the next.

This is a CI-only change \u2014 it does not alter what gets bundled, just
makes the fetch resilient.
2026-04-29 20:21:18 +10:00
M 1df6504aac Fix Last Seen formatting for older timestamps
The profile 'Last seen' line was rendered by feeding timeAgo() output
into the 'Last seen %1$s ago' template. timeAgo() returns a bare
absolute date (e.g. 'Jan 14' or 'Jul 27, 2024') for anything older
than a month, so the result was nonsensical:

  - 'Last seen Jan 14 ago'
  - 'Last seen Jul 27, 2024 ago'

Replace the call with a new lastSeenSentence() helper that always
returns a self-contained, grammatical sentence:

  - 'Last seen 5 minutes ago'
  - 'Last seen 2 hours ago'
  - 'Last seen 3 days ago'
  - 'Last seen 2 weeks ago'
  - 'Last seen on Jul 27, 2024 (9 months ago)'
  - 'Last seen on Jan 14, 2024 (1 year ago)'

Anything older than a week now also shows the absolute date alongside
a coarse relative duration, so users can see exactly when the activity
happened without giving up the human-readable 'X ago' framing.

Adds plural-aware duration_minutes/hours/days/weeks/months/years
resources plus last_seen_on_date / last_seen_just_now / last_seen_never
helper strings. The existing 'last_seen' string keeps its placeholder
shape so existing translations continue to work for the recent-duration
case.
2026-04-29 19:11:09 +10:00
Crowdin Bot 5d314a3939 New Crowdin translations by GitHub Action 2026-04-29 08:42:00 +00:00
David Kaspar f581574173 Merge branch 'main' into fix-sonar-empty-functions 2026-04-29 10:41:43 +02:00
David Kaspar 6dd5658947 Merge pull request #2640 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-04-29 10:40:29 +02:00
Crowdin Bot a6d5640206 New Crowdin translations by GitHub Action 2026-04-29 08:17:06 +00:00
davotoula 3ebf6cf02a l10n: translate Nests audio-rooms, AI alt-text, and tracked broadcasts strings
Adds 124 missing translations across cs-rCZ, pt-rBR, sv-rSE, and de-rDE
covering the new Nests (NIP-53 audio-rooms) UI, AI-suggested alt-text
hints, tracked broadcasts setting, and meeting/live-stream tags.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 10:14:54 +02:00
davotoula fdcd83e0c6 extract duplicated string literals into named constants 2026-04-29 09:59:27 +02:00
David Kaspar 708603d13b Merge pull request #2636 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-04-29 09:56:54 +02:00
davotoula 3332d8b530 add no-op comments to empty methods 2026-04-29 08:55:36 +02:00
Crowdin Bot b18b645233 New Crowdin translations by GitHub Action 2026-04-29 03:56:15 +00:00
Vitor Pamplona 250378b657 Merge pull request #2638 from vitorpamplona/claude/fix-listener-test-timeout-HqseI
test(nests): fix flaky ReconnectingNestsListenerTest on macOS
2026-04-28 23:54:25 -04:00
Claude 099da6e7b0 test(nests): fix flaky ReconnectingNestsListenerTest on macOS
`subscribeSpeaker_survives_session_swap` and
`unsubscribe_before_session_swap_releases_handle` had two race
conditions exposed only on macOS scheduling:

1. ScriptedListener.subscribeCount is incremented inside
   opener(listener) — BEFORE the wrapper's pump reaches
   `handle.objects.collect { frames.emit(it) }`. Waiting on
   subscribeCount alone doesn't prove the pump is collecting
   from first.frames. An emit upstream before the pump's collect
   registers is silently dropped.

2. The wrapper's outer `frames` SharedFlow is replay=0. The
   `scope.async { take(2).toList() }` consumer might not have
   subscribed by the time the test thread races into the first
   emit, dropping the value.

Both are fixed by waiting for actual subscription registration:
- first/second.frames.subscriptionCount.first { it > 0 } — flips
  to 1 only after the pump's collect lands, which is strictly
  after liveHandleRef.set(handle).
- onSubscription + CompletableDeferred — fires after the
  consumer's collector is registered against the SharedFlow.
2026-04-29 03:16:23 +00:00
Vitor Pamplona 6c8c5eb7a5 Merge pull request #2637 from vitorpamplona/claude/fix-windows-jvm-test-JA55M
fix(quartz): skip schnorr256k1 benchmark when native lib fails to load on Windows
2026-04-28 21:45:13 -04:00
Claude 21796cc4ad fix(quartz): skip schnorr256k1 benchmark when native lib fails to load on Windows
The triple benchmark probed libschnorr256k1 with a try/catch that only
handled UnsatisfiedLinkError. On Windows the loader raises
IllegalStateException when the JNI .dll for the platform isn't packaged,
which propagated out as a test failure instead of skipping the C row.

Mirror the broader catch already used in Secp256k1CrossValidationTest so
the benchmark prints a SKIP-style note and continues with the ACINQ +
Kotlin rows on platforms where the C lib isn't available.
2026-04-29 01:28:27 +00:00
Vitor Pamplona ee7eada00e Fixes top bar filter for Nests 2026-04-28 20:38:34 -04:00
Vitor Pamplona 86b1b02211 Last test to fix 2026-04-28 20:23:13 -04:00
Vitor Pamplona fd1b9f44b4 Merge pull request #2635 from vitorpamplona/claude/review-nostrnests-filtering-3EoIe
Add presence-based freshness filtering for Nests feed
2026-04-28 20:17:10 -04:00
Vitor Pamplona 29cf589b37 Merge pull request #2634 from vitorpamplona/claude/fix-keyboard-textfield-overlap-BA65q
Fix IME padding and window insets in NestFullScreen
2026-04-28 20:13:47 -04:00
Claude 5eea6ec8e6 fix(nests): keep chat textfield visible above keyboard on NestFullScreen
Activity used the system default soft-input behavior (pan), so opening
the keyboard slid the whole screen up, partially hiding the composer
and putting the top of the screen out of reach. Set adjustResize on
NestActivity and add consumeWindowInsets + imePadding to the Scaffold
body so the column reflows above the IME and the textfield stays in
view.
2026-04-28 22:51:07 +00:00
Claude 0c875b150b feat(nests): tighten lobby filter to mirror NostrNests
Bring the audio-room lobby filter closer to the NostrNests reference:

- Reject service/endpoint URLs that aren't HTTPS, dropping legacy
  `wss+livekit://` rooms a moq-lite client can't reach.
- Drop PLANNED rooms whose `starts` is more than 1 h in the past or
  more than 30 d in the future.
- Add a single lobby-wide kind-10312 REQ (10 min, limit 500) per
  active relay and use it to hide OPEN/PRIVATE rooms whose host
  crashed without flipping status to CLOSED. Brand-new rooms keep
  showing for the freshness window so they don't pop in late.
- Expand follow-style top filters to include rooms whose p-tagged
  speakers are followed, not just the host.
2026-04-28 22:45:18 +00:00
Vitor Pamplona 2723c48f88 Better design for audiences 2026-04-28 18:20:38 -04:00
Vitor Pamplona 12ac22b53b Merge branch 'main' of https://github.com/vitorpamplona/amethyst 2026-04-28 18:08:51 -04:00
Vitor Pamplona a538138b25 Merge pull request #2633 from vitorpamplona/claude/fix-amethyst-nest-reconnecting-T8DSP
Update MOQ relay URLs to include port 4443
2026-04-28 18:04:36 -04:00
Claude 882a7b5501 Revert "fix(net): prefer IPv4 over IPv6 for OkHttp + QUIC dial"
This reverts commit 23fab05c8a.
2026-04-28 21:56:30 +00:00
Vitor Pamplona 356ddffa99 Merge pull request #2630 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-04-28 17:55:35 -04:00
Vitor Pamplona de773d06f9 Fixes test cases 2026-04-28 17:54:29 -04:00
Crowdin Bot 3fd30cc820 New Crowdin translations by GitHub Action 2026-04-28 21:54:06 +00:00
Vitor Pamplona b81bebf6bb Merge pull request #2632 from vitorpamplona/claude/fix-gesture-nav-spacing-BC4nv
Fix window insets handling in NestActionBar
2026-04-28 17:52:24 -04:00
Claude 045bc36371 fix(nests): respect navigation bar insets in NestActionBar
The bottom action bar in NestFullScreen was rendering under Android's
gesture navigation area in edge-to-edge mode, leaving the leave / talk
/ react buttons partially obscured. Apply BottomAppBarDefaults
windowInsets to the surface so it pads above the system navigation.
2026-04-28 20:59:22 +00:00
Vitor Pamplona dcc6a7e07d Merge pull request #2631 from vitorpamplona/claude/wire-jni-secp256k1-kYhKZ
Update schnorr256k1-kmp dependency to v1.0.3 and fix group ID
2026-04-28 16:28:52 -04:00
Claude 23fab05c8a fix(net): prefer IPv4 over IPv6 for OkHttp + QUIC dial
The Android emulator (and a number of dual-stack networks where the
IPv6 path is broken) advertises working v6 connectivity but silently
drops outbound packets. With the JDK / RFC 6724 default of AAAA-first,
any host that publishes a stale or unreachable AAAA record — e.g.
moq.nostrnests.com, whose Linode v6 currently doesn't accept
connections — causes every HTTPS call and every QUIC handshake to
fast-fail with ConnectException, parking the Nests room screen on
"Reconnecting" indefinitely.

Plug a small Dns wrapper into both OkHttp factories that puts
Inet4Address entries ahead of v6 in the resolved list (v6 stays as
fallback for genuinely v6-only hosts), and switch UdpSocket.connect
from getByName to getAllByName + IPv4-first selection so the QUIC
audio path makes the same choice as the HTTPS auth POST.
2026-04-28 20:26:49 +00:00
Claude ecb985e2b4 build(quartz): bump schnorr256k1-kmp to 1.0.3 with bundled JVM JNI
Pulls in the per-platform JNI shards (linux-x86_64, linux-aarch64,
darwin-x86_64, darwin-aarch64) that the upstream library now publishes as
runtime dependencies of schnorr256k1-kmp-jvm. The 1.0.3 release also
moved the groupId to com.vitorpamplona.schnorr256k1.

Net effect: Secp256k1CrossValidationTest's customCImplementationMatchesAcinqAndKotlin
no longer prints SKIP, and the Custom C(JNI) column in
Secp256k1TripleBenchmark now reports numbers (verifySchnorr ~25.6k ops/s,
signSchnorr cached pk ~57.4k ops/s) instead of (N/A). 188/188 tests pass
in the secp256k1 suite on a stock JVM with no LD_LIBRARY_PATH or
-Djava.library.path needed.

https://claude.ai/code/session_01XEfLBStDum7h8Brwo7qFXt
2026-04-28 20:20:28 +00:00
Vitor Pamplona 17e04fc692 Centralizes the empty mesaage. 2026-04-28 16:18:24 -04:00
Claude 412b2a285c fix(nests): point default moq.nostrnests.com URLs at port 4443
The public nostrnests deployment serves moq-auth + moq-relay on
:4443; :443 is not the live endpoint. With the old defaults a
freshly-created room could never mint a JWT, so the room screen
parked on "Reconnecting" forever and the room never showed up in
the nostrnests UI.
2026-04-28 20:10:35 +00:00
Vitor Pamplona 629915dc6c Merge pull request #2628 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-04-28 15:58:45 -04:00
Vitor Pamplona 7818fd5db3 Merge pull request #2629 from vitorpamplona/claude/expandable-nestfullscreen-summary-H38Ey
Refactor nest room UI: collapsible summary and stage header redesign
2026-04-28 15:58:31 -04:00
Claude 7fe88ac4be Collapse Nest summary by default; tap title to expand
Move the LIVE chip and listener count out of the header strip and into
the right side of the Stage card's title row (listeners first, then
chip). The remaining summary now hides by default and toggles when the
user taps the room title in the top bar, reclaiming vertical space for
the stage and chat.
2026-04-28 19:55:40 +00:00
Crowdin Bot c99ad72794 New Crowdin translations by GitHub Action 2026-04-28 19:52:19 +00:00
Vitor Pamplona 0f35777bd6 Better size for the Admin badge on Nests 2026-04-28 15:35:05 -04:00
Vitor Pamplona 24336cb940 Fixes scroll to newest when a new message arrives 2026-04-28 15:19:08 -04:00
Vitor Pamplona ee860b92a1 Adjusts the roudabout way of making the chat screen 2026-04-28 15:11:17 -04:00