Merge branch 'main' into claude/simplify-nostrclient-api-ZpOTB

This commit is contained in:
Vitor Pamplona
2026-03-28 13:09:52 -04:00
committed by GitHub
15 changed files with 65 additions and 7 deletions
@@ -378,6 +378,7 @@
<string name="bookmarks_title">Domyślne zakładki</string> <string name="bookmarks_title">Domyślne zakładki</string>
<string name="bookmarks_explainer">Twoje domyślne zakładki obsługiwane przez większość klientów</string> <string name="bookmarks_explainer">Twoje domyślne zakładki obsługiwane przez większość klientów</string>
<string name="drafts">Projekty</string> <string name="drafts">Projekty</string>
<string name="polls">Ankiety</string>
<string name="private_bookmarks">Prywatne Zakładki</string> <string name="private_bookmarks">Prywatne Zakładki</string>
<string name="public_bookmarks">Publiczne zakładki</string> <string name="public_bookmarks">Publiczne zakładki</string>
<string name="add_to_private_bookmarks">Dodaj do prywatnych zakładek</string> <string name="add_to_private_bookmarks">Dodaj do prywatnych zakładek</string>
@@ -723,6 +724,7 @@
<string name="relay_monitor_rtt_open">Otwórz</string> <string name="relay_monitor_rtt_open">Otwórz</string>
<string name="relay_monitor_rtt_read">Odczyt</string> <string name="relay_monitor_rtt_read">Odczyt</string>
<string name="relay_monitor_rtt_write">Zapis</string> <string name="relay_monitor_rtt_write">Zapis</string>
<string name="relay_monitor_rtt">RTT</string>
<string name="relay_monitor_network">Sieć</string> <string name="relay_monitor_network">Sieć</string>
<string name="relay_monitor_relay_type">Typ</string> <string name="relay_monitor_relay_type">Typ</string>
<string name="relay_monitor_supported_nips">Obsługiwane Nipy</string> <string name="relay_monitor_supported_nips">Obsługiwane Nipy</string>
@@ -1663,6 +1665,8 @@
<string name="event_sync_no_events">brak wydarzeń</string> <string name="event_sync_no_events">brak wydarzeń</string>
<string name="ots_explorer_settings">Eksplorator Bitcoin (OTS)</string> <string name="ots_explorer_settings">Eksplorator Bitcoin (OTS)</string>
<string name="events">wydarzeń</string> <string name="events">wydarzeń</string>
<string name="events_from_you">wydarzenia od Ciebie</string>
<string name="events_to_you">wydarzenia dla Ciebie</string>
<string name="dms">DMs</string> <string name="dms">DMs</string>
<string name="profiles">profile</string> <string name="profiles">profile</string>
<string name="relay_settings_lower2">lista transmiterów wysyłających</string> <string name="relay_settings_lower2">lista transmiterów wysyłających</string>
@@ -1778,8 +1782,46 @@
<!-- NIP-86 Relay Management --> <!-- NIP-86 Relay Management -->
<string name="relay_management_title">Zarządzaj %1$s</string> <string name="relay_management_title">Zarządzaj %1$s</string>
<string name="relay_management_loading">Wczytywanie funkcji zarządzania transmiterem…</string> <string name="relay_management_loading">Wczytywanie funkcji zarządzania transmiterem…</string>
<string name="relay_management_error">Nie można połączyć się z panelem zarządzania transmiterem</string>
<string name="relay_management_no_methods">Brak dostępnych metod zarządzania</string> <string name="relay_management_no_methods">Brak dostępnych metod zarządzania</string>
<string name="relay_management_dismiss">Ignoruj</string> <string name="relay_management_dismiss">Ignoruj</string>
<string name="relay_management_tab_pubkeys">Użytkownicy</string>
<string name="relay_management_tab_events">Wydarzenia</string>
<string name="relay_management_tab_kinds">Typy</string>
<string name="relay_management_tab_ips">Adresy IP</string>
<string name="relay_management_tab_settings">Ustawienia</string>
<string name="relay_management_banned_pubkeys">Zbanowani użytkownicy</string>
<string name="relay_management_no_banned_pubkeys">Brak zbanowanych użytkowników</string>
<string name="relay_management_allowed_pubkeys">Uprawnieni użytkownicy</string>
<string name="relay_management_no_allowed_pubkeys">Brak uprawnionych użytkowników</string>
<string name="relay_management_moderation_queue">Kolejka do moderacji</string>
<string name="relay_management_no_moderation_events">Brak wydarzeń wymagających moderacji</string>
<string name="relay_management_banned_events">Zbanowane wydarzenia</string>
<string name="relay_management_no_banned_events">Brak zbanowanych wydarzeń</string>
<string name="relay_management_allowed_kinds">Dozwolone typy</string>
<string name="relay_management_no_allowed_kinds">Brak dozwolonych typów</string>
<string name="relay_management_blocked_ips">Zablokowane adresy IP</string>
<string name="relay_management_no_blocked_ips">Brak zablokowanych adresów IP</string>
<string name="relay_management_add">Dodaj</string>
<string name="relay_management_remove">Usuń</string>
<string name="relay_management_allow">Zezwól</string>
<string name="relay_management_ban">Banuj</string>
<string name="relay_management_ban_pubkey">Banuj klucz publiczny</string>
<string name="relay_management_allow_pubkey">Aprobuj klucz publiczny</string>
<string name="relay_management_ban_event">Zbanuj wydarzenie</string>
<string name="relay_management_allow_kind">Aprobuj typ</string>
<string name="relay_management_block_ip">Blokuj IP</string>
<string name="relay_management_pubkey_hex">Klucz publiczny (hex)</string>
<string name="relay_management_event_id_hex">ID wydarzenia (hex)</string>
<string name="relay_management_kind_number">Numer typu</string>
<string name="relay_management_ip_address">Adres IP</string>
<string name="relay_management_reason_optional">Powód (Opcjonalne)</string>
<string name="relay_management_confirm">Potwierdź</string>
<string name="relay_management_cancel">Anuluj</string>
<string name="relay_management_apply">Zastosuj</string>
<string name="relay_management_relay_name">Nazwa transmitera</string>
<string name="relay_management_relay_description">Opis transmitera</string>
<string name="relay_management_relay_icon_url">Adres ikony transmitera</string>
<string name="relay_management_button">Zarządzaj Transmiterem</string> <string name="relay_management_button">Zarządzaj Transmiterem</string>
<string name="manage">Zarządzaj</string> <string name="manage">Zarządzaj</string>
</resources> </resources>
+1 -1
View File
@@ -34,7 +34,7 @@ allprojects {
target 'src/**/*.kt' target 'src/**/*.kt'
ktlint() ktlint()
licenseHeaderFile rootProject.file('.spotless/copyright.kt'), "package|import|class|object|sealed|open|interface|abstract " licenseHeaderFile rootProject.file('.spotless/copyright.kt'), "@file:|package|import|class|object|sealed|open|interface|abstract "
} }
groovyGradle { groovyGradle {
@@ -83,6 +83,7 @@ class NostrSignerExternal(
val result = backgroundQuery.sign(unsignedEvent) ?: foregroundQuery.sign(unsignedEvent) val result = backgroundQuery.sign(unsignedEvent) ?: foregroundQuery.sign(unsignedEvent)
if (result is SignerResult.RequestAddressed.Successful<SignResult>) { if (result is SignerResult.RequestAddressed.Successful<SignResult>) {
@Suppress("UNCHECKED_CAST")
(result.result.event as? T)?.let { (result.result.event as? T)?.let {
return it return it
} }
@@ -38,6 +38,7 @@ class GalleryListEvent(
content: String, content: String,
sig: HexKey, sig: HexKey,
) : PrivateTagArrayEvent(id, pubKey, createdAt, KIND, tags, content, sig) { ) : PrivateTagArrayEvent(id, pubKey, createdAt, KIND, tags, content, sig) {
@Suppress("DEPRECATION")
companion object { companion object {
const val KIND = 10011 const val KIND = 10011
const val ALT = "Profile Gallery" const val ALT = "Profile Gallery"
@@ -36,6 +36,7 @@ data class NNote(
return NNote(bytes.toHexKey()) return NNote(bytes.toHexKey())
} }
@Suppress("DEPRECATION")
fun create(eventId: HexKey): String = eventId.hexToByteArray().toNote() fun create(eventId: HexKey): String = eventId.hexToByteArray().toNote()
} }
} }
@@ -115,6 +115,7 @@ class GitReplyEvent(
fun rootIssueOrPatch() = tags.lastNotNullOfOrNull(MarkedETag::parseRootId) fun rootIssueOrPatch() = tags.lastNotNullOfOrNull(MarkedETag::parseRootId)
@Suppress("DEPRECATION")
companion object { companion object {
const val KIND = 1622 const val KIND = 1622
const val ALT_DESCRIPTION = "A Git Reply" const val ALT_DESCRIPTION = "A Git Reply"
@@ -32,12 +32,17 @@ import com.vitorpamplona.quartz.nip34Git.issue.GitIssueEvent
import com.vitorpamplona.quartz.nip34Git.patch.GitPatchEvent import com.vitorpamplona.quartz.nip34Git.patch.GitPatchEvent
import com.vitorpamplona.quartz.nip34Git.repository.GitRepositoryEvent import com.vitorpamplona.quartz.nip34Git.repository.GitRepositoryEvent
@Suppress("DEPRECATION")
fun TagArrayBuilder<GitReplyEvent>.repository(rep: ATag) = addUnique(rep.toATagArray()) fun TagArrayBuilder<GitReplyEvent>.repository(rep: ATag) = addUnique(rep.toATagArray())
@Suppress("DEPRECATION")
fun TagArrayBuilder<GitReplyEvent>.repository(rep: EventHintBundle<GitRepositoryEvent>) = addUnique(rep.toATag().toATagArray()) fun TagArrayBuilder<GitReplyEvent>.repository(rep: EventHintBundle<GitRepositoryEvent>) = addUnique(rep.toATag().toATagArray())
@Suppress("DEPRECATION")
fun TagArrayBuilder<GitReplyEvent>.patch(rep: EventHintBundle<GitPatchEvent>) = addUnique(rep.toMarkedETag(MarkedETag.MARKER.ROOT).toTagArray()) fun TagArrayBuilder<GitReplyEvent>.patch(rep: EventHintBundle<GitPatchEvent>) = addUnique(rep.toMarkedETag(MarkedETag.MARKER.ROOT).toTagArray())
@Suppress("DEPRECATION")
fun TagArrayBuilder<GitReplyEvent>.issue(rep: EventHintBundle<GitIssueEvent>) = addUnique(rep.toMarkedETag(MarkedETag.MARKER.ROOT).toTagArray()) fun TagArrayBuilder<GitReplyEvent>.issue(rep: EventHintBundle<GitIssueEvent>) = addUnique(rep.toMarkedETag(MarkedETag.MARKER.ROOT).toTagArray())
@Suppress("DEPRECATION")
fun TagArrayBuilder<GitReplyEvent>.notify(list: List<PTag>) = pTags(list) fun TagArrayBuilder<GitReplyEvent>.notify(list: List<PTag>) = pTags(list)
@@ -111,6 +111,7 @@ class TorrentCommentEvent(
fun torrentIds() = tags.firstNotNullOfOrNull(MarkedETag::parseRootId) ?: tags.firstNotNullOfOrNull(ETag::parseId) fun torrentIds() = tags.firstNotNullOfOrNull(MarkedETag::parseRootId) ?: tags.firstNotNullOfOrNull(ETag::parseId)
@Suppress("DEPRECATION")
companion object { companion object {
const val KIND = 2004 const val KIND = 2004
const val ALT_DESCRIPTION = "Comment for a Torrent file" const val ALT_DESCRIPTION = "Comment for a Torrent file"
@@ -32,10 +32,10 @@ package com.vitorpamplona.quartz.nip44Encryption.crypto
*/ */
object ChaCha20Core { object ChaCha20Core {
// "expand 32-byte k" as little-endian integers // "expand 32-byte k" as little-endian integers
private const val SIGMA0 = 0x61707865.toInt() private const val SIGMA0 = 0x61707865
private const val SIGMA1 = 0x3320646e.toInt() private const val SIGMA1 = 0x3320646e
private const val SIGMA2 = 0x79622d32.toInt() private const val SIGMA2 = 0x79622d32
private const val SIGMA3 = 0x6b206574.toInt() private const val SIGMA3 = 0x6b206574
/** /**
* ChaCha20 quarter round (RFC 8439 §2.1). * ChaCha20 quarter round (RFC 8439 §2.1).
@@ -121,6 +121,7 @@ class NostrSignerRemote(
) )
if (result is SignerResult.RequestAddressed.Successful<SignResult>) { if (result is SignerResult.RequestAddressed.Successful<SignResult>) {
@Suppress("UNCHECKED_CAST")
(result.result.event as? T)?.let { (result.result.event as? T)?.let {
return it return it
} }
@@ -73,6 +73,7 @@ class LabeledBookmarkListEvent(
fun title() = tags.firstNotNullOfOrNull(TitleTag::parse) fun title() = tags.firstNotNullOfOrNull(TitleTag::parse)
@Suppress("DEPRECATION")
fun titleOrName() = title() ?: name() fun titleOrName() = title() ?: name()
fun description() = tags.firstNotNullOfOrNull(DescriptionTag::parse) fun description() = tags.firstNotNullOfOrNull(DescriptionTag::parse)
@@ -64,6 +64,7 @@ class PeopleListEvent(
@Deprecated("NIP-51 has deprecated name. Use title instead", ReplaceWith("title()")) @Deprecated("NIP-51 has deprecated name. Use title instead", ReplaceWith("title()"))
fun name() = tags.firstNotNullOfOrNull(NameTag::parse) fun name() = tags.firstNotNullOfOrNull(NameTag::parse)
@Suppress("DEPRECATION")
fun titleOrName() = title() ?: name() fun titleOrName() = title() ?: name()
fun title() = tags.firstNotNullOfOrNull(TitleTag::parse) fun title() = tags.firstNotNullOfOrNull(TitleTag::parse)
@@ -18,6 +18,8 @@
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
@file:Suppress("DEPRECATION")
package com.vitorpamplona.quartz.nip56Reports package com.vitorpamplona.quartz.nip56Reports
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
@@ -18,6 +18,8 @@
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
@file:Suppress("DEPRECATION", "UNCHECKED_CAST")
package com.vitorpamplona.quartz.utils package com.vitorpamplona.quartz.utils
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
@@ -21,7 +21,6 @@
package com.vitorpamplona.quartz.nip96FileStorage.info package com.vitorpamplona.quartz.nip96FileStorage.info
import java.net.URI import java.net.URI
import java.net.URL
actual fun makeAbsoluteIfRelativeUrl( actual fun makeAbsoluteIfRelativeUrl(
baseUrl: String, baseUrl: String,
@@ -32,7 +31,7 @@ actual fun makeAbsoluteIfRelativeUrl(
if (apiUrl.isAbsolute) { if (apiUrl.isAbsolute) {
potentiallyRelativeUrl potentiallyRelativeUrl
} else { } else {
URL(URL(baseUrl), potentiallyRelativeUrl).toString() URI(baseUrl).resolve(potentiallyRelativeUrl).toString()
} }
} catch (e: Exception) { } catch (e: Exception) {
potentiallyRelativeUrl potentiallyRelativeUrl