mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 10:29:58 +02:00
feat(network): add relay connection policies
This commit is contained in:
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">Beim Anwenden wird die Netzwerkverbindung von VniDrop neu gestartet. Beenden Sie zuerst aktive Übertragungen und Freigaben. Vorhandene Einladungen müssen eventuell erneut geteilt werden.</string>
|
||||
<string name="relay_custom_urls_help">Geben Sie pro Zeile eine HTTPS-Relay-URL ein. Anmeldedaten in URLs werden nicht unterstützt. Das TLS-Zertifikat muss von einer öffentlich vertrauenswürdigen Zertifizierungsstelle ausgestellt sein.</string>
|
||||
<string name="relay_custom_urls_label">Relay-URLs</string>
|
||||
<string name="relay_mode_automatic">Automatisch</string>
|
||||
<string name="relay_mode_automatic">Automatisch (empfohlen)</string>
|
||||
<string name="relay_mode_automatic_description">Verwendet die öffentliche Standard-Relay-Infrastruktur von VniDrop, wenn keine direkte Verbindung möglich ist.</string>
|
||||
<string name="relay_mode_custom">Benutzerdefiniert</string>
|
||||
<string name="relay_mode_custom_description">Verwendet ausschließlich die unten aufgeführten Relay-Server.</string>
|
||||
<string name="relay_mode_custom">Strikt benutzerdefiniert</string>
|
||||
<string name="relay_mode_custom_description">Verwendet nur die konfigurierten eigenen Relays oder Direktverbindungen. Meldet einen Fehler, wenn kein eigenes Relay erreichbar ist.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Benutzerdefiniert mit direktem Rückfall</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Bevorzugt die konfigurierten eigenen Relays. Sind sie nicht verfügbar, werden nur Direktverbindungen verwendet. Öffentliche Relays werden nie genutzt.</string>
|
||||
<string name="relay_mode_local_only">Nur lokales Netzwerk</string>
|
||||
<string name="relay_mode_local_only_description">Deaktiviert alle Relays und erlaubt nur Direktverbindungen, hauptsächlich für Geräte im selben Netzwerk.</string>
|
||||
<string name="relay_privacy_description">Relays leiten verschlüsselten Datenverkehr weiter und können Ihre Dateien nicht lesen, ihr Betreiber kann jedoch Verbindungsmetadaten sehen.</string>
|
||||
<string name="relay_remove_url">Relay-Server entfernen</string>
|
||||
<string name="relay_restore_failed">Die vorherigen Netzwerkeinstellungen konnten nicht wiederhergestellt werden. Starten Sie VniDrop neu und prüfen Sie Ihre Relay-Konfiguration.</string>
|
||||
<string name="relay_settings_applied">Netzwerkeinstellungen angewendet.</string>
|
||||
<string name="relay_strict_warning">Der benutzerdefinierte Modus ist strikt: VniDrop greift weder auf öffentliche Relays noch auf öffentliche Erkennung zurück. Andere Geräte müssen Ihre konfigurierten Relays erreichen können.</string>
|
||||
<string name="relay_strict_warning">Der strikt benutzerdefinierte Modus startet nur, wenn mindestens ein konfiguriertes Relay erreichbar ist. VniDrop verwendet in diesem Modus nie öffentliche Relays oder öffentliche Erkennung.</string>
|
||||
<string name="relay_validation_duplicate_url">Die Relay-URL in Zeile %1$d ist bereits zuvor eingetragen.</string>
|
||||
<string name="relay_validation_https_required">Die Relay-URL in Zeile %1$d muss mit https:// beginnen.</string>
|
||||
<string name="relay_validation_invalid_url">Die Relay-URL in Zeile %1$d ist ungültig.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">Al aplicar los ajustes, se reinicia la conexión de red de VniDrop. Detenga primero las transferencias y los elementos compartidos activos. Es posible que tenga que volver a compartir las invitaciones existentes.</string>
|
||||
<string name="relay_custom_urls_help">Introduzca una URL HTTPS de relé por línea. No se admiten credenciales en las URL. El certificado TLS debe ser emitido por una autoridad de certificación de confianza pública.</string>
|
||||
<string name="relay_custom_urls_label">URL de relés</string>
|
||||
<string name="relay_mode_automatic">Automático</string>
|
||||
<string name="relay_mode_automatic">Automático (recomendado)</string>
|
||||
<string name="relay_mode_automatic_description">Usa la infraestructura pública de relés predeterminada de VniDrop cuando no haya una conexión directa disponible.</string>
|
||||
<string name="relay_mode_custom">Personalizado</string>
|
||||
<string name="relay_mode_custom_description">Usa únicamente los servidores de retransmisión indicados a continuación.</string>
|
||||
<string name="relay_mode_custom">Personalizado estricto</string>
|
||||
<string name="relay_mode_custom_description">Usa solo los relés personalizados configurados o conexiones directas. Informa de un error si no se puede establecer ningún relé personalizado.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Personalizado con conexión directa de reserva</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Prefiere los relés personalizados configurados. Si no están disponibles, continúa solo con conexiones directas. Nunca usa relés públicos.</string>
|
||||
<string name="relay_mode_local_only">Solo red local</string>
|
||||
<string name="relay_mode_local_only_description">Desactiva todos los relés y permite solo conexiones directas, principalmente para dispositivos de la misma red.</string>
|
||||
<string name="relay_privacy_description">Los relés reenvían tráfico cifrado y no pueden leer sus archivos, pero su operador puede observar los metadatos de conexión.</string>
|
||||
<string name="relay_remove_url">Eliminar servidor de retransmisión</string>
|
||||
<string name="relay_restore_failed">No se han podido restaurar los ajustes de red anteriores. Reinicie VniDrop y revise la configuración de relés.</string>
|
||||
<string name="relay_settings_applied">Ajustes de red aplicados.</string>
|
||||
<string name="relay_strict_warning">El modo personalizado es estricto: VniDrop no recurrirá a relés públicos ni al descubrimiento público. Los demás dispositivos deben poder acceder a los relés configurados.</string>
|
||||
<string name="relay_strict_warning">El modo personalizado estricto no se inicia a menos que se pueda acceder al menos a un relé configurado. VniDrop nunca usa relés ni descubrimiento públicos en este modo.</string>
|
||||
<string name="relay_validation_duplicate_url">La URL de relé de la línea %1$d duplica una entrada anterior.</string>
|
||||
<string name="relay_validation_https_required">La URL de relé de la línea %1$d debe empezar por https://.</string>
|
||||
<string name="relay_validation_invalid_url">La URL de relé de la línea %1$d no es válida.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">L’application de ces réglages redémarre la connexion réseau de VniDrop. Arrêtez d’abord les transferts et partages actifs. Il peut être nécessaire de partager à nouveau les invitations existantes.</string>
|
||||
<string name="relay_custom_urls_help">Saisissez une URL de relais HTTPS par ligne. Les identifiants dans les URL ne sont pas pris en charge. Le certificat TLS doit être émis par une autorité de certification reconnue publiquement.</string>
|
||||
<string name="relay_custom_urls_label">URL des relais</string>
|
||||
<string name="relay_mode_automatic">Automatique</string>
|
||||
<string name="relay_mode_automatic">Automatique (recommandé)</string>
|
||||
<string name="relay_mode_automatic_description">Utiliser l’infrastructure de relais publique par défaut de VniDrop lorsqu’une connexion directe est indisponible.</string>
|
||||
<string name="relay_mode_custom">Personnalisé</string>
|
||||
<string name="relay_mode_custom_description">Utiliser uniquement les serveurs relais ci-dessous.</string>
|
||||
<string name="relay_mode_custom">Personnalisé strict</string>
|
||||
<string name="relay_mode_custom_description">Utilise uniquement les relais personnalisés configurés ou les connexions directes. Signale une erreur si aucun relais personnalisé ne peut être établi.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Personnalisé avec repli direct</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Préfère les relais personnalisés configurés. S’ils sont indisponibles, continue uniquement avec des connexions directes. N’utilise jamais les relais publics.</string>
|
||||
<string name="relay_mode_local_only">Réseau local uniquement</string>
|
||||
<string name="relay_mode_local_only_description">Désactive tous les relais et autorise uniquement les connexions directes, principalement pour les appareils sur le même réseau.</string>
|
||||
<string name="relay_privacy_description">Les relais transmettent du trafic chiffré et ne peuvent pas lire vos fichiers, mais leur opérateur peut observer les métadonnées de connexion.</string>
|
||||
<string name="relay_remove_url">Supprimer le serveur relais</string>
|
||||
<string name="relay_restore_failed">Impossible de restaurer les réglages réseau précédents. Redémarrez VniDrop et vérifiez votre configuration de relais.</string>
|
||||
<string name="relay_settings_applied">Réglages réseau appliqués.</string>
|
||||
<string name="relay_strict_warning">Le mode personnalisé est strict : VniDrop n’utilisera ni les relais publics ni la découverte publique comme solution de repli. Les autres appareils doivent pouvoir accéder aux relais configurés.</string>
|
||||
<string name="relay_strict_warning">Le mode personnalisé strict ne démarre que si au moins un relais configuré est accessible. VniDrop n’utilise jamais de relais ni de découverte publics dans ce mode.</string>
|
||||
<string name="relay_validation_duplicate_url">L’URL de relais à la ligne %1$d est identique à une entrée précédente.</string>
|
||||
<string name="relay_validation_https_required">L’URL de relais à la ligne %1$d doit commencer par https://.</string>
|
||||
<string name="relay_validation_invalid_url">L’URL de relais à la ligne %1$d n’est pas valide.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">L’applicazione riavvia la connessione di rete di VniDrop. Interrompa prima i trasferimenti e le condivisioni attivi. Potrebbe essere necessario condividere di nuovo gli inviti esistenti.</string>
|
||||
<string name="relay_custom_urls_help">Inserisca un URL relay HTTPS per riga. Le credenziali negli URL non sono supportate. Il certificato TLS deve essere emesso da un’autorità di certificazione pubblicamente attendibile.</string>
|
||||
<string name="relay_custom_urls_label">URL relay</string>
|
||||
<string name="relay_mode_automatic">Automatica</string>
|
||||
<string name="relay_mode_automatic">Automatica (consigliata)</string>
|
||||
<string name="relay_mode_automatic_description">Usa l’infrastruttura relay pubblica predefinita di VniDrop quando non è disponibile una connessione diretta.</string>
|
||||
<string name="relay_mode_custom">Personalizzata</string>
|
||||
<string name="relay_mode_custom_description">Usa solo i server relay indicati di seguito.</string>
|
||||
<string name="relay_mode_custom">Personalizzata rigorosa</string>
|
||||
<string name="relay_mode_custom_description">Usa solo i relay personalizzati configurati o connessioni dirette. Segnala un errore se non è possibile stabilire alcun relay personalizzato.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Personalizzata con ripiego diretto</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Preferisce i relay personalizzati configurati. Se non sono disponibili, continua solo con connessioni dirette. Non usa mai relay pubblici.</string>
|
||||
<string name="relay_mode_local_only">Solo rete locale</string>
|
||||
<string name="relay_mode_local_only_description">Disattiva tutti i relay e consente solo connessioni dirette, soprattutto per dispositivi sulla stessa rete.</string>
|
||||
<string name="relay_privacy_description">I relay inoltrano traffico cifrato e non possono leggere i suoi file, ma il loro operatore può osservare i metadati di connessione.</string>
|
||||
<string name="relay_remove_url">Rimuovi server relay</string>
|
||||
<string name="relay_restore_failed">Impossibile ripristinare le impostazioni di rete precedenti. Riavvii VniDrop e verifichi la configurazione dei relay.</string>
|
||||
<string name="relay_settings_applied">Impostazioni di rete applicate.</string>
|
||||
<string name="relay_strict_warning">La modalità personalizzata è rigorosa: VniDrop non userà relay pubblici o il rilevamento pubblico come ripiego. Gli altri dispositivi devono poter raggiungere i relay configurati.</string>
|
||||
<string name="relay_strict_warning">La modalità personalizzata rigorosa si avvia solo se almeno un relay configurato è raggiungibile. In questa modalità VniDrop non usa mai relay o rilevamento pubblici.</string>
|
||||
<string name="relay_validation_duplicate_url">L’URL relay alla riga %1$d duplica una voce precedente.</string>
|
||||
<string name="relay_validation_https_required">L’URL relay alla riga %1$d deve iniziare con https://.</string>
|
||||
<string name="relay_validation_invalid_url">L’URL relay alla riga %1$d non è valido.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">Bij het toepassen wordt de netwerkverbinding van VniDrop opnieuw gestart. Stop eerst actieve overdrachten en gedeelde items. Bestaande uitnodigingen moeten mogelijk opnieuw worden gedeeld.</string>
|
||||
<string name="relay_custom_urls_help">Voer per regel één HTTPS-relay-URL in. Aanmeldgegevens in URL\'s worden niet ondersteund. Het TLS-certificaat moet zijn uitgegeven door een openbaar vertrouwde certificeringsinstantie.</string>
|
||||
<string name="relay_custom_urls_label">Relay-URL\'s</string>
|
||||
<string name="relay_mode_automatic">Automatisch</string>
|
||||
<string name="relay_mode_automatic">Automatisch (aanbevolen)</string>
|
||||
<string name="relay_mode_automatic_description">Gebruikt de standaard openbare relay-infrastructuur van VniDrop wanneer geen directe verbinding beschikbaar is.</string>
|
||||
<string name="relay_mode_custom">Aangepast</string>
|
||||
<string name="relay_mode_custom_description">Gebruikt alleen de onderstaande relayservers.</string>
|
||||
<string name="relay_mode_custom">Strikt aangepast</string>
|
||||
<string name="relay_mode_custom_description">Gebruikt alleen de ingestelde aangepaste relays of rechtstreekse verbindingen. Meldt een fout als geen aangepaste relay bereikbaar is.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Aangepast met directe terugval</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Geeft de voorkeur aan de ingestelde aangepaste relays. Als die niet beschikbaar zijn, worden alleen rechtstreekse verbindingen gebruikt. Openbare relays worden nooit gebruikt.</string>
|
||||
<string name="relay_mode_local_only">Alleen lokaal netwerk</string>
|
||||
<string name="relay_mode_local_only_description">Schakelt alle relays uit en staat alleen rechtstreekse verbindingen toe, vooral voor apparaten in hetzelfde netwerk.</string>
|
||||
<string name="relay_privacy_description">Relays sturen versleuteld verkeer door en kunnen uw bestanden niet lezen, maar de beheerder kan verbindingsmetadata bekijken.</string>
|
||||
<string name="relay_remove_url">Relayserver verwijderen</string>
|
||||
<string name="relay_restore_failed">De vorige netwerkinstellingen konden niet worden hersteld. Start VniDrop opnieuw en controleer uw relayconfiguratie.</string>
|
||||
<string name="relay_settings_applied">Netwerkinstellingen toegepast.</string>
|
||||
<string name="relay_strict_warning">De aangepaste modus is strikt: VniDrop valt niet terug op openbare relays of openbare detectie. Andere apparaten moeten uw ingestelde relays kunnen bereiken.</string>
|
||||
<string name="relay_strict_warning">De strikt aangepaste modus start alleen als minstens één ingestelde relay bereikbaar is. VniDrop gebruikt in deze modus nooit openbare relays of openbare detectie.</string>
|
||||
<string name="relay_validation_duplicate_url">De relay-URL op regel %1$d is gelijk aan een eerdere invoer.</string>
|
||||
<string name="relay_validation_https_required">De relay-URL op regel %1$d moet beginnen met https://.</string>
|
||||
<string name="relay_validation_invalid_url">De relay-URL op regel %1$d is ongeldig.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">Zastosowanie ustawień ponownie uruchamia połączenie sieciowe VniDrop. Najpierw zatrzymaj aktywne transfery i udostępnienia. Istniejące zaproszenia mogą wymagać ponownego udostępnienia.</string>
|
||||
<string name="relay_custom_urls_help">Wprowadź po jednym adresie URL HTTPS przekaźnika w każdym wierszu. Dane logowania w adresach URL nie są obsługiwane. Certyfikat TLS musi być wystawiony przez publicznie zaufany urząd certyfikacji.</string>
|
||||
<string name="relay_custom_urls_label">Adresy URL przekaźników</string>
|
||||
<string name="relay_mode_automatic">Automatyczny</string>
|
||||
<string name="relay_mode_automatic">Automatyczny (zalecany)</string>
|
||||
<string name="relay_mode_automatic_description">Używa domyślnej publicznej infrastruktury przekaźników VniDrop, gdy połączenie bezpośrednie jest niedostępne.</string>
|
||||
<string name="relay_mode_custom">Niestandardowy</string>
|
||||
<string name="relay_mode_custom_description">Używa wyłącznie poniższych serwerów przekaźnikowych.</string>
|
||||
<string name="relay_mode_custom">Ścisły niestandardowy</string>
|
||||
<string name="relay_mode_custom_description">Używa tylko skonfigurowanych własnych przekaźników lub połączeń bezpośrednich. Zgłasza błąd, jeśli nie można połączyć się z żadnym własnym przekaźnikiem.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Niestandardowy z trybem bezpośrednim</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Preferuje skonfigurowane własne przekaźniki. Jeśli są niedostępne, kontynuuje tylko przez połączenia bezpośrednie. Nigdy nie używa publicznych przekaźników.</string>
|
||||
<string name="relay_mode_local_only">Tylko sieć lokalna</string>
|
||||
<string name="relay_mode_local_only_description">Wyłącza wszystkie przekaźniki i zezwala tylko na połączenia bezpośrednie, głównie dla urządzeń w tej samej sieci.</string>
|
||||
<string name="relay_privacy_description">Przekaźniki przesyłają zaszyfrowany ruch i nie mogą odczytać plików, ale ich operator może obserwować metadane połączenia.</string>
|
||||
<string name="relay_remove_url">Usuń serwer przekaźnikowy</string>
|
||||
<string name="relay_restore_failed">Nie udało się przywrócić poprzednich ustawień sieci. Uruchom ponownie VniDrop i sprawdź konfigurację przekaźników.</string>
|
||||
<string name="relay_settings_applied">Zastosowano ustawienia sieci.</string>
|
||||
<string name="relay_strict_warning">Tryb niestandardowy jest rygorystyczny: VniDrop nie użyje awaryjnie publicznych przekaźników ani publicznego wykrywania. Inne urządzenia muszą mieć dostęp do skonfigurowanych przekaźników.</string>
|
||||
<string name="relay_strict_warning">Ścisły tryb niestandardowy uruchamia się tylko wtedy, gdy co najmniej jeden skonfigurowany przekaźnik jest dostępny. VniDrop nigdy nie używa w tym trybie publicznych przekaźników ani publicznego wykrywania.</string>
|
||||
<string name="relay_validation_duplicate_url">Adres URL przekaźnika w wierszu %1$d powtarza wcześniejszy wpis.</string>
|
||||
<string name="relay_validation_https_required">Adres URL przekaźnika w wierszu %1$d musi zaczynać się od https://.</string>
|
||||
<string name="relay_validation_invalid_url">Adres URL przekaźnika w wierszu %1$d jest nieprawidłowy.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">A aplicação reinicia a ligação de rede do VniDrop. Pare primeiro as transferências e partilhas ativas. Poderá ser necessário voltar a partilhar os convites existentes.</string>
|
||||
<string name="relay_custom_urls_help">Introduza um URL HTTPS de retransmissor por linha. Não são suportadas credenciais nos URLs. O certificado TLS tem de ser emitido por uma autoridade de certificação publicamente reconhecida.</string>
|
||||
<string name="relay_custom_urls_label">URLs dos retransmissores</string>
|
||||
<string name="relay_mode_automatic">Automático</string>
|
||||
<string name="relay_mode_automatic">Automático (recomendado)</string>
|
||||
<string name="relay_mode_automatic_description">Utiliza a infraestrutura pública de retransmissores predefinida do VniDrop quando não está disponível uma ligação direta.</string>
|
||||
<string name="relay_mode_custom">Personalizado</string>
|
||||
<string name="relay_mode_custom_description">Utiliza apenas os servidores de retransmissão abaixo.</string>
|
||||
<string name="relay_mode_custom">Personalizado estrito</string>
|
||||
<string name="relay_mode_custom_description">Utiliza apenas os retransmissores personalizados configurados ou ligações diretas. Apresenta um erro se não for possível estabelecer nenhum retransmissor personalizado.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Personalizado com alternativa direta</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Prefere os retransmissores personalizados configurados. Se não estiverem disponíveis, continua apenas com ligações diretas. Nunca utiliza retransmissores públicos.</string>
|
||||
<string name="relay_mode_local_only">Apenas rede local</string>
|
||||
<string name="relay_mode_local_only_description">Desativa todos os retransmissores e permite apenas ligações diretas, principalmente para dispositivos na mesma rede.</string>
|
||||
<string name="relay_privacy_description">Os retransmissores encaminham tráfego cifrado e não conseguem ler os seus ficheiros, mas o operador pode observar metadados da ligação.</string>
|
||||
<string name="relay_remove_url">Remover servidor de retransmissão</string>
|
||||
<string name="relay_restore_failed">Não foi possível restaurar as definições de rede anteriores. Reinicie o VniDrop e reveja a configuração dos retransmissores.</string>
|
||||
<string name="relay_settings_applied">Definições de rede aplicadas.</string>
|
||||
<string name="relay_strict_warning">O modo personalizado é estrito: o VniDrop não recorrerá a retransmissores públicos nem à descoberta pública. Os outros dispositivos têm de conseguir aceder aos retransmissores configurados.</string>
|
||||
<string name="relay_strict_warning">O modo personalizado estrito só inicia se pelo menos um retransmissor configurado estiver acessível. Neste modo, o VniDrop nunca utiliza retransmissores nem descoberta públicos.</string>
|
||||
<string name="relay_validation_duplicate_url">O URL do retransmissor na linha %1$d duplica uma entrada anterior.</string>
|
||||
<string name="relay_validation_https_required">O URL do retransmissor na linha %1$d tem de começar por https://.</string>
|
||||
<string name="relay_validation_invalid_url">O URL do retransmissor na linha %1$d não é válido.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">При применении сетевое соединение VniDrop перезапускается. Сначала остановите активные передачи и раздачи. Возможно, существующие приглашения потребуется отправить повторно.</string>
|
||||
<string name="relay_custom_urls_help">Введите по одному HTTPS-адресу ретранслятора в строке. Учётные данные в URL-адресах не поддерживаются. Сертификат TLS должен быть выдан общедоступным доверенным центром сертификации.</string>
|
||||
<string name="relay_custom_urls_label">URL-адреса ретрансляторов</string>
|
||||
<string name="relay_mode_automatic">Автоматически</string>
|
||||
<string name="relay_mode_automatic">Автоматически (рекомендуется)</string>
|
||||
<string name="relay_mode_automatic_description">Использовать стандартную публичную инфраструктуру ретрансляторов VniDrop, если прямое соединение недоступно.</string>
|
||||
<string name="relay_mode_custom">Пользовательский</string>
|
||||
<string name="relay_mode_custom_description">Использовать только указанные ниже серверы-ретрансляторы.</string>
|
||||
<string name="relay_mode_custom">Строго пользовательский</string>
|
||||
<string name="relay_mode_custom_description">Использует только настроенные пользовательские ретрансляторы или прямые соединения. Сообщает об ошибке, если ни один пользовательский ретранслятор недоступен.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Пользовательский с прямым резервом</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Предпочитает настроенные пользовательские ретрансляторы. Если они недоступны, продолжает работу только через прямые соединения. Публичные ретрансляторы не используются.</string>
|
||||
<string name="relay_mode_local_only">Только локальная сеть</string>
|
||||
<string name="relay_mode_local_only_description">Отключает все ретрансляторы и разрешает только прямые соединения, прежде всего для устройств в одной сети.</string>
|
||||
<string name="relay_privacy_description">Ретрансляторы передают зашифрованный трафик и не могут читать ваши файлы, но их оператор может видеть метаданные соединения.</string>
|
||||
<string name="relay_remove_url">Удалить сервер-ретранслятор</string>
|
||||
<string name="relay_restore_failed">Не удалось восстановить предыдущие настройки сети. Перезапустите VniDrop и проверьте конфигурацию ретрансляторов.</string>
|
||||
<string name="relay_settings_applied">Настройки сети применены.</string>
|
||||
<string name="relay_strict_warning">Пользовательский режим работает строго: VniDrop не будет переключаться на публичные ретрансляторы или публичное обнаружение. Другие устройства должны иметь доступ к настроенным ретрансляторам.</string>
|
||||
<string name="relay_strict_warning">Строго пользовательский режим запускается, только если доступен хотя бы один настроенный ретранслятор. В этом режиме VniDrop никогда не использует публичные ретрансляторы или публичное обнаружение.</string>
|
||||
<string name="relay_validation_duplicate_url">URL-адрес ретранслятора в строке %1$d повторяет предыдущую запись.</string>
|
||||
<string name="relay_validation_https_required">URL-адрес ретранслятора в строке %1$d должен начинаться с https://.</string>
|
||||
<string name="relay_validation_invalid_url">URL-адрес ретранслятора в строке %1$d недействителен.</string>
|
||||
|
||||
@@ -177,15 +177,19 @@
|
||||
<string name="relay_apply_restart_description">Applying restarts VniDrop’s network connection. Stop active transfers and shares first. Existing invitations may need to be shared again.</string>
|
||||
<string name="relay_custom_urls_help">Enter one HTTPS relay URL per line. URL credentials are not supported. The TLS certificate must be issued by a publicly trusted certificate authority.</string>
|
||||
<string name="relay_custom_urls_label">Relay URLs</string>
|
||||
<string name="relay_mode_automatic">Automatic</string>
|
||||
<string name="relay_mode_automatic">Automatic (recommended)</string>
|
||||
<string name="relay_mode_automatic_description">Use VniDrop’s default public relay infrastructure when a direct connection is unavailable.</string>
|
||||
<string name="relay_mode_custom">Custom</string>
|
||||
<string name="relay_mode_custom_description">Use only the relay servers below.</string>
|
||||
<string name="relay_mode_custom">Strict custom</string>
|
||||
<string name="relay_mode_custom_description">Use only the configured custom relays or direct connections. Report an error if no custom relay can be established.</string>
|
||||
<string name="relay_mode_custom_direct_fallback">Custom with direct fallback</string>
|
||||
<string name="relay_mode_custom_direct_fallback_description">Prefer the configured custom relays. If unavailable, continue with direct connections only. Never use public relays.</string>
|
||||
<string name="relay_mode_local_only">Local only</string>
|
||||
<string name="relay_mode_local_only_description">Disable all relays and allow only direct connections, primarily for devices on the same network.</string>
|
||||
<string name="relay_privacy_description">Relays forward encrypted traffic and cannot read your files, but their operator can observe connection metadata.</string>
|
||||
<string name="relay_remove_url">Remove relay server</string>
|
||||
<string name="relay_restore_failed">Could not restore the previous network settings. Restart VniDrop and review your relay configuration.</string>
|
||||
<string name="relay_settings_applied">Network settings applied.</string>
|
||||
<string name="relay_strict_warning">Custom mode is strict: VniDrop will not fall back to public relays or public discovery. Other devices must be able to reach your configured relays.</string>
|
||||
<string name="relay_strict_warning">Strict custom mode will not start unless at least one configured relay is reachable. VniDrop never uses public relays or public discovery in this mode.</string>
|
||||
<string name="relay_validation_duplicate_url">Relay URL on line %1$d duplicates an earlier entry.</string>
|
||||
<string name="relay_validation_https_required">Relay URL on line %1$d must start with https://.</string>
|
||||
<string name="relay_validation_invalid_url">Relay URL on line %1$d is not valid.</string>
|
||||
|
||||
@@ -29,7 +29,9 @@ enum class ShareAccessPolicy {
|
||||
|
||||
enum class RelayMode {
|
||||
Automatic,
|
||||
Custom,
|
||||
StrictCustom,
|
||||
CustomWithDirectFallback,
|
||||
LocalOnly,
|
||||
}
|
||||
|
||||
data class RelaySettings(
|
||||
@@ -37,6 +39,9 @@ data class RelaySettings(
|
||||
val relayUrls: List<String> = emptyList(),
|
||||
)
|
||||
|
||||
val RelayMode.usesCustomRelayUrls: Boolean
|
||||
get() = this == RelayMode.StrictCustom || this == RelayMode.CustomWithDirectFallback
|
||||
|
||||
enum class TransferDirection {
|
||||
Send,
|
||||
Receive,
|
||||
|
||||
@@ -293,10 +293,18 @@ class CoreRepository(
|
||||
|
||||
private fun RelaySettings.toNative(): CoreNetworkConfig = when (mode) {
|
||||
RelayMode.Automatic -> defaultCoreNetworkConfig()
|
||||
RelayMode.Custom -> CoreNetworkConfig(
|
||||
mode = CoreRelayMode.CUSTOM,
|
||||
RelayMode.StrictCustom -> CoreNetworkConfig(
|
||||
mode = CoreRelayMode.STRICT_CUSTOM,
|
||||
relayUrls = relayUrls,
|
||||
)
|
||||
RelayMode.CustomWithDirectFallback -> CoreNetworkConfig(
|
||||
mode = CoreRelayMode.CUSTOM_WITH_DIRECT_FALLBACK,
|
||||
relayUrls = relayUrls,
|
||||
)
|
||||
RelayMode.LocalOnly -> CoreNetworkConfig(
|
||||
mode = CoreRelayMode.LOCAL_ONLY,
|
||||
relayUrls = emptyList(),
|
||||
)
|
||||
}
|
||||
|
||||
private fun CoreEvent.toModel(): CoreEventModel = CoreEventModel(
|
||||
|
||||
@@ -12,6 +12,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vnidrop.app.core.RelayMode
|
||||
import com.vnidrop.app.core.usesCustomRelayUrls
|
||||
import com.vnidrop.app.ui.components.Field
|
||||
import com.vnidrop.app.ui.components.PrimaryButton
|
||||
import com.vnidrop.app.ui.icons.AppIcon
|
||||
@@ -30,7 +31,11 @@ import vnidrop.shared.generated.resources.relay_custom_urls_label
|
||||
import vnidrop.shared.generated.resources.relay_mode_automatic
|
||||
import vnidrop.shared.generated.resources.relay_mode_automatic_description
|
||||
import vnidrop.shared.generated.resources.relay_mode_custom
|
||||
import vnidrop.shared.generated.resources.relay_mode_custom_direct_fallback
|
||||
import vnidrop.shared.generated.resources.relay_mode_custom_direct_fallback_description
|
||||
import vnidrop.shared.generated.resources.relay_mode_custom_description
|
||||
import vnidrop.shared.generated.resources.relay_mode_local_only
|
||||
import vnidrop.shared.generated.resources.relay_mode_local_only_description
|
||||
import vnidrop.shared.generated.resources.relay_privacy_description
|
||||
import vnidrop.shared.generated.resources.relay_restore_failed
|
||||
import vnidrop.shared.generated.resources.relay_strict_warning
|
||||
@@ -73,15 +78,33 @@ internal fun NetworkSettings(
|
||||
)
|
||||
SettingsDivider()
|
||||
RelayModeRow(
|
||||
icon = AppIcon.Radio,
|
||||
icon = AppIcon.Shield,
|
||||
title = stringResource(Res.string.relay_mode_custom),
|
||||
description = stringResource(Res.string.relay_mode_custom_description),
|
||||
selected = state.relayMode == RelayMode.Custom,
|
||||
selected = state.relayMode == RelayMode.StrictCustom,
|
||||
enabled = !state.isApplyingRelaySettings,
|
||||
onClick = { onModeChanged(RelayMode.Custom) },
|
||||
onClick = { onModeChanged(RelayMode.StrictCustom) },
|
||||
)
|
||||
SettingsDivider()
|
||||
RelayModeRow(
|
||||
icon = AppIcon.Radio,
|
||||
title = stringResource(Res.string.relay_mode_custom_direct_fallback),
|
||||
description = stringResource(Res.string.relay_mode_custom_direct_fallback_description),
|
||||
selected = state.relayMode == RelayMode.CustomWithDirectFallback,
|
||||
enabled = !state.isApplyingRelaySettings,
|
||||
onClick = { onModeChanged(RelayMode.CustomWithDirectFallback) },
|
||||
)
|
||||
SettingsDivider()
|
||||
RelayModeRow(
|
||||
icon = AppIcon.CloudOff,
|
||||
title = stringResource(Res.string.relay_mode_local_only),
|
||||
description = stringResource(Res.string.relay_mode_local_only_description),
|
||||
selected = state.relayMode == RelayMode.LocalOnly,
|
||||
enabled = !state.isApplyingRelaySettings,
|
||||
onClick = { onModeChanged(RelayMode.LocalOnly) },
|
||||
)
|
||||
}
|
||||
if (state.relayMode == RelayMode.Custom) {
|
||||
if (state.relayMode.usesCustomRelayUrls) {
|
||||
Field(
|
||||
value = state.relayUrlsText,
|
||||
onValueChange = onUrlsChanged,
|
||||
@@ -94,12 +117,14 @@ internal fun NetworkSettings(
|
||||
color = colors.foregroundLighter,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
)
|
||||
Text(
|
||||
stringResource(Res.string.relay_strict_warning),
|
||||
color = colors.foregroundLight,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
fontWeight = FontWeight.Medium,
|
||||
)
|
||||
if (state.relayMode == RelayMode.StrictCustom) {
|
||||
Text(
|
||||
stringResource(Res.string.relay_strict_warning),
|
||||
color = colors.foregroundLight,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
fontWeight = FontWeight.Medium,
|
||||
)
|
||||
}
|
||||
Text(
|
||||
stringResource(Res.string.relay_privacy_description),
|
||||
color = colors.foregroundLighter,
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.vnidrop.app.feature.settings
|
||||
|
||||
import com.vnidrop.app.core.RelayMode
|
||||
import com.vnidrop.app.core.RelaySettings
|
||||
import com.vnidrop.app.core.usesCustomRelayUrls
|
||||
|
||||
sealed interface RelaySettingsInputError {
|
||||
data object MissingUrl : RelaySettingsInputError
|
||||
@@ -21,7 +22,7 @@ fun validateRelaySettings(
|
||||
urlsText: String,
|
||||
retainedUrls: List<String> = emptyList(),
|
||||
): RelaySettingsValidation {
|
||||
if (mode == RelayMode.Automatic) {
|
||||
if (!mode.usesCustomRelayUrls) {
|
||||
return RelaySettingsValidation(RelaySettings(mode, retainedUrls))
|
||||
}
|
||||
val lines = urlsText.lineSequence()
|
||||
@@ -49,7 +50,7 @@ fun validateRelaySettings(
|
||||
}
|
||||
}
|
||||
}
|
||||
return RelaySettingsValidation(RelaySettings(RelayMode.Custom, normalized))
|
||||
return RelaySettingsValidation(RelaySettings(mode, normalized))
|
||||
}
|
||||
|
||||
private sealed interface RelayUrlResult {
|
||||
|
||||
@@ -21,6 +21,8 @@ import vnidrop.shared.generated.resources.notifications_title
|
||||
import vnidrop.shared.generated.resources.preferences_title
|
||||
import vnidrop.shared.generated.resources.relay_mode_automatic
|
||||
import vnidrop.shared.generated.resources.relay_mode_custom
|
||||
import vnidrop.shared.generated.resources.relay_mode_custom_direct_fallback
|
||||
import vnidrop.shared.generated.resources.relay_mode_local_only
|
||||
import vnidrop.shared.generated.resources.settings_title
|
||||
import vnidrop.shared.generated.resources.settings_network_title
|
||||
import vnidrop.shared.generated.resources.storage_title
|
||||
@@ -91,7 +93,9 @@ internal fun SettingsOverview(
|
||||
@Composable
|
||||
private fun relayModeLabel(mode: RelayMode): String = when (mode) {
|
||||
RelayMode.Automatic -> stringResource(Res.string.relay_mode_automatic)
|
||||
RelayMode.Custom -> stringResource(Res.string.relay_mode_custom)
|
||||
RelayMode.StrictCustom -> stringResource(Res.string.relay_mode_custom)
|
||||
RelayMode.CustomWithDirectFallback -> stringResource(Res.string.relay_mode_custom_direct_fallback)
|
||||
RelayMode.LocalOnly -> stringResource(Res.string.relay_mode_local_only)
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.vnidrop.app.core.ReceiveFolder
|
||||
import com.vnidrop.app.core.RelayMode
|
||||
import com.vnidrop.app.core.RelaySettings
|
||||
import com.vnidrop.app.core.TransferStatus
|
||||
import com.vnidrop.app.core.usesCustomRelayUrls
|
||||
import com.vnidrop.app.diagnostics.BugReportDraft
|
||||
import com.vnidrop.app.diagnostics.BugReportService
|
||||
import com.vnidrop.app.diagnostics.DiagnosticsBuildConfig
|
||||
@@ -113,7 +114,7 @@ data class SettingsState(
|
||||
) {
|
||||
val hasRelaySettingsChanges: Boolean
|
||||
get() = relayMode != savedRelaySettings.mode ||
|
||||
(relayMode == RelayMode.Custom && relayUrlsText != savedRelaySettings.relayUrls.joinToString("\n"))
|
||||
(relayMode.usesCustomRelayUrls && relayUrlsText != savedRelaySettings.relayUrls.joinToString("\n"))
|
||||
}
|
||||
|
||||
sealed interface SettingsEffect {
|
||||
|
||||
@@ -58,14 +58,14 @@ class AppPreferencesRepository(
|
||||
) : PreferencesRepository {
|
||||
override val preferences: Flow<AppPreferences> = dataStore.data
|
||||
.catch {
|
||||
emit(preferencesOf(PreferenceKeys.RelayMode to RelayMode.Custom.name))
|
||||
emit(preferencesOf(PreferenceKeys.RelayMode to RelayMode.StrictCustom.name))
|
||||
}
|
||||
.map { prefs ->
|
||||
val storedRelayMode = prefs[PreferenceKeys.RelayMode]
|
||||
val parsedRelayMode = storedRelayMode?.let(::relayModeOrNull)
|
||||
val relayMode = when (storedRelayMode) {
|
||||
null -> RelayMode.Automatic
|
||||
else -> parsedRelayMode ?: RelayMode.Custom
|
||||
else -> parsedRelayMode ?: RelayMode.StrictCustom
|
||||
}
|
||||
val relayUrls = if (storedRelayMode != null && parsedRelayMode == null) {
|
||||
emptyList()
|
||||
@@ -199,6 +199,7 @@ private fun themeModeOrNull(raw: String): ThemeMode? =
|
||||
runCatching { ThemeMode.valueOf(raw) }.getOrNull()
|
||||
|
||||
private fun relayModeOrNull(raw: String): RelayMode? =
|
||||
runCatching { RelayMode.valueOf(raw) }.getOrNull()
|
||||
if (raw == "Custom") RelayMode.StrictCustom
|
||||
else runCatching { RelayMode.valueOf(raw) }.getOrNull()
|
||||
|
||||
private const val AppPreferencesFileName = "app_preferences.preferences_pb"
|
||||
|
||||
Reference in New Issue
Block a user