This commit is contained in:
Vitor Pamplona
2025-04-23 16:24:57 -04:00
7 changed files with 64 additions and 11 deletions

View File

@@ -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**

View File

@@ -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())
}
}

View File

@@ -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()

View File

@@ -81,6 +81,13 @@
<string name="thank_you_so_much">!خیلی ممنون</string>
<string name="amount_in_sats">مبلغ به ساتوشی</string>
<string name="send_sats">ارسال ساتوشی</string>
<string name="secret_emoji_maker">شکلک ساز مخفی</string>
<string name="secret_emoji_maker_explainer">یک شکلک به همراه پیام مخفی به یادداشت اضافه کنید</string>
<string name="secret_note_to_receiver">پیام مخفی به گیرنده</string>
<string name="secret_note_to_receiver_placeholder">پیام پنهان من</string>
<string name="secret_visible_text">پیشوند نمایان</string>
<string name="secret_visible_text_placeholder">😎</string>
<string name="secret_add_to_text">افزودن به یادداشت</string>
<string name="error_parsing_preview_for">" %1$s : %2$s خطا در تبدیل"</string>
<string name="preview_card_image_for">"%1$s پیش نمایش تصویر کارت برای"</string>
<string name="new_channel">کانال جدید</string>
@@ -90,6 +97,7 @@
<string name="description">توصیف</string>
<string name="about_us">"درباره ما.. "</string>
<string name="what_s_on_your_mind">به چی فکر میکنی؟</string>
<string name="write_a_message">نوشتن یک پیام...</string>
<string name="post">ارسال</string>
<string name="save">ذخیره</string>
<string name="create">ساختن</string>
@@ -106,6 +114,7 @@
<string name="global_feed">خبرنامه همگانی</string>
<string name="search_feed">جستجو در خبرنامه</string>
<string name="add_a_relay">افزودن رله</string>
<string name="profile_name">نام</string>
<string name="display_name">نمایش نام</string>
<string name="my_display_name">نام من</string>
<string name="my_awesome_name">استریچ باحالیان</string>
@@ -141,6 +150,7 @@
<string name="conversations">گفتگوها</string>
<string name="notes">یادداشت ها</string>
<string name="replies">پاسخ ها</string>
<string name="mutual">مال شما</string>
<string name="gallery">گالری</string>
<string name="follows">"دنبال شوندگان"</string>
<string name="reports">"گزارش ها"</string>
@@ -195,6 +205,7 @@
<string name="with_description_of">با توصیف</string>
<string name="and_picture">و تصویر</string>
<string name="changed_chat_name_to">نام گفتگو تغییر کرد به</string>
<string name="changed_chat_profile_to">نمایه جدید گفتگو:</string>
<string name="description_to">تصویر</string>
<string name="and_picture_to">و تصویر به</string>
<string name="leave">ترک کردن</string>
@@ -202,6 +213,13 @@
<string name="channel_created">کانال ساخته شد</string>
<string name="channel_information_changed_to">"اطلاعات کانال تغییر کرد به"</string>
<string name="public_chat">گفتگوی عمومی</string>
<string name="public_chat_title">فراداده گفتگوی عمومی</string>
<string name="public_chat_explainer">گفتگوهای عمومی در ناستر برای همه نمایان هستند
می توانند در آن شرکت کنند. آنها برای انجمن های باز درباره موضوعات به‌خصوص عالی هستند.
نظارت می تواند توسط حذف پست ها از رله ها انجام گیرد</string>
<string name="public_chat_relays_title">رله ها</string>
<string name="public_chat_relays_explainer">برای میزبانی این گروه ۱تا ۳ رله وارد کنید.
کلاینت های ناستر از این تنظیمات استفاده می کنند تا بدانند پیام ها را از کجا بارگیری کنند و به کجا بفرستند.</string>
<string name="posts_received">یادداشت های دریافت شده</string>
<string name="remove">بیرون کردن</string>
<string name="translations_auto">خودکار</string>
@@ -508,6 +526,7 @@
<string name="cashu_redeem_to_zap">ارسال به کیف پول زپ</string>
<string name="cashu_redeem_to_cashu">باز کردن در کیف پول Cashu</string>
<string name="cashu_copy_token">کپی کردن توکن</string>
<string name="quick_actions_open_in_another_app">در یک اپلیکیشن دیگر باز کن</string>
<string name="no_lightning_address_set">آدرس لایتنینگ تنظیم نشده است</string>
<string name="copied_token_to_clipboard">توکن به کلیپبورد کپی شد</string>
<string name="live_stream_live_tag">زنده</string>
@@ -587,6 +606,8 @@
<string name="messages_new_message_subject">موضوع</string>
<string name="messages_new_message_subject_caption">موضوع گفتگو</string>
<string name="messages_new_message_to_caption">"\@کاربر1, @کاربر2, @کاربر3"</string>
<string name="messages_cant_upload_title">نمی توان بارگذاری کرد</string>
<string name="messages_cant_upload_explainer">مقصد پیام را وارد کنید</string>
<string name="messages_group_descriptor">اعضای گروه</string>
<string name="messages_new_subject_message">توضیحات برای اعضا</string>
<string name="messages_new_subject_message_placeholder">تعویض نام به خاطر اهداف جدید.</string>
@@ -863,6 +884,7 @@
<string name="message_to_author">خلاصه تغییرات</string>
<string name="message_to_author_placeholder">اصلاحات سریع…</string>
<string name="accept_the_suggestion">پذیرش پیشنهاد</string>
<string name="enter_picture_in_picture">ویديو را در قاب جدا باز کن</string>
<string name="accessibility_download_for_offline">بارگيری</string>
<string name="accessibility_lyrics_on">روشن کردن متن</string>
<string name="accessibility_lyrics_off">متن خاموش</string>
@@ -928,4 +950,5 @@
<string name="torrent_no_apps">هیچ اپ تورنتی برای باز کردن و بارگیری فایل نصب نیست.</string>
<string name="select_list_to_filter">لیستی را برای فیلتر خبرنامه انتخاب کنید</string>
<string name="temporary_account">با قفل کردن دستگاه از حساب کاربری خارج شو</string>
<string name="private_message">پیام خصوصی</string>
</resources>

View File

@@ -77,7 +77,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="profile_banner">Profilna pasica</string>
<string name="payment_successful">Plačilo uspešno</string>
<string name="error_parsing_error_message">Napaka pri razčlembi sporočila o napaki</string>
<string name="following">" Sledim"</string>
<string name="following">" Sledi"</string>
<string name="followers">" Sledilcev"</string>
<string name="profile">Profil</string>
<string name="security_filters">Varnostni filtri</string>
@@ -222,6 +222,13 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="channel_created">Kanal ustvarjen</string>
<string name="channel_information_changed_to">"Informacije kanala spremenjene v"</string>
<string name="public_chat">Javni pogovor</string>
<string name="public_chat_title">Metapodatki Javnega Klepeta</string>
<string name="public_chat_explainer">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</string>
<string name="public_chat_relays_title">Releji</string>
<string name="public_chat_relays_explainer">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.</string>
<string name="posts_received">sprejete objave</string>
<string name="remove">Odstrani</string>
<string name="translations_auto">Avtomatsko</string>
@@ -529,6 +536,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="cashu_redeem_to_zap">Pošlji v Zap denarnico </string>
<string name="cashu_redeem_to_cashu">Odpri Cashu denarnico</string>
<string name="cashu_copy_token">Kopiraj žeton</string>
<string name="quick_actions_open_in_another_app">Odpri z drugo aplikacijo</string>
<string name="no_lightning_address_set">Lightning naslov ni nastavljen</string>
<string name="copied_token_to_clipboard">Žeton kopiran v odložišče</string>
<string name="live_stream_live_tag">V ŽIVO</string>
@@ -559,6 +567,8 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="ui_feature_set_type_complete">Celovit</string>
<string name="ui_feature_set_type_simplified">Poenostavljen</string>
<string name="ui_feature_set_type_performance">Optimiziran</string>
<string name="gallery_type_classic">Klasično</string>
<string name="gallery_type_modern">Moderno</string>
<string name="system">Sistemska</string>
<string name="light">Svetla</string>
<string name="dark">Temna</string>
@@ -573,6 +583,8 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="automatically_hide_nav_bars_description">Skrij navigacijsko vrstico ob pomikanju</string>
<string name="ui_style">UI način</string>
<string name="ui_style_description">Izberi stil objave</string>
<string name="gallery_style">Slog galerije profila</string>
<string name="gallery_style_description">Izberi slog galerije</string>
<string name="load_image">Naloži sliko</string>
<string name="spamming_users">Pošiljatelji nezaželjenih vsebin</string>
<string name="muted_button">Utišano. Klikni za vklop zvoka</string>
@@ -604,6 +616,8 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="messages_new_message_subject">Zadeva</string>
<string name="messages_new_message_subject_caption">Tema pogovora</string>
<string name="messages_new_message_to_caption">"\@Uporabnik1, @Uporabnik2, @Uporabnik3"</string>
<string name="messages_cant_upload_title">Nalaganje ni uspelo</string>
<string name="messages_cant_upload_explainer">Najprej vnesi cilj sporočila</string>
<string name="messages_group_descriptor">Člani te skupine</string>
<string name="messages_new_subject_message">Razlaga članom</string>
<string name="messages_new_subject_message_placeholder">Spreminjanje imena za dosego novih ciljev.</string>
@@ -872,6 +886,7 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="message_to_author">Povzetek sprememb</string>
<string name="message_to_author_placeholder">Hitri popravki…</string>
<string name="accept_the_suggestion">Sprejmi predlog</string>
<string name="enter_picture_in_picture">Zaženi video v pojavnem oknu</string>
<string name="accessibility_download_for_offline">Prenesi</string>
<string name="accessibility_lyrics_on">Vklopi besedilo</string>
<string name="accessibility_lyrics_off">Izklopi besedilo</string>
@@ -937,4 +952,5 @@ Prijavi se s privatnim ključem, za prikaz skritih besed in stavkov</string>
<string name="torrent_no_apps">Ni nameščenih torent aplikacij za odpiranje in prenos datoteke.</string>
<string name="select_list_to_filter">Izberite seznam za filtriranje vira</string>
<string name="temporary_account">Odjava ob zaklepu naprave</string>
<string name="private_message">Zasebno sporočilo</string>
</resources>

View File

@@ -168,18 +168,20 @@ object Bech32 {
bech32: String,
noChecksum: Boolean = false,
): Triple<String, Array<Int5>, 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)

View File

@@ -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(),
)
}
}