diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index eebabdfba..08282a725 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -25,8 +25,9 @@ If applicable, add a video and/or screenshots to help explain your problem. **Device (please complete the following information):** - Phone Brand/Model [e.g. Pixel 7 Pro]: - - Android Version [e.g. 33]: - - App Version [e.g. v0.20.3]: + - Android Version [e.g. 34]: + - App Version [e.g. v0.94.3]: + - App Flavour [e.g. Google Play or FDroid]: - Amber Version (if using it to sign): **Bounty (in Bitcoin sats) offered for a solution** diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index 8db52a3e4..cdba7b693 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -235,7 +235,7 @@ fun ProfileContentTemplate( .width(100.dp) .height(100.dp) .clip(shape = CircleShape) - .border(3.dp, MaterialTheme.colorScheme.background, CircleShape) + .border(3.dp, MaterialTheme.colorScheme.onBackground, CircleShape) .clickable(onClick = onClick), loadProfilePicture = accountViewModel.settings.showProfilePictures.value, loadRobohash = accountViewModel.settings.featureSet != FeatureSetType.PERFORMANCE, @@ -425,7 +425,7 @@ fun WatchFollower( .observeAsState() LaunchedEffect(key1 = accountUserFollowersState) { - onReady(baseAccountUser.followerCount().toString() ?: "--") + onReady(baseAccountUser.followerCount().toString()) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt index a4f60bb7b..70edb0362 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt @@ -23,7 +23,6 @@ package com.vitorpamplona.amethyst.ui.theme import android.app.Activity import android.app.UiModeManager import android.content.Context -import android.graphics.Color.red import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.isSystemInDarkTheme @@ -278,14 +277,14 @@ val darkLargeProfilePictureModifier = .width(120.dp) .height(120.dp) .clip(shape = CircleShape) - .border(3.dp, DarkColorPalette.background, CircleShape) + .border(3.dp, DarkColorPalette.onBackground, CircleShape) val lightLargeProfilePictureModifier = Modifier .width(120.dp) .height(120.dp) .clip(shape = CircleShape) - .border(3.dp, LightColorPalette.background, CircleShape) + .border(3.dp, LightColorPalette.onBackground, CircleShape) val RichTextDefaults = RichTextStyle().resolveDefaults() diff --git a/amethyst/src/main/res/values-fa-rIR/strings.xml b/amethyst/src/main/res/values-fa-rIR/strings.xml index 71a721d72..e5780a860 100644 --- a/amethyst/src/main/res/values-fa-rIR/strings.xml +++ b/amethyst/src/main/res/values-fa-rIR/strings.xml @@ -81,6 +81,13 @@ !خیلی ممنون مبلغ به ساتوشی ارسال ساتوشی + شکلک ساز مخفی + یک شکلک به همراه پیام مخفی به یادداشت اضافه کنید + پیام مخفی به گیرنده + پیام پنهان من + پیشوند نمایان + 😎 + افزودن به یادداشت " %1$s : %2$s خطا در تبدیل" "%1$s پیش نمایش تصویر کارت برای" کانال جدید @@ -90,6 +97,7 @@ توصیف "درباره ما.. " به چی فکر میکنی؟ + نوشتن یک پیام... ارسال ذخیره ساختن @@ -106,6 +114,7 @@ خبرنامه همگانی جستجو در خبرنامه افزودن رله + نام نمایش نام نام من استریچ باحالیان @@ -141,6 +150,7 @@ گفتگوها یادداشت ها پاسخ ها + مال شما گالری "دنبال شوندگان" "گزارش ها" @@ -195,6 +205,7 @@ با توصیف و تصویر نام گفتگو تغییر کرد به + نمایه جدید گفتگو: تصویر و تصویر به ترک کردن @@ -202,6 +213,13 @@ کانال ساخته شد "اطلاعات کانال تغییر کرد به" گفتگوی عمومی + فراداده گفتگوی عمومی + گفتگوهای عمومی در ناستر برای همه نمایان هستند + می توانند در آن شرکت کنند. آنها برای انجمن های باز درباره موضوعات به‌خصوص عالی هستند. + نظارت می تواند توسط حذف پست ها از رله ها انجام گیرد + رله ها + برای میزبانی این گروه ۱تا ۳ رله وارد کنید. + کلاینت های ناستر از این تنظیمات استفاده می کنند تا بدانند پیام ها را از کجا بارگیری کنند و به کجا بفرستند. یادداشت های دریافت شده بیرون کردن خودکار @@ -508,6 +526,7 @@ ارسال به کیف پول زپ باز کردن در کیف پول Cashu کپی کردن توکن + در یک اپلیکیشن دیگر باز کن آدرس لایتنینگ تنظیم نشده است توکن به کلیپبورد کپی شد زنده @@ -587,6 +606,8 @@ موضوع موضوع گفتگو "\@کاربر1, @کاربر2, @کاربر3" + نمی توان بارگذاری کرد + مقصد پیام را وارد کنید اعضای گروه توضیحات برای اعضا تعویض نام به خاطر اهداف جدید. @@ -863,6 +884,7 @@ خلاصه تغییرات اصلاحات سریع… پذیرش پیشنهاد + ویديو را در قاب جدا باز کن بارگيری روشن کردن متن متن خاموش @@ -928,4 +950,5 @@ هیچ اپ تورنتی برای باز کردن و بارگیری فایل نصب نیست. لیستی را برای فیلتر خبرنامه انتخاب کنید با قفل کردن دستگاه از حساب کاربری خارج شو + پیام خصوصی diff --git a/amethyst/src/main/res/values-sl-rSI/strings.xml b/amethyst/src/main/res/values-sl-rSI/strings.xml index 4fa7802ba..358f73fd9 100644 --- a/amethyst/src/main/res/values-sl-rSI/strings.xml +++ b/amethyst/src/main/res/values-sl-rSI/strings.xml @@ -77,7 +77,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Profilna pasica Plačilo uspešno Napaka pri razčlembi sporočila o napaki - " Sledim" + " Sledi" " Sledilcev" Profil Varnostni filtri @@ -222,6 +222,13 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Kanal ustvarjen "Informacije kanala spremenjene v" Javni pogovor + Metapodatki Javnega Klepeta + Javni klepeti so vidni vsem na Nostru in vsakdo + se lahko pridruži. So odlični za odprte skupnosti o specifičnih temah. + Moderiranje je možno z brisanjem objav na njihovih relejih + Releji + Vnesi 1-3 releje, ki gostijo to skupino. + Nostr odjemalci uporabljajo to nastavitev, da vedo, od kod prenesti tvoja sporočila in kam jih poslati. sprejete objave Odstrani Avtomatsko @@ -529,6 +536,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Pošlji v Zap denarnico Odpri Cashu denarnico Kopiraj žeton + Odpri z drugo aplikacijo Lightning naslov ni nastavljen Žeton kopiran v odložišče V ŽIVO @@ -559,6 +567,8 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Celovit Poenostavljen Optimiziran + Klasično + Moderno Sistemska Svetla Temna @@ -573,6 +583,8 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Skrij navigacijsko vrstico ob pomikanju UI način Izberi stil objave + Slog galerije profila + Izberi slog galerije Naloži sliko Pošiljatelji nezaželjenih vsebin Utišano. Klikni za vklop zvoka @@ -604,6 +616,8 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Zadeva Tema pogovora "\@Uporabnik1, @Uporabnik2, @Uporabnik3" + Nalaganje ni uspelo + Najprej vnesi cilj sporočila Člani te skupine Razlaga članom Spreminjanje imena za dosego novih ciljev. @@ -872,6 +886,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Povzetek sprememb Hitri popravki… Sprejmi predlog + Zaženi video v pojavnem oknu Prenesi Vklopi besedilo Izklopi besedilo @@ -937,4 +952,5 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov Ni nameščenih torent aplikacij za odpiranje in prenos datoteke. Izberite seznam za filtriranje vira Odjava ob zaklepu naprave + Zasebno sporočilo diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/bech32/Bech32Util.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/bech32/Bech32Util.kt index 093121ae5..2b057dc67 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/bech32/Bech32Util.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/bech32/Bech32Util.kt @@ -168,18 +168,20 @@ object Bech32 { bech32: String, noChecksum: Boolean = false, ): Triple, Encoding> { + val filteredBech32 = bech32.filter { it.code in 33..126 } + var pos = 0 - bech32.forEachIndexed { index, char -> + filteredBech32.forEachIndexed { index, char -> require(char.code in 33..126) { "invalid character $char" } if (char == '1') { pos = index } } - val hrp = bech32.take(pos).lowercase() // strings must be lower case + val hrp = filteredBech32.take(pos).lowercase() // strings must be lower case require(hrp.length in 1..83) { "hrp must contain 1 to 83 characters" } - val data = Array(bech32.length - pos - 1) { map[bech32[pos + 1 + it].code] } + val data = Array(filteredBech32.length - pos - 1) { map[filteredBech32[pos + 1 + it].code] } return if (noChecksum) { Triple(hrp, data, Encoding.Beck32WithoutChecksum) diff --git a/quartz/src/test/java/com/vitorpamplona/quartz/nip19Bech32/NIP19ParserTest.kt b/quartz/src/test/java/com/vitorpamplona/quartz/nip19Bech32/NIP19ParserTest.kt index 1edbd57e0..343072320 100644 --- a/quartz/src/test/java/com/vitorpamplona/quartz/nip19Bech32/NIP19ParserTest.kt +++ b/quartz/src/test/java/com/vitorpamplona/quartz/nip19Bech32/NIP19ParserTest.kt @@ -21,6 +21,7 @@ package com.vitorpamplona.quartz.nip19Bech32 import com.vitorpamplona.quartz.nip01Core.tags.addressables.ATag +import com.vitorpamplona.quartz.nip19Bech32.bech32.bechToBytes import com.vitorpamplona.quartz.nip19Bech32.entities.NAddress import com.vitorpamplona.quartz.nip19Bech32.entities.NEvent import com.vitorpamplona.quartz.nip19Bech32.entities.NProfile @@ -428,4 +429,15 @@ class NIP19ParserTest { nevent, ) } + + @Test + fun decodeBech32WithInvisibleCharacter() { + val bomChar = '\uFEFF' + val withBom = bomChar + "nsec1lfkarc7439n4l3uahr45ej8mrjc39dd879t0ps355550dj8j9uzs3rnw24" + + assertEquals( + "nsec1lfkarc7439n4l3uahr45ej8mrjc39dd879t0ps355550dj8j9uzs3rnw24", + withBom.bechToBytes().toNsec(), + ) + } }