diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt index 8a48aca82..77abdf80a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt @@ -325,6 +325,7 @@ object LocalPreferences { PrefKeys.DEFAULT_DISCOVERY_FOLLOW_LIST, settings.defaultDiscoveryFollowList.value, ) + putOrRemove(PrefKeys.ZAP_PAYMENT_REQUEST_SERVER, settings.zapPaymentRequest.value?.denormalize()) putOrRemove(PrefKeys.LATEST_CONTACT_LIST, settings.backupContactList) @@ -383,7 +384,7 @@ object LocalPreferences { suspend fun loadAccountConfigFromEncryptedStorage(): AccountSettings? = currentAccount()?.let { loadAccountConfigFromEncryptedStorage(it) } - suspend fun saveSharedSettings( + fun saveSharedSettings( sharedSettings: UiSettings, prefs: SharedPreferences = encryptedPreferences(), ) { @@ -393,7 +394,7 @@ object LocalPreferences { } } - suspend fun loadSharedSettings(prefs: SharedPreferences = encryptedPreferences()): UiSettings? { + fun loadSharedSettings(prefs: SharedPreferences = encryptedPreferences()): UiSettings? { Log.d("LocalPreferences", "Load shared settings") with(prefs) { return try { @@ -583,4 +584,15 @@ object LocalPreferences { remove(key) } } + + fun SharedPreferences.Editor.putOrRemove( + key: String, + nwc: Nip47WalletConnect.Nip47URI?, + ) { + if (nwc != null) { + putString(key, JsonMapper.toJson(nwc)) + } else { + remove(key) + } + } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index 0bfa08acc..2aa6ecf86 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -297,12 +297,7 @@ object LocalCache : ILocalCache { observablesByKindAndAuthor[event.kind]?.get(event.pubKey)?.updateIfMatches(event) } - fun checkGetOrCreateUser(key: String): User? { - if (isValidHex(key)) { - return getOrCreateUser(key) - } - return null - } + fun checkGetOrCreateUser(key: String): User? = getOrCreateUser(key) fun getOrCreateUser(key: HexKey): User { require(isValidHex(key = key)) { "$key is not a valid hex" } @@ -414,11 +409,8 @@ object LocalCache : ILocalCache { } private fun isValidHex(key: String): Boolean { - if (key.isBlank()) return false if (key.length != 64) return false - if (key.contains(':')) return false - - return Hex.isHex(key) + return Hex.isHex64(key) } fun checkGetOrCreateAddressableNote(key: String): AddressableNote? = diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/AccountsTorStateConnector.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/AccountsTorStateConnector.kt index 538ac3c50..6748f1df1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/AccountsTorStateConnector.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/AccountsTorStateConnector.kt @@ -52,15 +52,19 @@ class AccountsTorStateConnector( listOf(MutableStateFlow(emptySet())) } - emitAll( - combine(dmFlowReady) { - val dmRelays = mutableSetOf() - it.forEach { - dmRelays.addAll(it) - } - dmRelays.toSet() - }, - ) + if (dmFlowReady.isEmpty()) { + emit(emptySet()) + } else { + emitAll( + combine(dmFlowReady) { + val dmRelays = mutableSetOf() + it.forEach { + dmRelays.addAll(it) + } + dmRelays.toSet() + }, + ) + } }.onEach { torEvaluatorFlow.dmRelays.tryEmit(it) }.stateIn( @@ -74,22 +78,26 @@ class AccountsTorStateConnector( accountsCache.accounts .debounce(200) .transformLatest { snapshot -> - val dmFlows = snapshot.map { it.value.dmRelayList.flow } + val trustedRelayFlows = snapshot.map { it.value.trustedRelays.flow } - val dmFlowReady = - dmFlows.ifEmpty { + val trustedRelayFlowReady = + trustedRelayFlows.ifEmpty { listOf(MutableStateFlow(emptySet())) } - emitAll( - combine(dmFlowReady) { - val dmRelays = mutableSetOf() - it.forEach { - dmRelays.addAll(it) - } - dmRelays.toSet() - }, - ) + if (trustedRelayFlowReady.isEmpty()) { + emit(emptySet()) + } else { + emitAll( + combine(trustedRelayFlowReady) { + val trustedRelays = mutableSetOf() + it.forEach { + trustedRelays.addAll(it) + } + trustedRelays.toSet() + }, + ) + } }.onEach { torEvaluatorFlow.trustedRelays.tryEmit(it) }.stateIn( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelaySettings.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelaySettings.kt index e33477d05..b0dc31d59 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelaySettings.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelaySettings.kt @@ -26,6 +26,6 @@ data class TorRelaySettings( val torType: TorType = TorType.OFF, val onionRelaysViaTor: Boolean = true, val dmRelaysViaTor: Boolean = false, - val trustedRelaysViaTor: Boolean = false, val newRelaysViaTor: Boolean = false, + val trustedRelaysViaTor: Boolean = false, ) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt index ae9dcd791..9480564e3 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/torState/TorRelayState.kt @@ -61,8 +61,8 @@ class TorRelayState( torType = torType, onionRelaysViaTor = onionRelaysViaTor, dmRelaysViaTor = dmRelaysViaTor, - trustedRelaysViaTor = trustedRelaysViaTor, newRelaysViaTor = newRelaysViaTor, + trustedRelaysViaTor = trustedRelaysViaTor, ) }.onStart { emit( @@ -70,8 +70,8 @@ class TorRelayState( torType = torSettingsFlow.torType.value, onionRelaysViaTor = torSettingsFlow.onionRelaysViaTor.value, dmRelaysViaTor = torSettingsFlow.dmRelaysViaTor.value, - trustedRelaysViaTor = torSettingsFlow.trustedRelaysViaTor.value, newRelaysViaTor = torSettingsFlow.newRelaysViaTor.value, + trustedRelaysViaTor = torSettingsFlow.trustedRelaysViaTor.value, ), ) }.flowOn(Dispatchers.Default) @@ -82,8 +82,8 @@ class TorRelayState( torType = torSettingsFlow.torType.value, onionRelaysViaTor = torSettingsFlow.onionRelaysViaTor.value, dmRelaysViaTor = torSettingsFlow.dmRelaysViaTor.value, - trustedRelaysViaTor = torSettingsFlow.trustedRelaysViaTor.value, newRelaysViaTor = torSettingsFlow.newRelaysViaTor.value, + trustedRelaysViaTor = torSettingsFlow.trustedRelaysViaTor.value, ), ) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/DualHttpClientManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/DualHttpClientManager.kt index ebbdb2a30..c87575f49 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/DualHttpClientManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/DualHttpClientManager.kt @@ -43,25 +43,25 @@ class DualHttpClientManager( keyCache: EncryptionKeyCache, scope: CoroutineScope, ) : IHttpClientManager { - val factory = OkHttpClientFactory(keyCache) + val factory = OkHttpClientFactory(keyCache, userAgent) val defaultHttpClient: StateFlow = combine(proxyPortProvider, isMobileDataProvider) { proxy, mobile -> - factory.buildHttpClient(proxy, mobile, userAgent) + factory.buildHttpClient(proxy, mobile) }.stateIn( scope, SharingStarted.WhileSubscribed(1000), - factory.buildHttpClient(proxyPortProvider.value, isMobileDataProvider.value, userAgent), + factory.buildHttpClient(proxyPortProvider.value, isMobileDataProvider.value), ) val defaultHttpClientWithoutProxy: StateFlow = isMobileDataProvider .map { mobile -> - factory.buildHttpClient(mobile, userAgent) + factory.buildHttpClient(mobile) }.stateIn( scope, SharingStarted.WhileSubscribed(1000), - factory.buildHttpClient(isMobileDataProvider.value, userAgent), + factory.buildHttpClient(isMobileDataProvider.value), ) fun getCurrentProxy(): Proxy? = defaultHttpClient.value.proxy diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpClientFactory.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpClientFactory.kt index 43c70ef1b..5158852f2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpClientFactory.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpClientFactory.kt @@ -30,6 +30,7 @@ import java.time.Duration class OkHttpClientFactory( keyCache: EncryptionKeyCache, + val userAgent: String, ) { companion object { // by picking a random proxy port, the connection will fail as it should. @@ -74,12 +75,14 @@ class OkHttpClientFactory( .dispatcher(myDispatcher) .followRedirects(true) .followSslRedirects(true) + .addInterceptor(DefaultContentTypeInterceptor(userAgent)) + .addNetworkInterceptor(logging) + .addNetworkInterceptor(keyDecryptor) .build() fun buildHttpClient( proxy: Proxy?, timeoutSeconds: Int, - userAgent: String, ): OkHttpClient { val seconds = if (proxy != null) timeoutSeconds * 3 else timeoutSeconds return rootClient @@ -88,31 +91,22 @@ class OkHttpClientFactory( .connectTimeout(Duration.ofSeconds(seconds.toLong())) .readTimeout(Duration.ofSeconds(seconds.toLong() * 3)) .writeTimeout(Duration.ofSeconds(seconds.toLong() * 3)) - .addInterceptor(DefaultContentTypeInterceptor(userAgent)) - .addNetworkInterceptor(logging) - .addNetworkInterceptor(keyDecryptor) .build() } fun buildHttpClient( localSocksProxyPort: Int?, isMobile: Boolean?, - userAgent: String, ): OkHttpClient = buildHttpClient( buildLocalSocksProxy(localSocksProxyPort), buildTimeout(isMobile ?: DEFAULT_IS_MOBILE), - userAgent, ) - fun buildHttpClient( - isMobile: Boolean?, - userAgent: String, - ): OkHttpClient = + fun buildHttpClient(isMobile: Boolean?): OkHttpClient = buildHttpClient( null, buildTimeout(isMobile ?: DEFAULT_IS_MOBILE), - userAgent, ) fun buildTimeout(isMobile: Boolean): Int = diff --git a/amethyst/src/main/res/values-cs-rCZ/strings.xml b/amethyst/src/main/res/values-cs-rCZ/strings.xml index 4468199f9..a8c63c16b 100644 --- a/amethyst/src/main/res/values-cs-rCZ/strings.xml +++ b/amethyst/src/main/res/values-cs-rCZ/strings.xml @@ -112,6 +112,7 @@ Příspěvek Uložit Vytvořit + Přejmenovat Zrušit Selhalo nahrávání obrázku Adresa relé @@ -443,6 +444,31 @@ Kolem mě Globální Seznam ztlumení + Sady sledování + Označené záložky + Obecné záložky + Veřejné + Soukromé + Smíšené + Zdá se, že zatím nemáte žádné sady sledování.\nKlepněte níže pro obnovení nebo použijte tlačítko přidat k vytvoření nové. + Přidat autora do sady sledování + Přidat nebo odebrat uživatele ze seznamů, nebo vytvořit nový seznam s tímto uživatelem. + Ikona pro seznam %1$s + "%1$s je v tomto seznamu" + "%1$s není v tomto seznamu" + Vaše sady sledování + Nebyly nalezeny žádné sady sledování, nebo žádné nemáte. Klepněte níže pro obnovení nebo použijte menu pro vytvoření nové. + Došlo k problému při načítání: %1$s + Vytvořit nový seznam + Vytvořit nový seznam %1$s s uživatelem + Vytvoří %1$s sadu sledování a přidá do ní %2$s. + Nový seznam %1$s + Název sady + Popis sady (volitelné) + Vytvořit sadu + Přejmenovat sadu + Přejmenováváte z + na.. Výchozí port je 9050 ## Připojte se přes Tor s Orbotem \n\n1. Nainstalujte [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android) @@ -830,6 +856,8 @@ Střední Vysoká Bez komprese + Použít kodek H.265/HEVC + Lepší kvalita při menší velikosti souboru, ale ne všechna zařízení podporují přehrávání H.265. Upravit koncept Přihlášení pomocí QR kódu Trasa @@ -1012,6 +1040,8 @@ Stáhnout Nepodařilo se otevřít soubor Pro otevření a stažení souboru nejsou nainstalovány žádné torrent aplikace. + Událost nemá dostatek informací pro vytvoření magnet odkazu + Moje seznamy/sady Vyberte seznam pro filtrování kanálu Odhlásit se na zámek zařízení Soukromá zpráva @@ -1033,35 +1063,5 @@ Chcete poslat poslední záznam o pádu do Amethystu v soukromé zprávě? Žádné osobní údaje nebudou sdíleny Odeslat Tato zpráva zmizí za %1$d dní - Sady sledování - Označené záložky - Obecné záložky - Veřejné - Soukromé - Smíšené - Zdá se, že zatím nemáte žádné sady sledování.\nKlepněte níže pro obnovení nebo použijte tlačítko přidat k vytvoření nové. - Přidat autora do sady sledování - Přidat nebo odebrat uživatele ze seznamů, nebo vytvořit nový seznam s tímto uživatelem. - Ikona pro seznam %1$s - %1$s je v tomto seznamu - %1$s není v tomto seznamu - Vaše sady sledování - Nebyly nalezeny žádné sady sledování, nebo žádné nemáte. Klepněte níže pro obnovení nebo použijte menu pro vytvoření nové. - Došlo k problému při načítání: %1$s - Vytvořit nový seznam - Vytvořit nový seznam %1$s s uživatelem - Vytvoří %1$s sadu sledování a přidá do ní %2$s. - Nový seznam %1$s - Název sady - Popis sady (volitelné) - Vytvořit sadu - Přejmenovat sadu - Přejmenováváte z - na.. - Přejmenovat - Událost nemá dostatek informací pro vytvoření magnet odkazu - Moje seznamy/sady Vybrat podepisovatele - Použít kodek H.265/HEVC - Lepší kvalita při menší velikosti souboru, ale ne všechna zařízení podporují přehrávání H.265. diff --git a/amethyst/src/main/res/values-de-rDE/strings.xml b/amethyst/src/main/res/values-de-rDE/strings.xml index b63eb531a..3aee42a42 100644 --- a/amethyst/src/main/res/values-de-rDE/strings.xml +++ b/amethyst/src/main/res/values-de-rDE/strings.xml @@ -112,6 +112,7 @@ Beitrag Speichern Erstellen + Umbenennen Abbrechen Fehler beim Hochladen des Bildes Relay-Adresse @@ -449,6 +450,31 @@ anz der Bedingungen ist erforderlich In der Nähe Weltweit Stummliste + Folge-Sets + Markierte Lesezeichen + Allgemeine Lesezeichen + Öffentlich + Privat + Gemischt + Es scheint, dass du noch keine Folge-Sets hast.\nTippe unten zum Aktualisieren oder verwende die Plus-Taste, um ein neues zu erstellen. + Autor zum Folge-Set hinzufügen + Benutzer zu Listen hinzufügen oder entfernen, oder eine neue Liste mit diesem Benutzer erstellen. + Symbol für %1$s-Liste + "%1$s ist in dieser Liste" + "%1$s ist nicht in dieser Liste" + Deine Folge-Sets + Keine Folge-Sets gefunden oder du hast keine. Tippe unten zum Aktualisieren oder verwende das Menü, um eines zu erstellen. + Beim Abrufen ist ein Problem aufgetreten: %1$s + Neue Liste erstellen + Neue %1$s-Liste mit Benutzer erstellen + Erstellt ein %1$s-Folge-Set und fügt %2$s hinzu. + Neue %1$s-Liste + Set-Name + Set-Beschreibung (optional) + Set erstellen + Set umbenennen + Du benennst um von + zu.. Standard-Port ist 9050 ## Über Tor mit Orbot verbinden \n\n1. Installiere [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android) @@ -835,6 +861,8 @@ anz der Bedingungen ist erforderlich Mittel Hoch Ohne Kompression + H.265/HEVC-Codec verwenden + Bessere Qualität bei kleinerer Dateigröße, aber nicht alle Geräte unterstützen die H.265-Wiedergabe. Entwurf bearbeiten Einloggen mit QR-Code Route @@ -1017,6 +1045,8 @@ anz der Bedingungen ist erforderlich Herunterladen Fehler beim Öffnen der Datei Keine Torrent-Apps installiert, um die Datei zu öffnen und herunterzuladen. + Das Ereignis enthält nicht genügend Informationen, um einen Magnetlink zu erstellen + Meine Listen/Sets Liste zum Filtern des Feeds auswählen Beim Sperren des Geräts abmelden Private Nachricht @@ -1038,35 +1068,5 @@ anz der Bedingungen ist erforderlich Möchten Sie den letzten Absturzbericht per Direktnachricht an Amethyst senden? Es werden keine persönlichen Daten weitergegeben Senden Diese Nachricht verschwindet in %1$d Tagen - Folge-Sets - Markierte Lesezeichen - Allgemeine Lesezeichen - Öffentlich - Privat - Gemischt - Es scheint, dass du noch keine Folge-Sets hast.\nTippe unten zum Aktualisieren oder verwende die Plus-Taste, um ein neues zu erstellen. - Autor zum Folge-Set hinzufügen - Benutzer zu Listen hinzufügen oder entfernen, oder eine neue Liste mit diesem Benutzer erstellen. - Symbol für %1$s-Liste - %1$s ist in dieser Liste - %1$s ist nicht in dieser Liste - Deine Folge-Sets - Keine Folge-Sets gefunden oder du hast keine. Tippe unten zum Aktualisieren oder verwende das Menü, um eines zu erstellen. - Beim Abrufen ist ein Problem aufgetreten: %1$s - Neue Liste erstellen - Neue %1$s-Liste mit Benutzer erstellen - Erstellt ein %1$s-Folge-Set und fügt %2$s hinzu. - Neue %1$s-Liste - Set-Name - Set-Beschreibung (optional) - Set erstellen - Set umbenennen - Du benennst um von - zu.. - Umbenennen - Das Ereignis enthält nicht genügend Informationen, um einen Magnetlink zu erstellen - Meine Listen/Sets Signierer auswählen - H.265/HEVC-Codec verwenden - Bessere Qualität bei kleinerer Dateigröße, aber nicht alle Geräte unterstützen die H.265-Wiedergabe. diff --git a/amethyst/src/main/res/values-hu-rHU/strings.xml b/amethyst/src/main/res/values-hu-rHU/strings.xml index 836aa6bba..790806e5d 100644 --- a/amethyst/src/main/res/values-hu-rHU/strings.xml +++ b/amethyst/src/main/res/values-hu-rHU/strings.xml @@ -860,6 +860,8 @@ Közepes Magas Tömörítetlen + H.265/HEVC-kodek használata + Jobb minőség kisebb fájlméret mellett, de nem minden eszköz támogatja a H.265 lejátszást. Piszkozat szerkesztése Bejelentkezés QR-kóddal Útvonal diff --git a/amethyst/src/main/res/values-lv-rLV/strings.xml b/amethyst/src/main/res/values-lv-rLV/strings.xml index 107dafa9f..9ecf8d4b7 100644 --- a/amethyst/src/main/res/values-lv-rLV/strings.xml +++ b/amethyst/src/main/res/values-lv-rLV/strings.xml @@ -6,9 +6,14 @@ Kanāla attēls Grupas attēls Nezināms + Nezināms autors Kopēt tekstu + Kopēt autora ID Bloķēt / Sūdzēties + Sūdzēties par uzdošanos kā cita persona + Sūdzēties par ļaunprogrammatūru + Ļaunprogrammatūra Skatījumi rediģēts Pievienot @@ -20,15 +25,22 @@ Profils Maksāt 😎 + Pievienot ierakstam Jauns kanāls Kanāla nosaukums Attēla URL Apraksts + "Par mums.. " + Ieraksts Saglabāt Izveidot Atcelt + Neizdevās augšupielādēt attēlu + Ieraksti Baiti Kļūdas + Lietotājvārds + Mans lietotājvārds Par mani LN adrese Augšupielādēt attēlu @@ -37,19 +49,25 @@ Piezīmes Atbildes Galerija + "Seko" Sekot Atbloķēt Atbloķēt lietotāju + "npub, lietotājvārds, teksts" Lietotnes logo + parole, lai atvērtu atslēgu Rādīt paroli Slēpt paroli + Ir nepieciešama parole Izveidot kontu Izveidot jaunu kontu Ģenerēt jaunu atslēgu + Ielādē kontu Atsvaidzināt aprakstu uz un attēlu uz Kanāls izveidots + saņemtie ieraksti Noņemt Automātiski uz @@ -57,11 +75,19 @@ Nostr adrese nekad tagad + Sūdzēties par kailumu / porno + Papildu drošībai variet šifrēt atslēgu ar paroli. Šī atslēga sāksies ar **ncryptsec1** virkni un to nevarēs izmantot bez šīs paroles. + \n\nJa jūs aizmirsīsiet paroli, vairs nevarēsiet atgūt savu atslēgu. + Kļūda Pievienot jaunu kontu Konti Atlasīt kontu Pievienot jaunu kontu + Pašreizējais konts + Ar privāto atslēgu + Tikai lasīšana, bez privātās atslēgas + Autora ID Kopēt tekstu Dzēst Sekot @@ -69,6 +95,7 @@ Dzēst @string/block_only Dzēst + @string/malware Iemesls Bloķēt un sūdzēties @@ -79,25 +106,46 @@ Pievienot attēlu Pievienot video Pievienot dokumentu + Iestatiet vēlamos multivides augšupielādes serverus. Augšupielādē Lejupielādē Kļūda Tor iestatījumi + Sekot saraksts + Ikona %1$s sarakstam + Izveidot jaunu sarakstu + Jaunais %1$s saraksts + Kolekcijas nosaukums + Kolekcijas apraksts (neobligāti, pēc izvēles) + Izveidot kolekciju + Pārsaukt kolekciju + Jūs taisāties pārsaukt no + uz.. Noklusējuma ports ir 9050 Nederīgs porta numurs + Parāda brīdinājuma ziņojumu, ja autors atzīmējis ierakstu kā jutīgu Versija Valstis Valodas Birkas + Autorizācija + Birkas, kurām sekoju + Apstiprinātie ieraksti + Lietotnes iestatījumi + Lietotāja iestatījumi + @string/preferences Valoda Motīvs Nevar augšupielādēt Noteikumi + Par mums Labi Meklēt + Lietotājvārds vai parādāmais vārds Profila attēls + Nevarēja samaksāt rēķinu Kategorija Apģērbs Elektronika @@ -106,12 +154,19 @@ Sports Māksla Ēdiens + Neizdevās augšupielādēt multivides datni Augšupielādes kļūda: %1$s + Nevarēja lejupielādēt augšupielādēto multivides datni no servera + Neizdevās augšupielādēt %1$s: %2$s Neizdevās augšupielādēt: %1$s Meklēt Paziņojumi + Jauns ieraksts Paldies! + Rediģēt ierakstu + Izmaiņu kopsavilkums @string/torrent_download + Atskaņot lietotājvārdu ar skaņu Torrenta datne Lejupielādēt Nav uzstādītas torrent lietotnes, kas atvērtu un lejupielādētu datni. diff --git a/amethyst/src/main/res/values-zh-rCN/strings.xml b/amethyst/src/main/res/values-zh-rCN/strings.xml index f0944f92e..c08294305 100644 --- a/amethyst/src/main/res/values-zh-rCN/strings.xml +++ b/amethyst/src/main/res/values-zh-rCN/strings.xml @@ -860,6 +860,8 @@ 中等质量 高质量 未压缩 + 使用 H.265/HEVC 编解码器 + 文件较小而质量更佳,但不是所有设备都支持 H.265 播放。 编辑草稿 使用二维码登录 路径