diff --git a/amethyst/build.gradle b/amethyst/build.gradle index 161d3de06..d154fda61 100644 --- a/amethyst/build.gradle +++ b/amethyst/build.gradle @@ -12,8 +12,8 @@ android { applicationId "com.vitorpamplona.amethyst" minSdk 26 targetSdk 34 - versionCode 383 - versionName "0.88.6" + versionCode 385 + versionName "0.88.8" buildConfigField "String", "RELEASE_NOTES_ID", "\"2a34cbadd03212c8162e1ff896ba12641821088a2ec8d5e40d54aa80c0510800\"" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt index 7580bdc2e..5231262ce 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt @@ -55,10 +55,17 @@ class EventNotificationConsumer( // PushNotification Wraps don't include a receiver. // Test with all logged in accounts + var matchAccount = false LocalPreferences.allSavedAccounts().forEach { - if (it.hasPrivKey || it.loggedInWithExternalSigner) { + if (!matchAccount && it.hasPrivKey || it.loggedInWithExternalSigner) { LocalPreferences.loadCurrentAccountFromEncryptedStorage(it.npub)?.let { acc -> - consumeIfMatchesAccount(event, acc) + Log.d("EventNotificationConsumer", "New Notification Testing if for ${it.npub}") + try { + consumeIfMatchesAccount(event, acc) + matchAccount = true + } catch (e: Exception) { + // Not for this account. + } } } } @@ -71,7 +78,7 @@ class EventNotificationConsumer( pushWrappedEvent.cachedGift(account.signer) { notificationEvent -> val consumed = LocalCache.hasConsumed(notificationEvent) val verified = LocalCache.justVerify(notificationEvent) - Log.d("EventNotificationConsumer", "New Notification Arrived for ${account.userProfile().toBestDisplayName()} consumed= $consumed && verified= $verified") + Log.d("EventNotificationConsumer", "New Notification ${notificationEvent.kind} ${notificationEvent.id} Arrived for ${account.userProfile().toBestDisplayName()} consumed= $consumed && verified= $verified") if (!consumed && verified) { Log.d("EventNotificationConsumer", "New Notification was verified") unwrapAndConsume(notificationEvent, account) { innerEvent -> @@ -154,6 +161,7 @@ class EventNotificationConsumer( event.id, content, user, + event.createdAt, userPicture, noteUri, applicationContext, @@ -194,7 +202,7 @@ class EventNotificationConsumer( val userPicture = note.author?.profilePicture() val noteUri = note.toNEvent() notificationManager() - .sendDMNotification(event.id, content, user, userPicture, noteUri, applicationContext) + .sendDMNotification(event.id, content, user, event.createdAt, userPicture, noteUri, applicationContext) } } } @@ -237,31 +245,63 @@ class EventNotificationConsumer( val author = LocalCache.getOrCreateUser(it.pubKey) val senderInfo = Pair(author, it.content.ifBlank { null }) - acc.decryptContent(noteZapped) { - Log.d("EventNotificationConsumer", "Notify Decrypted if Private Note") + if (noteZapped.event?.content() != null) { + acc.decryptContent(noteZapped) { + Log.d("EventNotificationConsumer", "Notify Decrypted if Private Note") - val zappedContent = it.split("\n").get(0) + val zappedContent = it.split("\n").get(0) + + val user = senderInfo.first.toBestDisplayName() + var title = stringRes(applicationContext, R.string.app_notification_zaps_channel_message, amount) + senderInfo.second?.ifBlank { null }?.let { title += " ($it)" } + + var content = + stringRes( + applicationContext, + R.string.app_notification_zaps_channel_message_from, + user, + ) + zappedContent.let { + content += + " " + + stringRes( + applicationContext, + R.string.app_notification_zaps_channel_message_for, + zappedContent, + ) + } + val userPicture = senderInfo?.first?.profilePicture() + val noteUri = "nostr:Notifications" + + Log.d("EventNotificationConsumer", "Notify ${event.id} $content $title $noteUri") + + notificationManager() + .sendZapNotification( + event.id, + content, + title, + event.createdAt, + userPicture, + noteUri, + applicationContext, + ) + } + } else { + // doesn't have a base note to refer to. + Log.d("EventNotificationConsumer", "Notify Zapped note not available") val user = senderInfo.first.toBestDisplayName() var title = stringRes(applicationContext, R.string.app_notification_zaps_channel_message, amount) senderInfo.second?.ifBlank { null }?.let { title += " ($it)" } - var content = + val content = stringRes( applicationContext, R.string.app_notification_zaps_channel_message_from, user, ) - zappedContent.let { - content += - " " + - stringRes( - applicationContext, - R.string.app_notification_zaps_channel_message_for, - zappedContent, - ) - } - val userPicture = senderInfo?.first?.profilePicture() + + val userPicture = senderInfo.first.profilePicture() val noteUri = "nostr:Notifications" Log.d("EventNotificationConsumer", "Notify ${event.id} $content $title $noteUri") @@ -271,6 +311,7 @@ class EventNotificationConsumer( event.id, content, title, + event.createdAt, userPicture, noteUri, applicationContext, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt index 4bc761c5d..f29ceb3e8 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationUtils.kt @@ -90,6 +90,7 @@ object NotificationUtils { id: String, messageBody: String, messageTitle: String, + time: Long, pictureUrl: String?, uri: String, applicationContext: Context, @@ -101,6 +102,7 @@ object NotificationUtils { id, messageBody, messageTitle, + time, pictureUrl, uri, channelId, @@ -113,6 +115,7 @@ object NotificationUtils { id: String, messageBody: String, messageTitle: String, + time: Long, pictureUrl: String?, uri: String, applicationContext: Context, @@ -124,6 +127,7 @@ object NotificationUtils { id, messageBody, messageTitle, + time, pictureUrl, uri, channelId, @@ -136,6 +140,7 @@ object NotificationUtils { id: String, messageBody: String, messageTitle: String, + time: Long, pictureUrl: String?, uri: String, channelId: String, @@ -151,6 +156,7 @@ object NotificationUtils { id = id, messageBody = messageBody, messageTitle = messageTitle, + time = time, picture = imageResult.drawable as? BitmapDrawable, uri = uri, channelId, @@ -162,6 +168,7 @@ object NotificationUtils { id = id, messageBody = messageBody, messageTitle = messageTitle, + time = time, picture = null, uri = uri, channelId, @@ -175,6 +182,7 @@ object NotificationUtils { id: String, messageBody: String, messageTitle: String, + time: Long, picture: BitmapDrawable?, uri: String, channelId: String, @@ -218,6 +226,7 @@ object NotificationUtils { .setContentIntent(contentPendingIntent) .setPriority(NotificationCompat.PRIORITY_HIGH) .setAutoCancel(true) + .setWhen(time * 1000) // Build the notification val builder = @@ -236,6 +245,7 @@ object NotificationUtils { .setPublicVersion(builderPublic.build()) .setPriority(NotificationCompat.PRIORITY_HIGH) .setAutoCancel(true) + .setWhen(time * 1000) notify(notId, builder.build()) } diff --git a/amethyst/src/main/res/values-cs/strings.xml b/amethyst/src/main/res/values-cs/strings.xml index f077e465c..cd2b10fe4 100644 --- a/amethyst/src/main/res/values-cs/strings.xml +++ b/amethyst/src/main/res/values-cs/strings.xml @@ -14,6 +14,7 @@ Nepodařilo se dešifrovat zprávu Obrázek skupiny Explicitní obsah + Nevyžádaná pošta Počet spamových událostí z tohoto relé Zneužívání identity Nezákonné jednání @@ -102,6 +103,7 @@ Přidat přeposílání Zobrazované jméno Moje zobrazované jméno + Ostrich McAwesome Vítejte Ostrich! Uživatelské jméno Moje uživatelské jméno @@ -197,6 +199,9 @@ Nostr Adresa nikdy nyní + h + m + d Nahota Neslušnost / Nenávistná řeč Nahlásit nenávistnou řeč @@ -297,6 +302,7 @@ Minimální zaps Maximální zaps Konsensus + (0–100)% Uzavřít po dnech Nebylo možné hlasovat @@ -359,6 +365,7 @@ Upozorní vás, když dorazí soukromá zpráva Přijaté zapsy Upozorní vás, když vás někdo zapsne + %1$s satů Od %1$s pro %1$s Upozornit: @@ -410,6 +417,7 @@ Minimální PoW Ověření Platba + Cashu Token Vyměnit Poslat do Zap peněženky Otevřít v Cashu Wallet @@ -417,6 +425,7 @@ Není nastavena žádná Lightning adresa Token zkopírován do schránky ŽIVĚ + OFFLINE UKONČENO PLÁNOVÁNO Živé vysílání je offline @@ -437,6 +446,7 @@ Nastavení Vždy Pouze Wi-Fi + Neomezená WiFi Nikdy Hotovo Zjednodušené @@ -503,6 +513,7 @@ Hlasy jsou váženy podle hodnoty zapu. Můžete nastavit minimální částku, abyste se vyhnuli spammerům, a maximální částku, abyste zabránili velkým zapperům, kteří by mohli ovládnout hlasování. Použijte stejnou částku v obou polích, aby byla hodnota každého hlasu stejná. Nechte prázdné pro přijetí libovolné částky. Nelze odeslat zap Poslat zprávu uživateli + OK Nepodařilo se dosáhnout %1$s: %2$s Nepodařilo se sestavit adresu URL NIP-11 pro %1$s: %2$s Nepodařilo se dosáhnout %1$s: %2$s @@ -524,6 +535,7 @@ Chybí nastavení blesku Uživatel %1$s nemá nastavenou bleskovou adresu pro přijímání satoshi Procenta + 25 Rozdělování Zapů s Přeposílání Zapů na Bleskové peněženky nenalezený @@ -590,9 +602,11 @@ Ahoj, je to stále k dispozici? Prodat předmět Název + iPhone 13 Stav Kategorie Cena (v Sats) + 1000 Místo Město, stát, země Nový @@ -611,6 +625,7 @@ Knihy Domácí zvířata Sportovní + Fitness Umění Vyrobí Domovský @@ -625,6 +640,8 @@ Server po nahrání neposkytl URL Nepodařilo se stáhnout nahraná média ze serveru Nelze připravit místní soubor k nahrání: %1$s + Nahrání selhalo: %1$s + Smazání selhalo: %1$s Upravit koncept Přihlášení pomocí QR kódu Trasa @@ -644,6 +661,8 @@ Odpověď Zvýšit nebo citovat Olajkovat + Zap + Změnit rychlé reakce Obrázek profilu %1$s Relé %1$s Rozbalit seznam relací @@ -658,6 +677,7 @@ Zrušit Zap-zběrku Místo Odstranit umístění + Zap splits Zrušit rozdělení Zap Přidat upozornění na obsah Odstranit upozornění na obsah @@ -702,9 +722,11 @@ Maximální limit Omezené zápisy Rozštěpováno od + FORK Git repositář: %1$s Internet: Klon: + OTS: %1$s Důkaz časového razítka Existuje důkaz, že tento příspěvek byl podepsán někdy před %1$s. Důkaz byl označen v Bitcoin blockchainu v tomto datu a čase. Upravit příspěvek @@ -732,7 +754,6 @@ Žádost o práci od DVM Žádost o platbu odeslána, čeká se na potvrzení z vaší peněženky Čekání na potvrzení platby DVM nebo na zaslání výsledků - Špatný požadavek - Server nemůže nebo nechce zpracovat požadavek. Neautorizovaný - Uživatel nemá platné přihlašovací údaje Požadována platba - Server vyžaduje platbu pro dokončení požadavku @@ -752,7 +773,6 @@ Rozsah nesplnitelný - Server nemůže splnit hodnotu uvedenou v hlavičce rozsahu požadavku. Očekávání selhalo - Server nemůže splnit požadavky uvedené v hlavičce očekávání požadavku Vyžadována aktualizace - Server odmítá zpracovat požadavek s aktuálním protokolem, pokud klient neaktualizuje na jiný protokol. - Interní chyba serveru - Server narazil na neočekávanou chybu a nemůže dokončit požadavek Nerealizováno - Server nemůže splnit požadavek nebo nerozpoznává metodu požadavku Špatná brána - Server funguje jako brána a obdržel neplatnou odpověď od hostitele @@ -763,9 +783,4 @@ Nedostatečné úložiště - Server nemá dostatek úložiště, aby úspěšně zpracoval požadavek Detekována smyčka - Server detekuje nekonečnou smyčku při zpracování požadavku Vyžadováno ověření sítě - Klient musí být autentizován, aby získal přístup k síti - - Neomezená WiFi - Nahrání selhalo: %1$s - Smazání selhalo: %1$s - Změnit rychlé reakce diff --git a/amethyst/src/main/res/values-de/strings.xml b/amethyst/src/main/res/values-de/strings.xml index 749c1d593..eb4dcbe31 100644 --- a/amethyst/src/main/res/values-de/strings.xml +++ b/amethyst/src/main/res/values-de/strings.xml @@ -14,6 +14,7 @@ Nachricht konnte nicht entschlüsselt werden Gruppenbild Anstößiger Inhalt + Spam Anzahl der Spam-Ereignisse von diesem Relais Vortäuschung Illegales Verhalten @@ -44,11 +45,15 @@ Sie verwenden einen öffentlichen Schlüssel und öffentliche Schlüssel sind schreibgeschützt. Mit einem privaten Schlüssel anmelden, um nicht mehr zu folgen Sie verwenden einen öffentlichen Schlüssel, und öffentliche Schlüssel sind nur lesbar. Melden Sie sich mit einem privaten Schlüssel an, um ein Wort oder einen Satz auszublenden Sie verwenden einen öffentlichen Schlüssel und öffentliche Schlüssel sind schreibgeschützt. Mit einem privaten Schlüssel anmelden, um ein Wort oder einen Satz anzeigen zu können + Zaps Aufrufe + Boost + boosted bearbeitet Bearbeitung #%1$s Original Zitat + Fork Eine Bearbeitung vorschlagen Neuer Betrag in Sats Hinzufügen @@ -87,6 +92,7 @@ Fehler beim Hochladen des Bildes Relay-Adresse Beiträge + Bytes Fehler Anzahl der Verbindungsfehler in dieser Sitzung Startseite @@ -97,6 +103,7 @@ Relay hinzufügen Anzeigename Mein Anzeigename + Ostrich McAwesome Willkommen Ostrich! Benutzername Mein Benutzername @@ -197,6 +204,7 @@ anz der Bedingungen ist erforderlich nie jetzt s + m t Nacktheit Beleidigungen / Hassrede @@ -300,6 +308,7 @@ anz der Bedingungen ist erforderlich Mindest-Zap-Betrag Maximaler Zap-Betrag Konsens + (0–100)% Schließen nach Tagen Konnte nicht abstimmen @@ -391,6 +400,7 @@ anz der Bedingungen ist erforderlich Die Menge in Bytes, die von diesem Relais empfangen wurde, einschließlich Filter und Ereignisse Ein Fehler ist beim Abrufen von Relay-Informationen von %1$s aufgetreten Inhaber + Version Programme Kontakt Unterstützte NIPs @@ -399,6 +409,7 @@ anz der Bedingungen ist erforderlich Einschränkungen Länder Sprachen + Tags Veröffentlichungsrichtlinie Fehler und Hinweise von diesem Relais Nachrichtenlänge @@ -418,6 +429,8 @@ anz der Bedingungen ist erforderlich Token kopieren Keine Lightning-Adresse festgelegt Token in die Zwischenablage kopiert + LIVE + OFFLINE BEENDET GEPLANT Livestream ist offline @@ -427,7 +440,9 @@ anz der Bedingungen ist erforderlich Relais Notizen Entdeckung Marktplatz + Live Gemeinschaft + Plaudern Genehmigte Beiträge Diese Gruppe hat keine Beschreibung oder Regeln. Sprechen Sie mit dem Eigentümer, um eine hinzuzufügen. Diese Community hat keine Beschreibung. Sprechen Sie mit dem Eigentümer, um eine hinzuzufügen. @@ -436,10 +451,12 @@ anz der Bedingungen ist erforderlich Einstellungen Immer Nur WLAN + Unbegrenztes WLAN Nie Fertig Vereinfacht Leistung + System Hell Dunkel Anwendungseinstellungen @@ -501,6 +518,7 @@ anz der Bedingungen ist erforderlich Die Abstimmungen werden nach der Höhe des Zaps gewichtet. Sie können einen Mindestbetrag festlegen, um Spam zu verhindern, und einen Höchstbetrag, um zu verhindern, dass große Zapper die Abstimmung dominieren. Verwenden Sie denselben Betrag in beiden Feldern, um sicherzustellen, dass jeder Stimme der gleiche Wert zukommt. Lassen Sie es leer, um jeden Betrag zu akzeptieren. Zap konnte nicht gesendet werden Mit dem Benutzer kommunizieren + OK Konnte %1$s nicht erreichen: %2$s Fehler beim Zusammenstellen der NIP-11-URL für %1$s: %2$s Konnte %1$s nicht erreichen: %2$s @@ -512,6 +530,8 @@ anz der Bedingungen ist erforderlich Aktiv für: Startseite Nachrichten + Plaudern + Global Suche Zaps aufteilen und weiterleiten Unterstützende Clients werden Zaps an die hier hinzugefügten Benutzer aufteilen und weiterleiten, anstatt an Sie @@ -520,6 +540,7 @@ anz der Bedingungen ist erforderlich Fehlende Lightning-Konfiguration Benutzer %1$s hat keine Lightning-Adresse eingerichtet, um Sats zu empfangen Prozent + 25 Zaps aufteilen mit Zaps weiterleiten an Lightning-Wallets nicht gefunden @@ -586,9 +607,11 @@ anz der Bedingungen ist erforderlich Hallo, ist das noch verfügbar? Artikel verkaufen Titel + iPhone 13 Zustand Kategorie Preis (in Sats) + 1000 Ort Stadt, Staat, Land Neu @@ -607,6 +630,7 @@ anz der Bedingungen ist erforderlich Bücher Haustiere Sport + Fitness Kunst Handwerk Zuhause @@ -621,13 +645,17 @@ anz der Bedingungen ist erforderlich Der Server hat nach dem Hochladen keine URL angegeben Hochgeladene Medien konnten nicht vom Server heruntergeladen werden Lokale Datei konnte nicht zum Hochladen vorbereitet werden: %1$s + Upload fehlgeschlagen: %1$s + Löschen fehlgeschlagen: %1$s Entwurf bearbeiten Einloggen mit QR-Code + Route Startseite Suche Entdecken Nachrichten Benachrichtigungen + Global Kurzfilme Sicherheitsfilter Neuer Beitrag @@ -638,6 +666,8 @@ anz der Bedingungen ist erforderlich Antworten Boosten oder Zitieren Gefällt mir + Zap + Schnelle Reaktionen ändern Profilbild von %1$s %1$s weiterleiten Rela-Liste erweitern @@ -692,12 +722,16 @@ anz der Bedingungen ist erforderlich Jetzt spenden wurde Ihnen präsentiert von: Diese Version wurde Ihnen präsentiert von: + Version %1$s Vielen Dank! Maximallimit Eingeschränkte Schriften Geforkt von + FORK + Git Repository: %1$s Internet: Klonen: + OTS: %1$s Zeitstempel Beweis Es gibt einen Beweis, dass dieser Beitrag irgendwann vor %1$s signiert wurde. Der Beweis wurde zu diesem Datum und Uhrzeit in der Bitcoin-Blockchain gestempelt. Beitrag bearbeiten @@ -725,7 +759,6 @@ anz der Bedingungen ist erforderlich Anforderung eines Jobs von DVM Zahlungsanforderung gesendet, wartet auf Bestätigung Ihrer Geldbörse Warten auf Bestätigung der Zahlung durch DVM oder auf die Ergebnisse - Fehlerhafte Anfrage - Der Server kann oder will die Anfrage nicht verarbeiten. Nicht autorisiert - Der Benutzer hat keine gültigen Authentifizierungsdaten Zahlung erforderlich - Der Server verlangt eine Zahlung, um die Anfrage abzuschließen @@ -745,7 +778,6 @@ anz der Bedingungen ist erforderlich Bereich nicht erfüllbar - Der Server kann den im Range-Header-Feld der Anfrage angegebenen Wert nicht erfüllen. Erwartung fehlgeschlagen - Der Server kann die Anforderungen, die durch den Expect-Request-Header-Feld angegeben sind, nicht erfüllen Upgrade erforderlich - Der Server weigert sich, die Anfrage mit dem aktuellen Protokoll zu verarbeiten, es sei denn, der Client wechselt zu einem anderen Protokoll. - Interner Serverfehler - Der Server hat einen unerwarteten Fehler festgestellt und kann die Anfrage nicht abschließen Nicht implementiert - Der Server kann die Anfrage nicht erfüllen oder erkennt die Anfragemethode nicht Schlechtes Gateway - Der Server agiert als Gateway und erhielt eine ungültige Antwort vom Host @@ -756,9 +788,4 @@ anz der Bedingungen ist erforderlich Unzureichender Speicher - Der Server hat nicht genug Speicher, um die Anfrage erfolgreich zu verarbeiten Schleife erkannt - Der Server erkennt eine Endlosschleife, während er die Anfrage bearbeitet Netzwerk-Authentifizierung erforderlich - Der Client muss authentifiziert werden, um auf das Netzwerk zuzugreifen - - Unbegrenztes WLAN - Upload fehlgeschlagen: %1$s - Löschen fehlgeschlagen: %1$s - Schnelle Reaktionen ändern diff --git a/amethyst/src/main/res/values-hi-rIN/strings.xml b/amethyst/src/main/res/values-hi-rIN/strings.xml index 38fd4c515..1d84f8053 100644 --- a/amethyst/src/main/res/values-hi-rIN/strings.xml +++ b/amethyst/src/main/res/values-hi-rIN/strings.xml @@ -642,6 +642,8 @@ सेवासंगणक ने आरोहण पश्चात जालपता नहीं दिया सेवासंगणक से आरोहणकृत चित्र चलचित्र का अवरोहण नहीं कर पाए स्थानीय अभिलेख अनुकूल नहीं बना सके आरोहण के लिए : %1$s + आरोहण असफल : %1$s + मिटाने में असफल : %1$s पाण्डुलिपि का सम्पादन करें क्यूआर॰ क्रमचित्र के साथ प्रवेशांकन करें मार्ग @@ -754,4 +756,22 @@ डीवीएम॰ से कार्य का अनुरोध किया जा रहा है भुगतान अनुरोध भेजा गया। आपके धनकोष से पुष्टीकरण की प्रतीक्षा में डीवीएम॰ से भुगतान की पुष्टीकरण अथवा परिणाम भेजने की प्रतीक्षा में + बुरा अनुरोध - सेवासंगणक इस अनुरोध पर काम नहीं कर सकता अथवा नहीं करेगा। + अनधिकृत - उपयोगकर्ता के पास प्रमाणिकरण हेतु वैध परिचयपत्र उपलब्ध नहीं + भुगतान अनिवार्य - अनुरोध पूरा करने के लिए सेवासंगणक को भुगतान की आवश्यकता है + वर्जित - उपयोगकर्ता को यह अनुरोध करने का अधिकार नहीं + अप्राप्त - याचित पता ढूँढने में सेवासंगणक असफल + कार्य की अनुमति नहीं - सेवासंगणक याचित कार्य का आलम्बन करता है पर लक्ष्यांकित संसाधन को नहीं + अस्वीकृत - सेवासंगणक कोई विषयवस्तु नहीं ढूँढ सका जिससे अनुरोध की पूर्ति हो सके। + प्रतिनिधि प्रमाणिकरण आवश्यक - उपयोगकर्ता के पास प्रमाणिकरण हेतु वैध परिचयपत्र उपलब्ध नहीं + अनुरोध समयसीमा समाप्त - सेवासंगणक समयसीमा पार किया किसी अन्य की प्रतीक्षा में। + संघर्ष - सेवासंगणक अनुरोध की पूर्ति नहीं कर सकता क्योंकि संसाधन के साथ संघर्ष है + विगत - याचित विषयवस्तु सेवासंगणक से सर्वदा के लिए मिटाया गया है तथा पुनर्स्थापित नहीं होगा + लम्बाई आवश्यक - सेवासंगणक ने अनुरोध अस्वीकार किया क्योंकि इस के लिए स्पष्ट विषयवस्तु लम्बाई सूचक शीर्षक चाहिए + पूर्वावस्था असफल - अनुरोध के शीर्षक प्रपत्रस्थानों में निर्दिष्ट पूर्वावस्थाओं की पूर्ति में सेवासंगणक असफल + भार अत्याधिक - अनुरोध सेवासंगणक के निरूपित सीमाएँ से बडा है, तथा सेवासंगणक ने इस पर काम करना नकार दिया + जालपता लम्बाई अत्याधिक - ग्राहक द्वारा अनुरोधित जालपता की लम्बाई सेवासंगणक के काम के लिए अत्याधिक है। + अनावलम्बित माध्यम प्रकार - अनुरोध में प्रयुक्त माध्यम प्रकार सेवासंगणक द्वारा अवलम्बित नहीं + विस्तार असाध्य - अनुरोध के विस्तार शीर्षक प्रपत्रस्थान में सूचित मूल्य की पूर्ति सेवासंगणक द्वारा असाध्य। + अपेक्षा असफल - अनुरोध के अपेक्षा शीर्षक प्रपत्रस्थान में सूचित आवश्यकताओं की पूर्ति सेवासंगणक के लिए असाध्य diff --git a/amethyst/src/main/res/values-pt-rBR/strings.xml b/amethyst/src/main/res/values-pt-rBR/strings.xml index 5613dd9f5..c0d5b4ba1 100644 --- a/amethyst/src/main/res/values-pt-rBR/strings.xml +++ b/amethyst/src/main/res/values-pt-rBR/strings.xml @@ -14,6 +14,7 @@ Não foi possível descriptografar a mensagem Imagem do grupo Conteúdo explícito + Spam O número de eventos de spam vindo deste relé Representação Comportamento ilegal @@ -44,11 +45,13 @@ Faça login com uma chave privada para poder remover seguidores Você está usando uma chave pública e as chaves públicas são somente de leitura. Faça login com uma chave privada para poder ocultar uma palavra ou frase. Você está usando uma chave pública e as chaves públicas são somente de leitura. Faça login com uma chave privada para poder mostrar uma palavra ou frase. + Zaps Contagem de visualizações Impulsionar impulsionado editado edição #%1$s + original Citar Garfo Propor uma Edição @@ -89,6 +92,7 @@ Falha ao enviar imagem Endereço do Relay Postagens + Bytes Erros O número de erros de conexão nesta sessão Feed principal @@ -130,6 +134,7 @@ "Seguindo" "Denúncias" Mais opções + " Relés" Site Endereço Lightning Copiar a chave Nsec (sua senha) para backup @@ -194,6 +199,9 @@ Endereço Nostr nunca agora + h + m + d Nudez Palavrões / Discurso de ódio Denunciar discurso de ódio @@ -294,6 +302,7 @@ Zap mínimo Zap máximo Consenso + (0–100)% Fechar depois dias Impossibilitado de votar @@ -338,6 +347,7 @@ Não Lista de seguidores Seguindo + Global Lista Silenciada ## Conecte-se através do Tor com o Orbot \n\n1. Instale o [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android) @@ -355,6 +365,7 @@ Notifica você quando chega uma mensagem privada Zaps Recebidos Notifica quando alguém te manda um zap + %1$s sats De %1$s por %1$s Notificar: @@ -421,6 +432,7 @@ Transmissão ao vivo encerrada Sair exclui todas as suas informações locais. Certifique-se de fazer backup de suas chaves privadas para evitar a perda de sua conta. Você quer continuar? Tags Seguidas + Relés Descoberta de Notas Mercado Ao vivo @@ -434,6 +446,7 @@ Configurações Sempre Somente wifi + WiFi não medida Nunca Concluído Simplificado @@ -452,6 +465,7 @@ Modo de interface Escolha o estilo da publicação Carregar imagem + Spammers Silenciado. Clique para ativar o som Som ligado. Clique para silenciar Pesquise registros locais e remotos @@ -499,6 +513,7 @@ Os votos são ponderados pelo valor do zap. Você pode definir um valor mínimo para evitar spammers e um valor máximo para evitar que grandes zappers assumam o controle da enquete. Use o mesmo valor em ambos os campos para garantir que cada voto tenha o mesmo valor. Deixe em branco para aceitar qualquer valor. Não foi possível enviar o Zap Mensagem ao usuário + OK Falha ao acessar %1$s: %2$s Falha ao montar NIP-11 url para %1$s: %2$s Falha ao acessar %1$s: %2$s @@ -511,6 +526,7 @@ Início Mensagens diretas Bate-papos + Global Pesquisa Dividir e encaminhar Zaps Os clientes que suportam dividirão e encaminharão zaps para os usuários adicionados aqui em vez dos seus @@ -519,6 +535,7 @@ Configuração Lightning ausente O usuário %1$s não possui um endereço lightning configurado para receber sats Percentual + 25 Dividindo zaps com Encaminhando zaps para Carteira Lightning não encontrada @@ -585,9 +602,11 @@ Olá, ainda está disponível? Vender um Item Título + iPhone 13 Condição Categoria Preço (em Sats) + 1000 Localização Cidade, Estado, País Novo @@ -606,6 +625,7 @@ Livros Animais de Estimação Esportes + Bem-estar Arte Artesanato Casa @@ -620,6 +640,8 @@ O servidor não forneceu uma URL após o upload Não foi possível baixar o arquivo de mídia carregado do servidor Não foi possível preparar o arquivo local para enviar: %1$s + Falha ao enviar: %1$s + Falha ao excluir: %1$s Editar rascunho Entrar com Código QR Rota @@ -628,6 +650,7 @@ Descobrir Mensagens Notificações + Global Vídeos Curtos Filtros de Segurança Novo Post @@ -638,6 +661,8 @@ Responder Impulsionar ou Citar Gostar + Zap + Mudar reações rápidas Foto de perfil de %1$s Repassar %1$s Expandir lista de repasse @@ -697,9 +722,11 @@ Limite máximo Gravações Restritas Forkado de + FORK Repositório Git: %1$s Site: Clonar: + OTS: %1$s Prova de Carimbo de data/hora Há prova de que esta postagem foi assinada antes de %1$s. A prova foi carimbada no blockchain do Bitcoin naquela data e hora. Editar postagem @@ -727,7 +754,6 @@ Solicitando Trabalho ao DVM Pedido de pagamento enviado, aguardando confirmação da sua carteira Aguardando o DVM confirmar o pagamento ou enviar resultados - Requisição inválida - O servidor não pode ou não irá processar a requisição. Não autorizado - O usuário não possui credenciais de autenticação válidas Pagamento necessário - O servidor requer pagamento para completar a requisição @@ -747,7 +773,6 @@ Faixa não satisfatória - O servidor não pode atender ao valor indicado no campo de cabeçalho Range da requisição. Falha na expectativa - O servidor não pode atender aos requisitos indicados pelo campo de cabeçalho Expect da requisição Atualização necessária - O servidor se recusa a processar a requisição com o protocolo atual, a menos que o cliente faça a atualização para um protocolo diferente. - Erro interno do servidor - O servidor encontrou um erro inesperado e não pode completar a requisição Não implementado - O servidor não pode cumprir a requisição ou não reconhece o método da requisição Gateway inválido - O servidor atua como um gateway e recebeu uma resposta inválida do host @@ -758,9 +783,4 @@ Armazenamento insuficiente - O servidor não possui armazenamento suficiente para processar a requisição com sucesso Loop detectado - O servidor detecta um loop infinito enquanto processa a requisição Autenticação de rede necessária - O cliente deve ser autenticado para acessar a rede - - WiFi não medida - Falha ao enviar: %1$s - Falha ao excluir: %1$s - Mudar reações rápidas diff --git a/amethyst/src/main/res/values-sv-rSE/strings.xml b/amethyst/src/main/res/values-sv-rSE/strings.xml index 8c414f8a4..80e25592d 100644 --- a/amethyst/src/main/res/values-sv-rSE/strings.xml +++ b/amethyst/src/main/res/values-sv-rSE/strings.xml @@ -14,6 +14,7 @@ Kunde inte dekryptera meddelandet Grupp bild Explicit Innehåll + Spam Antal skräpposthändelser från detta relä Imitation Olagligt beteende @@ -44,11 +45,13 @@ Logga in med en privat nyckel för att kunna sluta följa Du använder en offentlig nyckel, och offentliga nycklar är endast läsbara. Logga in med en privat nyckel för att kunna dölja ett ord eller en mening Du använder en offentlig nyckel, och offentliga nycklar är endast läsbara. Logga in med en privat nyckel för att kunna visa ett ord eller en mening + Zaps Antal visningar Boosta boostad redigerat redigering #%1$s + original Citera Förgrening Föreslå en redigering @@ -89,6 +92,7 @@ Det gick inte att ladda upp bilden Relä Adress Inlägg + Bytes Fel Antal anslutningsfel under denna session Hem Flöde @@ -104,6 +108,8 @@ Användarnamn Mitt användarnamn Om mig + Profilbild URL + Banner URL Websida URL LN Adress LN URL (Utdaterad) @@ -144,6 +150,7 @@ Sluta blockera Användare "npub, hex, användarnamn " Rensa + Appens logo nsec / npub / hex privat nyckel lösenord för att öppna nyckeln Visa lösenord @@ -192,6 +199,9 @@ Nostr-adress aldrig nu + t + m + d Naket Svordomar / Hatiskt tal Anmäl hattal @@ -276,6 +286,7 @@ Ta bort från Publika Bokmärken Wallet Connect Tjänst Tillåter en Nostr Secret att betala zaps utan att lämna appen. Håll hemligheten säker och använd ett privat relä om möjligt + Plånbok Anslut Pubkey Wallet Connect relä Wallet Connect hemlighet Visa secret key @@ -291,6 +302,7 @@ Minsta Zap Maximal Zap Konsensus + (0–100)% Avsluta efter dagar Kunde inte rösta @@ -335,6 +347,7 @@ Nej Följ lista Alla följare + Global Tyst listan ## Anslut genom Tor med Orbot \n\n1. Installera [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android) @@ -343,6 +356,7 @@ \n4. Ändra vid behov porten i Orbot \n5. Konfigurera Socks-porten på den här skärmen \n6. Tryck på knappen Aktivera för att använda Orbot som proxy + Orbot Socks Port Ogiltigt portnummer Använd Orbot Koppla ifrån Tor/Orbot @@ -350,6 +364,7 @@ Meddelar dig när ett privat meddelande kommer Zaps Mottaget Meddela dig när någon zappar dig + %1$s sats Från %1$s till %1$s Meddela: @@ -379,6 +394,7 @@ Mängden data i byte som mottogs från detta relä, inklusive filter och händelser Ett fel inträffade vid försök att hämta information från Relay %1$s Ägare + Version Programvara Kontakt Stödda NIPs @@ -400,12 +416,15 @@ Minsta PoW Autentisering Betalning + Cashu Token Inlösen Skicka till Zap Plånbok Öppna i Cashu Plånbok Kopiera Token Ingen Lightning-adress angiven Kopierade token till urklipp + LIVE + OFFLINE SLUTADE PLANERAD Direktsändning är offline @@ -415,6 +434,7 @@ Reläer Upptäckt av anteckningar Marknadsplats + Live Gemenskap Chattar Godkända Inlägg @@ -425,10 +445,12 @@ Inställningar Alltid Endast Wi-Fi + Obegränsad WiFi Aldrig Slutförd Förenklad Prestanda + System Ljus Mörk Applikationsinställningar @@ -512,6 +534,7 @@ Saknad lightning-konfiguration Användaren %1$s har inte ställt in en blixtfakturaadress för att ta emot satoshis Procent + 25 Delar zaps med Vidarebefordrar zaps till Blixtpengar hittades inte @@ -578,9 +601,11 @@ Hallå där, är detta fortfarande tillgängligt? Sälj en artikel Titel + iPhone 13 Skick Kategori Pris (i Sats) + 1000 Plats Stad, Region, Land Ny @@ -614,6 +639,8 @@ Servern gav inte en URL efter uppladdning Kunde inte ladda ner uppladdade medier från servern Kunde inte förbereda lokal fil att ladda upp: %1$s + Uppladdning misslyckades: %1$s + Radering misslyckades: %1$s Redigera utkast Logga in med QR-kod Rutt @@ -633,6 +660,8 @@ Svara Boosta eller citera Gilla + Zap + Ändra Snabba Reaktioner %1$s Profilbild Relä %1$s Expandera relälistan @@ -687,12 +716,16 @@ Donera nu tillhandahölls av: Denna version tillhandahölls av: + Version %1$s Tack! Maximal gräns Begränsade skrivningar Forkad från + FORK + Git Repository: %1$s Webbplats: Klona: + OTS: %1$s Tidsstämpel Bevis Det finns bevis på att detta inlägg signerades någon gång före %1$s. Beviset stämplades i Bitcoin-blockchainen vid det datumet och den tiden. Redigera inlägg @@ -720,7 +753,6 @@ Begär jobb från DVM Betalningsbegäran skickad, väntar på bekräftelse från din plånbok Väntar på att DVM ska bekräfta betalningen eller skicka resultaten - Felaktig begäran - Servern kan inte eller vill inte bearbeta begäran. Obehörig - Användaren har inte giltiga autentiseringsuppgifter Betalning krävs - Servern kräver betalning för att slutföra begäran @@ -740,7 +772,6 @@ Område ej tillfredsställt - Servern kan inte uppfylla värdet som anges i begärans Range-huvudfält. Förväntning misslyckades - Servern kan inte uppfylla kraven som anges av Expect-begärans huvudfält Uppgradering krävs - Servern vägrar att bearbeta begäran med det nuvarande protokollet om inte klienten uppgraderar till ett annat protokoll. - Internt serverfel - Servern har stött på ett oväntat fel och kan inte slutföra begäran Ej implementerad - Servern kan inte uppfylla begäran eller känner inte igen begärningsmetoden Fel gateway - Servern agerar som en gateway och fick ett ogiltigt svar från värden @@ -751,9 +782,4 @@ Otillräckligt lagringsutrymme - Servern har inte tillräckligt med lagringsutrymme för att bearbeta begäran framgångsrikt Loop upptäckt - Servern upptäcker en oändlig loop medan den bearbetar begäran Nätverksautentisering krävs - Klienten måste autentiseras för att få tillgång till nätverket - - Obegränsad WiFi - Uppladdning misslyckades: %1$s - Radering misslyckades: %1$s - Ändra Snabba Reaktioner diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt index 6d9f0fad2..6a352b6e9 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Relay.kt @@ -524,9 +524,17 @@ class Relay( } private fun writeToSocket(str: String) { + if (socket == null) { + listeners.forEach { listener -> + listener.onError( + this@Relay, + "", + Error("Failed to send $str. Relay is not connected."), + ) + } + } socket?.let { checkNotInMainThread() - val result = it.send(str) listeners.forEach { listener -> listener.onSend(this@Relay, str, result) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip44/Nip44.kt b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip44/Nip44.kt index 793549be3..2ffa2024d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip44/Nip44.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip44/Nip44.kt @@ -118,8 +118,7 @@ class Nip44( else -> null } } catch (e: Exception) { - Log.e("CryptoUtils", "Could not identify the version for NIP44 payload $json") - e.printStackTrace() + Log.e("CryptoUtils", "NIP44: Unable to find version and decrypt $json", e) null } @@ -140,8 +139,7 @@ class Nip44( else -> null } } catch (e: Exception) { - Log.e("CryptoUtils", "Could not identify the version for NIP44 payload $payload") - e.printStackTrace() + Log.e("CryptoUtils", "NIP44: Unable to find version and decrypt $payload", e) null } }