complete profile level server managment
This commit is contained in:
parent
0c797faf05
commit
3f5428eff8
|
@ -1,6 +1,16 @@
|
||||||
{
|
{
|
||||||
"@@locale": "de",
|
"@@locale": "de",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
|
"manageKnownServersShort": "Servers",
|
||||||
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
|
"displayNameTooltip": "Please enter a display name",
|
||||||
|
"manageKnownServersButton": "Manage Known Servers",
|
||||||
|
"fieldDescriptionLabel": "Description",
|
||||||
|
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
|
||||||
|
"importLocalServerButton": "Import %1",
|
||||||
|
"importLocalServerSelectText": "Select Local Server",
|
||||||
|
"importLocalServerLabel": "Import a locally hosted server",
|
||||||
|
"savePeerHistoryDescription": "Legt fest, ob ein mit dem anderen Nutzer verknüpfter Verlauf gelöscht werden soll oder nicht.",
|
||||||
"newMessagesLabel": "New Messages",
|
"newMessagesLabel": "New Messages",
|
||||||
"localeRU": "Russian",
|
"localeRU": "Russian",
|
||||||
"copyServerKeys": "Copy keys",
|
"copyServerKeys": "Copy keys",
|
||||||
|
@ -55,7 +65,6 @@
|
||||||
"peerOfflineMessage": "Anderer Nutzer ist offline, Nachrichten können derzeit nicht zugestellt werden",
|
"peerOfflineMessage": "Anderer Nutzer ist offline, Nachrichten können derzeit nicht zugestellt werden",
|
||||||
"blockBtn": "Anderen Nutzer blockieren",
|
"blockBtn": "Anderen Nutzer blockieren",
|
||||||
"savePeerHistory": "Peer-Verlauf speichern",
|
"savePeerHistory": "Peer-Verlauf speichern",
|
||||||
"savePeerHistoryDescription": "Legt fest, ob ein mit dem anderen Nutzer verknüpfter Verlauf gelöscht werden soll oder nicht.",
|
|
||||||
"dontSavePeerHistory": "Verlauf mit anderem Nutzer löschen",
|
"dontSavePeerHistory": "Verlauf mit anderem Nutzer löschen",
|
||||||
"unblockBtn": "Anderen Nutzer entsperren",
|
"unblockBtn": "Anderen Nutzer entsperren",
|
||||||
"blockUnknownLabel": "Unbekannte Peers blockieren",
|
"blockUnknownLabel": "Unbekannte Peers blockieren",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Unverschlüsselt (kein Passwort)",
|
"radioNoPassword": "Unverschlüsselt (kein Passwort)",
|
||||||
"radioUsePassword": "Passwort",
|
"radioUsePassword": "Passwort",
|
||||||
"copiedToClipboardNotification": "in die Zwischenablage kopiert",
|
"copiedToClipboardNotification": "in die Zwischenablage kopiert",
|
||||||
"copyBtn": "Kopieren",
|
|
||||||
"editProfile": "Profil bearbeiten",
|
"editProfile": "Profil bearbeiten",
|
||||||
"newProfile": "Neues Profil",
|
"newProfile": "Neues Profil",
|
||||||
"defaultProfileName": "Alice",
|
"defaultProfileName": "Alice",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "Möchtest Du die Einladung annehmen",
|
"acceptGroupInviteLabel": "Möchtest Du die Einladung annehmen",
|
||||||
"newGroupBtn": "Neue Gruppe anlegen",
|
"newGroupBtn": "Neue Gruppe anlegen",
|
||||||
"copiedClipboardNotification": "in die Zwischenablage kopiert",
|
"copiedClipboardNotification": "in die Zwischenablage kopiert",
|
||||||
|
"copyBtn": "Kopieren",
|
||||||
"pendingLabel": "Bestätigung ausstehend",
|
"pendingLabel": "Bestätigung ausstehend",
|
||||||
"acknowledgedLabel": "bestätigt",
|
"acknowledgedLabel": "bestätigt",
|
||||||
"couldNotSendMsgError": "Nachricht konnte nicht gesendet werden",
|
"couldNotSendMsgError": "Nachricht konnte nicht gesendet werden",
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
{
|
{
|
||||||
"@@locale": "en",
|
"@@locale": "en",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
|
"manageKnownServersShort": "Servers",
|
||||||
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
|
"displayNameTooltip": "Please enter a display name",
|
||||||
|
"manageKnownServersButton": "Manage Known Servers",
|
||||||
|
"fieldDescriptionLabel": "Description",
|
||||||
|
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
|
||||||
|
"importLocalServerButton": "Import %1",
|
||||||
|
"importLocalServerSelectText": "Select Local Server",
|
||||||
|
"importLocalServerLabel": "Import a locally hosted server",
|
||||||
|
"savePeerHistoryDescription": "Determines whether to delete any history associated with the contact.",
|
||||||
"newMessagesLabel": "New Messages",
|
"newMessagesLabel": "New Messages",
|
||||||
"localeRU": "Russian",
|
"localeRU": "Russian",
|
||||||
"copyServerKeys": "Copy keys",
|
"copyServerKeys": "Copy keys",
|
||||||
|
@ -55,7 +65,6 @@
|
||||||
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
|
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
|
||||||
"blockBtn": "Block Contact",
|
"blockBtn": "Block Contact",
|
||||||
"savePeerHistory": "Save History",
|
"savePeerHistory": "Save History",
|
||||||
"savePeerHistoryDescription": "Determines whether or not to delete any history associated with the contact.",
|
|
||||||
"dontSavePeerHistory": "Delete History",
|
"dontSavePeerHistory": "Delete History",
|
||||||
"unblockBtn": "Unblock Contact",
|
"unblockBtn": "Unblock Contact",
|
||||||
"blockUnknownLabel": "Block Unknown Contacts",
|
"blockUnknownLabel": "Block Unknown Contacts",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Unencrypted (No password)",
|
"radioNoPassword": "Unencrypted (No password)",
|
||||||
"radioUsePassword": "Password",
|
"radioUsePassword": "Password",
|
||||||
"copiedToClipboardNotification": "Copied to Clipboard",
|
"copiedToClipboardNotification": "Copied to Clipboard",
|
||||||
"copyBtn": "Copy",
|
|
||||||
"editProfile": "Edit Profille",
|
"editProfile": "Edit Profille",
|
||||||
"newProfile": "New Profile",
|
"newProfile": "New Profile",
|
||||||
"defaultProfileName": "Alice",
|
"defaultProfileName": "Alice",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
|
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
|
||||||
"newGroupBtn": "Create new group",
|
"newGroupBtn": "Create new group",
|
||||||
"copiedClipboardNotification": "Copied to clipboard",
|
"copiedClipboardNotification": "Copied to clipboard",
|
||||||
|
"copyBtn": "Copy",
|
||||||
"pendingLabel": "Pending",
|
"pendingLabel": "Pending",
|
||||||
"acknowledgedLabel": "Acknowledged",
|
"acknowledgedLabel": "Acknowledged",
|
||||||
"couldNotSendMsgError": "Could not send this message",
|
"couldNotSendMsgError": "Could not send this message",
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
{
|
{
|
||||||
"@@locale": "es",
|
"@@locale": "es",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
|
"manageKnownServersShort": "Servers",
|
||||||
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
|
"displayNameTooltip": "Please enter a display name",
|
||||||
|
"manageKnownServersButton": "Manage Known Servers",
|
||||||
|
"fieldDescriptionLabel": "Description",
|
||||||
|
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
|
||||||
|
"importLocalServerButton": "Import %1",
|
||||||
|
"importLocalServerSelectText": "Select Local Server",
|
||||||
|
"importLocalServerLabel": "Import a locally hosted server",
|
||||||
|
"savePeerHistoryDescription": "Determina si eliminar o no el historial asociado con el contacto.",
|
||||||
"newMessagesLabel": "New Messages",
|
"newMessagesLabel": "New Messages",
|
||||||
"localeRU": "Russian",
|
"localeRU": "Russian",
|
||||||
"copyServerKeys": "Copy keys",
|
"copyServerKeys": "Copy keys",
|
||||||
|
@ -55,7 +65,6 @@
|
||||||
"peerOfflineMessage": "Este contacto no está en línea, los mensajes no pueden ser entregados en este momento",
|
"peerOfflineMessage": "Este contacto no está en línea, los mensajes no pueden ser entregados en este momento",
|
||||||
"blockBtn": "Bloquear contacto",
|
"blockBtn": "Bloquear contacto",
|
||||||
"savePeerHistory": "Guardar el historial con contacto",
|
"savePeerHistory": "Guardar el historial con contacto",
|
||||||
"savePeerHistoryDescription": "Determina si eliminar o no el historial asociado con el contacto.",
|
|
||||||
"dontSavePeerHistory": "Eliminar historial de contacto",
|
"dontSavePeerHistory": "Eliminar historial de contacto",
|
||||||
"unblockBtn": "Desbloquear contacto",
|
"unblockBtn": "Desbloquear contacto",
|
||||||
"blockUnknownLabel": "Bloquear conexiones desconocidas",
|
"blockUnknownLabel": "Bloquear conexiones desconocidas",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Sin cifrado (sin contraseña)",
|
"radioNoPassword": "Sin cifrado (sin contraseña)",
|
||||||
"radioUsePassword": "Contraseña",
|
"radioUsePassword": "Contraseña",
|
||||||
"copiedToClipboardNotification": "Copiado al portapapeles",
|
"copiedToClipboardNotification": "Copiado al portapapeles",
|
||||||
"copyBtn": "Copiar",
|
|
||||||
"editProfile": "Editar perfil",
|
"editProfile": "Editar perfil",
|
||||||
"newProfile": "Nuevo perfil",
|
"newProfile": "Nuevo perfil",
|
||||||
"defaultProfileName": "Alicia",
|
"defaultProfileName": "Alicia",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "¿Quieres aceptar la invitación a ",
|
"acceptGroupInviteLabel": "¿Quieres aceptar la invitación a ",
|
||||||
"newGroupBtn": "Crear un nuevo grupo de chat",
|
"newGroupBtn": "Crear un nuevo grupo de chat",
|
||||||
"copiedClipboardNotification": "Copiado al portapapeles",
|
"copiedClipboardNotification": "Copiado al portapapeles",
|
||||||
|
"copyBtn": "Copiar",
|
||||||
"pendingLabel": "Pendiente",
|
"pendingLabel": "Pendiente",
|
||||||
"acknowledgedLabel": "Reconocido",
|
"acknowledgedLabel": "Reconocido",
|
||||||
"couldNotSendMsgError": "No se pudo enviar este mensaje",
|
"couldNotSendMsgError": "No se pudo enviar este mensaje",
|
||||||
|
|
|
@ -1,8 +1,18 @@
|
||||||
{
|
{
|
||||||
"@@locale": "fr",
|
"@@locale": "fr",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
"newMessagesLabel": "New Messages",
|
"manageKnownServersShort": "Servers",
|
||||||
"localeRU": "Russian",
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
|
"displayNameTooltip": "Veuillez entrer un nom d'usage s'il vous plaît",
|
||||||
|
"manageKnownServersButton": "Gérer les serveurs connus",
|
||||||
|
"fieldDescriptionLabel": "Description",
|
||||||
|
"groupsOnThisServerLabel": "Les groupes dont je fais partie sont hébergés sur ce serveur",
|
||||||
|
"importLocalServerButton": "Importer %1",
|
||||||
|
"importLocalServerSelectText": "Sélectionnez le serveur local",
|
||||||
|
"importLocalServerLabel": "Importer un serveur hébergé localement",
|
||||||
|
"savePeerHistoryDescription": "Détermine s'il faut ou non supprimer tout historique associé au contact.",
|
||||||
|
"newMessagesLabel": "Nouveaux messages",
|
||||||
|
"localeRU": "Russe",
|
||||||
"copyServerKeys": "Copier les clés",
|
"copyServerKeys": "Copier les clés",
|
||||||
"verfiyResumeButton": "Vérifier\/reprendre",
|
"verfiyResumeButton": "Vérifier\/reprendre",
|
||||||
"fileCheckingStatus": "Vérification de l'état du téléchargement",
|
"fileCheckingStatus": "Vérification de l'état du téléchargement",
|
||||||
|
@ -55,7 +65,6 @@
|
||||||
"peerOfflineMessage": "Le contact est hors ligne, les messages ne peuvent pas être transmis pour le moment.",
|
"peerOfflineMessage": "Le contact est hors ligne, les messages ne peuvent pas être transmis pour le moment.",
|
||||||
"blockBtn": "Bloquer le contact",
|
"blockBtn": "Bloquer le contact",
|
||||||
"savePeerHistory": "Enregistrer l'historique",
|
"savePeerHistory": "Enregistrer l'historique",
|
||||||
"savePeerHistoryDescription": "Détermine s'il faut ou non supprimer tout historique associé au contact.",
|
|
||||||
"dontSavePeerHistory": "Supprimer l'historique",
|
"dontSavePeerHistory": "Supprimer l'historique",
|
||||||
"unblockBtn": "Débloquer le contact",
|
"unblockBtn": "Débloquer le contact",
|
||||||
"blockUnknownLabel": "Bloquer les pairs inconnus",
|
"blockUnknownLabel": "Bloquer les pairs inconnus",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Non chiffré (pas de mot de passe)",
|
"radioNoPassword": "Non chiffré (pas de mot de passe)",
|
||||||
"radioUsePassword": "Mot de passe",
|
"radioUsePassword": "Mot de passe",
|
||||||
"copiedToClipboardNotification": "Copié dans le presse-papier",
|
"copiedToClipboardNotification": "Copié dans le presse-papier",
|
||||||
"copyBtn": "Copier",
|
|
||||||
"editProfile": "Modifier le profil",
|
"editProfile": "Modifier le profil",
|
||||||
"newProfile": "Nouveau profil",
|
"newProfile": "Nouveau profil",
|
||||||
"defaultProfileName": "Alice",
|
"defaultProfileName": "Alice",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "Voulez-vous accepter l'invitation au groupe",
|
"acceptGroupInviteLabel": "Voulez-vous accepter l'invitation au groupe",
|
||||||
"newGroupBtn": "Créer un nouveau groupe",
|
"newGroupBtn": "Créer un nouveau groupe",
|
||||||
"copiedClipboardNotification": "Copié dans le presse-papier",
|
"copiedClipboardNotification": "Copié dans le presse-papier",
|
||||||
|
"copyBtn": "Copier",
|
||||||
"pendingLabel": "En attente",
|
"pendingLabel": "En attente",
|
||||||
"acknowledgedLabel": "Accusé de réception",
|
"acknowledgedLabel": "Accusé de réception",
|
||||||
"couldNotSendMsgError": "Impossible d'envoyer ce message",
|
"couldNotSendMsgError": "Impossible d'envoyer ce message",
|
||||||
|
|
|
@ -1,52 +1,62 @@
|
||||||
{
|
{
|
||||||
"@@locale": "it",
|
"@@locale": "it",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
"newMessagesLabel": "New Messages",
|
"manageKnownServersShort": "Servers",
|
||||||
"localeRU": "Russian",
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
"copyServerKeys": "Copy keys",
|
"displayNameTooltip": "Please enter a display name",
|
||||||
"verfiyResumeButton": "Verify\/resume",
|
"manageKnownServersButton": "Manage Known Servers",
|
||||||
"fileCheckingStatus": "Checking download status",
|
"fieldDescriptionLabel": "Description",
|
||||||
"fileInterrupted": "Interrupted",
|
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
|
||||||
"fileSavedTo": "Saved to",
|
"importLocalServerButton": "Import %1",
|
||||||
"plainServerDescription": "We recommend that you protect your Cwtch servers with a password. If you do not set a password on this server then anyone who has access to this device may be able to access information about this server, including sensitive cryptographic keys.",
|
"importLocalServerSelectText": "Select Local Server",
|
||||||
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
|
"importLocalServerLabel": "Import a locally hosted server",
|
||||||
"deleteServerConfirmBtn": "Really delete server",
|
"savePeerHistoryDescription": "Determina se eliminare o meno ogni cronologia eventualmente associata al peer.",
|
||||||
"deleteServerSuccess": "Successfully deleted server",
|
"newMessagesLabel": "Nuovi messaggi",
|
||||||
"enterCurrentPasswordForDeleteServer": "Please enter current password to delete this server",
|
"localeRU": "Russo",
|
||||||
"copyAddress": "Copy Address",
|
"copyServerKeys": "Copia chiavi",
|
||||||
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
|
"verfiyResumeButton": "Verifica\/riprendi",
|
||||||
"settingServers": "Hosting Servers",
|
"fileCheckingStatus": "Controllo dello stato del download",
|
||||||
"enterServerPassword": "Enter password to unlock server",
|
"fileInterrupted": "Interrotto",
|
||||||
"unlockProfileTip": "Please create or unlock a profile to begin!",
|
"fileSavedTo": "Salvato in",
|
||||||
"unlockServerTip": "Please create or unlock a server to begin!",
|
"plainServerDescription": "Ti raccomandiamo di proteggere i tuoi server Cwtch con una password. Se non imposti una password su questo server, chiunque abbia accesso a questo dispositivo potrebbe essere in grado di accedere alle relativ informazioni, compresi dati sensibili come le chiavi crittografiche.",
|
||||||
"addServerTooltip": "Add new server",
|
"encryptedServerDescription": "Criptare un server con una password lo protegge da altre persone che potrebbero usare questo dispositivo. I server criptati non possono essere decriptati, visualizzati o accessibili finché non viene inserita la password corretta per sbloccarli.",
|
||||||
"serversManagerTitleShort": "Servers",
|
"deleteServerConfirmBtn": "Elimina davvero il server",
|
||||||
"serversManagerTitleLong": "Servers You Host",
|
"deleteServerSuccess": "Server eliminato con successo",
|
||||||
"saveServerButton": "Save Server",
|
"enterCurrentPasswordForDeleteServer": "Inserisci la password attuale per eliminare questo server",
|
||||||
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
|
"copyAddress": "Copia indirizzo",
|
||||||
"serverAutostartLabel": "Autostart",
|
"settingServersDescription": "L'esperimento dei server di hosting permette di allocare e gestire i server Cwtch",
|
||||||
"serverEnabledDescription": "Start or stop the server",
|
"settingServers": "Server di hosting",
|
||||||
"serverEnabled": "Server Enabled",
|
"enterServerPassword": "Inserisci la password per sbloccare il server",
|
||||||
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
|
"unlockProfileTip": "Crea o sblocca un profilo per iniziare!",
|
||||||
"serverDescriptionLabel": "Server Description",
|
"unlockServerTip": "Crea o sblocca un server per iniziare!",
|
||||||
"serverAddress": "Server Address",
|
"addServerTooltip": "Aggiungi nuovo server",
|
||||||
"editServerTitle": "Edit Server",
|
"serversManagerTitleShort": "Gestisci i server",
|
||||||
"addServerTitle": "Add Server",
|
"serversManagerTitleLong": "Server che gestisci",
|
||||||
"titleManageProfilesShort": "Profiles",
|
"saveServerButton": "Salva il server",
|
||||||
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
|
"serverAutostartDescription": "Controlla se l'applicazione avvierà automaticamente il server all'avvio",
|
||||||
|
"serverAutostartLabel": "Avvio automatico",
|
||||||
|
"serverEnabledDescription": "Avvia o arresta il server",
|
||||||
|
"serverEnabled": "Server abilitato",
|
||||||
|
"serverDescriptionDescription": "La tua descrizione del server solo per gestione personale, non sarà mai condivisa",
|
||||||
|
"serverDescriptionLabel": "Descrizione del server",
|
||||||
|
"serverAddress": "Indirizzo del server",
|
||||||
|
"editServerTitle": "Modifica il server",
|
||||||
|
"addServerTitle": "Aggiungi server",
|
||||||
|
"titleManageProfilesShort": "Profili",
|
||||||
|
"descriptionStreamerMode": "Se attivata, questa opzione rende l'applicazione visivamente più privata per lo streaming o la presentazione, ad esempio nascondendo il profilo e gli indirizzi di contatto",
|
||||||
"descriptionFileSharing": "L'esperimento di condivisione dei file ti consente di inviare e ricevere file dai contatti e dai gruppi di Cwtch. Tieni presente che la condivisione di un file con un gruppo farà sì che i membri di quel gruppo si colleghino con te direttamente su Cwtch per scaricarlo.",
|
"descriptionFileSharing": "L'esperimento di condivisione dei file ti consente di inviare e ricevere file dai contatti e dai gruppi di Cwtch. Tieni presente che la condivisione di un file con un gruppo farà sì che i membri di quel gruppo si colleghino con te direttamente su Cwtch per scaricarlo.",
|
||||||
"settingFileSharing": "Condivisione file",
|
"settingFileSharing": "Condivisione file",
|
||||||
"tooltipSendFile": "Invia file",
|
"tooltipSendFile": "Invia file",
|
||||||
"messageFileOffered": "Il contatto offre l'invio di un file",
|
"messageFileOffered": "Il contatto offre l'invio di un file",
|
||||||
"messageFileSent": "You sent a file",
|
"messageFileSent": "Hai inviato un file",
|
||||||
"messageEnableFileSharing": "Enable the file sharing experiment to view this message.",
|
"messageEnableFileSharing": "Abilita l'esperimento di condivisione dei file per visualizzare questo messaggio.",
|
||||||
"labelFilesize": "Size",
|
"labelFilesize": "Dimensione",
|
||||||
"labelFilename": "Filename",
|
"labelFilename": "Nome del file",
|
||||||
"downloadFileButton": "Download",
|
"downloadFileButton": "Scarica",
|
||||||
"openFolderButton": "Open Folder",
|
"openFolderButton": "Apri cartella",
|
||||||
"retrievingManifestMessage": "Retrieving file information...",
|
"retrievingManifestMessage": "Recupero delle informazioni sul file in corso...",
|
||||||
"streamerModeLabel": "Streamer\/Presentation Mode",
|
"streamerModeLabel": "Modalità Streamer\/Presentazione",
|
||||||
"archiveConversation": "Archive this Conversation",
|
"archiveConversation": "Archivia questa conversazione",
|
||||||
"profileOnionLabel": "Inviare questo indirizzo ai peer con cui si desidera connettersi",
|
"profileOnionLabel": "Inviare questo indirizzo ai peer con cui si desidera connettersi",
|
||||||
"addPeerTab": "Aggiungi un peer",
|
"addPeerTab": "Aggiungi un peer",
|
||||||
"addPeer": "Aggiungi peer",
|
"addPeer": "Aggiungi peer",
|
||||||
|
@ -55,29 +65,28 @@
|
||||||
"peerOfflineMessage": "Il peer è offline, i messaggi non possono essere recapitati in questo momento",
|
"peerOfflineMessage": "Il peer è offline, i messaggi non possono essere recapitati in questo momento",
|
||||||
"blockBtn": "Blocca il peer",
|
"blockBtn": "Blocca il peer",
|
||||||
"savePeerHistory": "Salva cronologia peer",
|
"savePeerHistory": "Salva cronologia peer",
|
||||||
"savePeerHistoryDescription": "Determina se eliminare o meno ogni cronologia eventualmente associata al peer.",
|
|
||||||
"dontSavePeerHistory": "Elimina cronologia dei peer",
|
"dontSavePeerHistory": "Elimina cronologia dei peer",
|
||||||
"unblockBtn": "Sblocca il peer",
|
"unblockBtn": "Sblocca il peer",
|
||||||
"blockUnknownLabel": "Blocca peer sconosciuti",
|
"blockUnknownLabel": "Blocca peer sconosciuti",
|
||||||
"blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings",
|
"blockUnknownConnectionsEnabledDescription": "Le connessioni da contatti sconosciuti sono bloccate. Puoi modificare questa impostazione in Impostazioni",
|
||||||
"networkStatusConnecting": "Connessione alla rete e ai peer ...",
|
"networkStatusConnecting": "Connessione alla rete e ai peer ...",
|
||||||
"showMessageButton": "Show Message",
|
"showMessageButton": "Mostra il messaggio",
|
||||||
"blockedMessageMessage": "This message is from a profile you have blocked.",
|
"blockedMessageMessage": "Questo messaggio proviene da un profilo che hai bloccato.",
|
||||||
"placeholderEnterMessage": "Type a message...",
|
"placeholderEnterMessage": "Scrivi un messaggio...",
|
||||||
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
|
"plainProfileDescription": "Ti raccomandiamo di proteggere i tuoi profili Cwtch con una password. Se non imposti una password su questo profilo, chiunque abbia accesso a questo dispositivo potrebbe essere in grado di accedere alle relative informazioni, compresi contatti, messaggi e altri dati sensibili come le chiavi crittografiche.",
|
||||||
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
|
"encryptedProfileDescription": "Criptare un profilo con una password lo protegge da altre persone che potrebbero usare questo dispositivo. I profili criptati non possono essere decriptati, visualizzati o accessibili finché non viene inserita la password corretta per sbloccarli.",
|
||||||
"addContactConfirm": "Add contact %1",
|
"addContactConfirm": "Aggiungi %1 come contatto",
|
||||||
"addContact": "Add contact",
|
"addContact": "Aggiungi contatto",
|
||||||
"contactGoto": "Go to conversation with %1",
|
"contactGoto": "Vai alla conversazione con %1",
|
||||||
"settingUIColumnOptionSame": "Same as portrait mode setting",
|
"settingUIColumnOptionSame": "Stessa impostazione della modalità verticale",
|
||||||
"settingUIColumnDouble14Ratio": "Double (1:4)",
|
"settingUIColumnDouble14Ratio": "Doppia (1:4)",
|
||||||
"settingUIColumnDouble12Ratio": "Double (1:2)",
|
"settingUIColumnDouble12Ratio": "Doppia (1:2)",
|
||||||
"settingUIColumnSingle": "Single",
|
"settingUIColumnSingle": "Singola",
|
||||||
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
|
"settingUIColumnLandscape": "Colonne dell'interfaccia utente in modalità orizzontale",
|
||||||
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
|
"settingUIColumnPortrait": "Colonne dell'interfaccia utente in modalità verticale",
|
||||||
"localePl": "Polish",
|
"localePl": "Polacco",
|
||||||
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
|
"tooltipRemoveThisQuotedMessage": "Rimuovi il messaggio citato.",
|
||||||
"tooltipReplyToThisMessage": "Reply to this message",
|
"tooltipReplyToThisMessage": "Rispondi a questo messaggio",
|
||||||
"tooltipRejectContactRequest": "Rifiuta questa richiesta di contatto",
|
"tooltipRejectContactRequest": "Rifiuta questa richiesta di contatto",
|
||||||
"tooltipAcceptContactRequest": "Accetta questa richiesta di contatto.",
|
"tooltipAcceptContactRequest": "Accetta questa richiesta di contatto.",
|
||||||
"notificationNewMessageFromGroup": "Nuovo messaggio in un gruppo!",
|
"notificationNewMessageFromGroup": "Nuovo messaggio in un gruppo!",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Non criptato (senza password)",
|
"radioNoPassword": "Non criptato (senza password)",
|
||||||
"radioUsePassword": "Password",
|
"radioUsePassword": "Password",
|
||||||
"copiedToClipboardNotification": "Copiato negli Appunti",
|
"copiedToClipboardNotification": "Copiato negli Appunti",
|
||||||
"copyBtn": "Copia",
|
|
||||||
"editProfile": "Modifica profilo",
|
"editProfile": "Modifica profilo",
|
||||||
"newProfile": "Nuovo profilo",
|
"newProfile": "Nuovo profilo",
|
||||||
"defaultProfileName": "Alice",
|
"defaultProfileName": "Alice",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "Vuoi accettare l'invito a",
|
"acceptGroupInviteLabel": "Vuoi accettare l'invito a",
|
||||||
"newGroupBtn": "Crea un nuovo gruppo",
|
"newGroupBtn": "Crea un nuovo gruppo",
|
||||||
"copiedClipboardNotification": "Copiato negli Appunti",
|
"copiedClipboardNotification": "Copiato negli Appunti",
|
||||||
|
"copyBtn": "Copia",
|
||||||
"pendingLabel": "In corso",
|
"pendingLabel": "In corso",
|
||||||
"acknowledgedLabel": "Riconosciuto",
|
"acknowledgedLabel": "Riconosciuto",
|
||||||
"couldNotSendMsgError": "Impossibile inviare questo messaggio",
|
"couldNotSendMsgError": "Impossibile inviare questo messaggio",
|
||||||
|
|
|
@ -1,8 +1,18 @@
|
||||||
{
|
{
|
||||||
"@@locale": "pl",
|
"@@locale": "pl",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
"newMessagesLabel": "New Messages",
|
"manageKnownServersShort": "Servers",
|
||||||
"localeRU": "Russian",
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
|
"displayNameTooltip": "Please enter a display name",
|
||||||
|
"manageKnownServersButton": "Manage Known Servers",
|
||||||
|
"fieldDescriptionLabel": "Description",
|
||||||
|
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
|
||||||
|
"importLocalServerButton": "Import %1",
|
||||||
|
"importLocalServerSelectText": "Select Local Server",
|
||||||
|
"importLocalServerLabel": "Import a locally hosted server",
|
||||||
|
"savePeerHistoryDescription": "Determines whether to delete any history associated with the contact.",
|
||||||
|
"newMessagesLabel": "Nowe wiadomości",
|
||||||
|
"localeRU": "Rosyjski",
|
||||||
"copyServerKeys": "Kopiuj klucze",
|
"copyServerKeys": "Kopiuj klucze",
|
||||||
"verfiyResumeButton": "Zweryfikuj\/wznów",
|
"verfiyResumeButton": "Zweryfikuj\/wznów",
|
||||||
"fileCheckingStatus": "Sprawdzanie stanu pobierania",
|
"fileCheckingStatus": "Sprawdzanie stanu pobierania",
|
||||||
|
@ -12,26 +22,26 @@
|
||||||
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
|
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
|
||||||
"deleteServerConfirmBtn": "Naprawdę usuń serwer",
|
"deleteServerConfirmBtn": "Naprawdę usuń serwer",
|
||||||
"deleteServerSuccess": "Pomyślnie usunięto serwer",
|
"deleteServerSuccess": "Pomyślnie usunięto serwer",
|
||||||
"enterCurrentPasswordForDeleteServer": "Please enter current password to delete this server",
|
"enterCurrentPasswordForDeleteServer": "Wprowadź aktualne hasło, aby usunąć ten serwer",
|
||||||
"copyAddress": "Skopiuj adres",
|
"copyAddress": "Skopiuj adres",
|
||||||
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
|
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
|
||||||
"settingServers": "Hosting Servers",
|
"settingServers": "Hosting serwerów",
|
||||||
"enterServerPassword": "Enter password to unlock server",
|
"enterServerPassword": "Wprowadź hasło, aby odblokować serwer",
|
||||||
"unlockProfileTip": "Please create or unlock a profile to begin!",
|
"unlockProfileTip": "Please create or unlock a profile to begin!",
|
||||||
"unlockServerTip": "Please create or unlock a server to begin!",
|
"unlockServerTip": "Please create or unlock a server to begin!",
|
||||||
"addServerTooltip": "Add new server",
|
"addServerTooltip": "Dodaj nowy serwer",
|
||||||
"serversManagerTitleShort": "Servers",
|
"serversManagerTitleShort": "Serwery",
|
||||||
"serversManagerTitleLong": "Servers You Host",
|
"serversManagerTitleLong": "Serwery, które hostujesz",
|
||||||
"saveServerButton": "Save Server",
|
"saveServerButton": "Zapisz serwer",
|
||||||
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
|
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
|
||||||
"serverAutostartLabel": "Autostart",
|
"serverAutostartLabel": "Autostart",
|
||||||
"serverEnabledDescription": "Start or stop the server",
|
"serverEnabledDescription": "Uruchom lub zatrzymaj serwer",
|
||||||
"serverEnabled": "Server Enabled",
|
"serverEnabled": "Serwer włączony",
|
||||||
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
|
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
|
||||||
"serverDescriptionLabel": "Server Description",
|
"serverDescriptionLabel": "Opis serwera",
|
||||||
"serverAddress": "Server Address",
|
"serverAddress": "Adres serwera",
|
||||||
"editServerTitle": "Edit Server",
|
"editServerTitle": "Edytuj serwer",
|
||||||
"addServerTitle": "Add Server",
|
"addServerTitle": "Dodaj serwer",
|
||||||
"titleManageProfilesShort": "Profile",
|
"titleManageProfilesShort": "Profile",
|
||||||
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
|
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
|
||||||
"descriptionFileSharing": "Eksperyment udostępniania plików pozwala na wysyłanie i odbieranie plików od kontaktów i grup Cwtch. Zauważ, że udostępnienie pliku grupie spowoduje, że członkowie tej grupy połączą się z Tobą bezpośrednio przez Cwtch, aby go pobrać.",
|
"descriptionFileSharing": "Eksperyment udostępniania plików pozwala na wysyłanie i odbieranie plików od kontaktów i grup Cwtch. Zauważ, że udostępnienie pliku grupie spowoduje, że członkowie tej grupy połączą się z Tobą bezpośrednio przez Cwtch, aby go pobrać.",
|
||||||
|
@ -55,70 +65,69 @@
|
||||||
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
|
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
|
||||||
"blockBtn": "Block Contact",
|
"blockBtn": "Block Contact",
|
||||||
"savePeerHistory": "Save History",
|
"savePeerHistory": "Save History",
|
||||||
"savePeerHistoryDescription": "Determines whether or not to delete any history associated with the contact.",
|
|
||||||
"dontSavePeerHistory": "Delete History",
|
"dontSavePeerHistory": "Delete History",
|
||||||
"unblockBtn": "Unblock Contact",
|
"unblockBtn": "Unblock Contact",
|
||||||
"blockUnknownLabel": "Block Unknown Contacts",
|
"blockUnknownLabel": "Block Unknown Contacts",
|
||||||
"blockUnknownConnectionsEnabledDescription": "Połączenia od nieznanych kontaktów są blokowane. Można to zmienić w Ustawieniach",
|
"blockUnknownConnectionsEnabledDescription": "Połączenia od nieznanych kontaktów są blokowane. Można to zmienić w Ustawieniach",
|
||||||
"networkStatusConnecting": "Connecting to network and contacts...",
|
"networkStatusConnecting": "Connecting to network and contacts...",
|
||||||
"showMessageButton": "Show Message",
|
"showMessageButton": "Pokaż wiadomość",
|
||||||
"blockedMessageMessage": "This message is from a profile you have blocked.",
|
"blockedMessageMessage": "Ta wiadomość pochodzi z profilu, który został przez Ciebie zablokowany.",
|
||||||
"placeholderEnterMessage": "Type a message...",
|
"placeholderEnterMessage": "Wpisz wiadomość...",
|
||||||
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
|
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
|
||||||
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
|
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
|
||||||
"addContactConfirm": "Add contact %1",
|
"addContactConfirm": "Dodaj kontakt %1",
|
||||||
"addContact": "Add contact",
|
"addContact": "Dodaj kontakt",
|
||||||
"contactGoto": "Go to conversation with %1",
|
"contactGoto": "Przejdź do rozmowy z %1",
|
||||||
"settingUIColumnOptionSame": "Same as portrait mode setting",
|
"settingUIColumnOptionSame": "Tak samo jak w przypadku trybu portretowego",
|
||||||
"settingUIColumnDouble14Ratio": "Double (1:4)",
|
"settingUIColumnDouble14Ratio": "Podwójny (1:4)",
|
||||||
"settingUIColumnDouble12Ratio": "Double (1:2)",
|
"settingUIColumnDouble12Ratio": "Podwójny (1:2)",
|
||||||
"settingUIColumnSingle": "Single",
|
"settingUIColumnSingle": "Pojedynczy",
|
||||||
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
|
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
|
||||||
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
|
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
|
||||||
"localePl": "Polish",
|
"localePl": "Polski",
|
||||||
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
|
"tooltipRemoveThisQuotedMessage": "Usuń cytowaną wiadomość.",
|
||||||
"tooltipReplyToThisMessage": "Reply to this message",
|
"tooltipReplyToThisMessage": "Odpowiedz na tę wiadomość",
|
||||||
"tooltipRejectContactRequest": "Reject this contact request",
|
"tooltipRejectContactRequest": "Odrzuć tę prośbę o kontakt",
|
||||||
"tooltipAcceptContactRequest": "Accept this contact request.",
|
"tooltipAcceptContactRequest": "Zaakceptuj tę prośbę o kontakt.",
|
||||||
"notificationNewMessageFromGroup": "New message in a group!",
|
"notificationNewMessageFromGroup": "Nowa wiadomość w grupie!",
|
||||||
"notificationNewMessageFromPeer": "New message from a contact!",
|
"notificationNewMessageFromPeer": "Nowa wiadomość od kontaktu!",
|
||||||
"tooltipHidePassword": "Hide Password",
|
"tooltipHidePassword": "Ukryj hasło",
|
||||||
"tooltipShowPassword": "Show Password",
|
"tooltipShowPassword": "Pokaż hasło",
|
||||||
"serverNotSynced": "Syncing New Messages (This can take some time)...",
|
"serverNotSynced": "Syncing New Messages (This can take some time)...",
|
||||||
"groupInviteSettingsWarning": "You have been invited to join a group! Please enable the Group Chat Experiment in Settings to view this Invitation.",
|
"groupInviteSettingsWarning": "You have been invited to join a group! Please enable the Group Chat Experiment in Settings to view this Invitation.",
|
||||||
"shutdownCwtchAction": "Shutdown Cwtch",
|
"shutdownCwtchAction": "Zamknij Cwtch",
|
||||||
"shutdownCwtchDialog": "Are you sure you want to shutdown Cwtch? This will close all connections, and exit the application.",
|
"shutdownCwtchDialog": "Are you sure you want to shutdown Cwtch? This will close all connections, and exit the application.",
|
||||||
"shutdownCwtchDialogTitle": "Shutdown Cwtch?",
|
"shutdownCwtchDialogTitle": "Zamknąć Cwtch?",
|
||||||
"shutdownCwtchTooltip": "Shutdown Cwtch",
|
"shutdownCwtchTooltip": "Zamknij Cwtch",
|
||||||
"malformedMessage": "Malformed message",
|
"malformedMessage": "Źle sformatowana wiadomość",
|
||||||
"profileDeleteSuccess": "Successfully deleted profile",
|
"profileDeleteSuccess": "Pomyślnie usunięto profil",
|
||||||
"debugLog": "Turn on console debug logging",
|
"debugLog": "Włącz logowanie debugowania konsoli",
|
||||||
"torNetworkStatus": "Tor network status",
|
"torNetworkStatus": "Stan sieci Tor",
|
||||||
"addContactFirst": "Add or pick a contact to begin chatting.",
|
"addContactFirst": "Add or pick a contact to begin chatting.",
|
||||||
"createProfileToBegin": "Please create or unlock a profile to begin",
|
"createProfileToBegin": "Please create or unlock a profile to begin",
|
||||||
"nickChangeSuccess": "Profile nickname changed successfully",
|
"nickChangeSuccess": "Nick w profilu został zmieniony pomyślnie",
|
||||||
"addServerFirst": "You need to add a server before you can create a group",
|
"addServerFirst": "You need to add a server before you can create a group",
|
||||||
"deleteProfileSuccess": "Successfully deleted profile",
|
"deleteProfileSuccess": "Pomyślnie usunięto profil",
|
||||||
"sendInvite": "Send a contact or group invite",
|
"sendInvite": "Wyślij kontakt lub zaproszenie do grupy",
|
||||||
"sendMessage": "Send Message",
|
"sendMessage": "Wyślij wiadomość",
|
||||||
"cancel": "Cancel",
|
"cancel": "Anuluj",
|
||||||
"resetTor": "Reset",
|
"resetTor": "Reset",
|
||||||
"torStatus": "Tor Status",
|
"torStatus": "Status Tor",
|
||||||
"torVersion": "Tor Version",
|
"torVersion": "Wersja Tor",
|
||||||
"sendAnInvitation": "You sent an invitation for: ",
|
"sendAnInvitation": "You sent an invitation for: ",
|
||||||
"contactSuggestion": "This is a contact suggestion for: ",
|
"contactSuggestion": "This is a contact suggestion for: ",
|
||||||
"rejected": "Rejected!",
|
"rejected": "Odrzucone!",
|
||||||
"accepted": "Accepted!",
|
"accepted": "Przyjęte!",
|
||||||
"chatHistoryDefault": "This conversation will be deleted when Cwtch is closed! Message history can be enabled per-conversation via the Settings menu in the upper right.",
|
"chatHistoryDefault": "This conversation will be deleted when Cwtch is closed! Message history can be enabled per-conversation via the Settings menu in the upper right.",
|
||||||
"newPassword": "New Password",
|
"newPassword": "Nowe hasło",
|
||||||
"yesLeave": "Yes, Leave This Conversation",
|
"yesLeave": "Tak, wyjdź z tej rozmowy",
|
||||||
"reallyLeaveThisGroupPrompt": "Are you sure you want to leave this conversation? All messages and attributes will be deleted.",
|
"reallyLeaveThisGroupPrompt": "Are you sure you want to leave this conversation? All messages and attributes will be deleted.",
|
||||||
"leaveGroup": "Leave This Conversation",
|
"leaveGroup": "Wyjdź z tej rozmowy",
|
||||||
"inviteToGroup": "You have been invited to join a group:",
|
"inviteToGroup": "You have been invited to join a group:",
|
||||||
"pasteAddressToAddContact": "Paste a cwtch address, invitation or key bundle here to add a new conversation",
|
"pasteAddressToAddContact": "Paste a cwtch address, invitation or key bundle here to add a new conversation",
|
||||||
"tooltipAddContact": "Add a new contact or conversation",
|
"tooltipAddContact": "Add a new contact or conversation",
|
||||||
"titleManageContacts": "Conversations",
|
"titleManageContacts": "Conversations",
|
||||||
"titleManageServers": "Manage Servers",
|
"titleManageServers": "Zarządzaj serwerami",
|
||||||
"dateNever": "Never",
|
"dateNever": "Never",
|
||||||
"dateLastYear": "Last Year",
|
"dateLastYear": "Last Year",
|
||||||
"dateYesterday": "Yesterday",
|
"dateYesterday": "Yesterday",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Unencrypted (No password)",
|
"radioNoPassword": "Unencrypted (No password)",
|
||||||
"radioUsePassword": "Password",
|
"radioUsePassword": "Password",
|
||||||
"copiedToClipboardNotification": "Copied to Clipboard",
|
"copiedToClipboardNotification": "Copied to Clipboard",
|
||||||
"copyBtn": "Copy",
|
|
||||||
"editProfile": "Edit Profille",
|
"editProfile": "Edit Profille",
|
||||||
"newProfile": "New Profile",
|
"newProfile": "New Profile",
|
||||||
"defaultProfileName": "Alice",
|
"defaultProfileName": "Alice",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
|
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
|
||||||
"newGroupBtn": "Create new group",
|
"newGroupBtn": "Create new group",
|
||||||
"copiedClipboardNotification": "Copied to clipboard",
|
"copiedClipboardNotification": "Copied to clipboard",
|
||||||
|
"copyBtn": "Copy",
|
||||||
"pendingLabel": "Pending",
|
"pendingLabel": "Pending",
|
||||||
"acknowledgedLabel": "Acknowledged",
|
"acknowledgedLabel": "Acknowledged",
|
||||||
"couldNotSendMsgError": "Could not send this message",
|
"couldNotSendMsgError": "Could not send this message",
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
{
|
{
|
||||||
"@@locale": "pt",
|
"@@locale": "pt",
|
||||||
"@@last_modified": "2021-11-11T01:02:08+01:00",
|
"@@last_modified": "2021-11-21T17:42:07+01:00",
|
||||||
|
"manageKnownServersShort": "Servers",
|
||||||
|
"manageKnownServersLong": "Manage Known Servers",
|
||||||
|
"displayNameTooltip": "Please enter a display name",
|
||||||
|
"manageKnownServersButton": "Manage Known Servers",
|
||||||
|
"fieldDescriptionLabel": "Description",
|
||||||
|
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
|
||||||
|
"importLocalServerButton": "Import %1",
|
||||||
|
"importLocalServerSelectText": "Select Local Server",
|
||||||
|
"importLocalServerLabel": "Import a locally hosted server",
|
||||||
|
"savePeerHistoryDescription": "Determines whether to delete any history associated with the contact.",
|
||||||
"newMessagesLabel": "New Messages",
|
"newMessagesLabel": "New Messages",
|
||||||
"localeRU": "Russian",
|
"localeRU": "Russian",
|
||||||
"copyServerKeys": "Copy keys",
|
"copyServerKeys": "Copy keys",
|
||||||
|
@ -55,7 +65,6 @@
|
||||||
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
|
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
|
||||||
"blockBtn": "Block Contact",
|
"blockBtn": "Block Contact",
|
||||||
"savePeerHistory": "Save History",
|
"savePeerHistory": "Save History",
|
||||||
"savePeerHistoryDescription": "Determines whether or not to delete any history associated with the contact.",
|
|
||||||
"dontSavePeerHistory": "Delete History",
|
"dontSavePeerHistory": "Delete History",
|
||||||
"unblockBtn": "Unblock Contact",
|
"unblockBtn": "Unblock Contact",
|
||||||
"blockUnknownLabel": "Block Unknown Contacts",
|
"blockUnknownLabel": "Block Unknown Contacts",
|
||||||
|
@ -190,7 +199,6 @@
|
||||||
"radioNoPassword": "Unencrypted (No password)",
|
"radioNoPassword": "Unencrypted (No password)",
|
||||||
"radioUsePassword": "Password",
|
"radioUsePassword": "Password",
|
||||||
"copiedToClipboardNotification": "Copiado",
|
"copiedToClipboardNotification": "Copiado",
|
||||||
"copyBtn": "Copiar",
|
|
||||||
"editProfile": "Edit Profille",
|
"editProfile": "Edit Profille",
|
||||||
"newProfile": "New Profile",
|
"newProfile": "New Profile",
|
||||||
"defaultProfileName": "Alice",
|
"defaultProfileName": "Alice",
|
||||||
|
@ -210,6 +218,7 @@
|
||||||
"acceptGroupInviteLabel": "Você quer aceitar o convite para",
|
"acceptGroupInviteLabel": "Você quer aceitar o convite para",
|
||||||
"newGroupBtn": "Criar novo grupo",
|
"newGroupBtn": "Criar novo grupo",
|
||||||
"copiedClipboardNotification": "Copiado",
|
"copiedClipboardNotification": "Copiado",
|
||||||
|
"copyBtn": "Copiar",
|
||||||
"pendingLabel": "Pendente",
|
"pendingLabel": "Pendente",
|
||||||
"acknowledgedLabel": "Confirmada",
|
"acknowledgedLabel": "Confirmada",
|
||||||
"couldNotSendMsgError": "Não deu para enviar esta mensagem",
|
"couldNotSendMsgError": "Não deu para enviar esta mensagem",
|
||||||
|
|
|
@ -142,14 +142,10 @@ class ContactListState extends ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
void addAll(Iterable<ContactInfoState> newContacts) {
|
void addAll(Iterable<ContactInfoState> newContacts) {
|
||||||
print("****** contactListState.addAll()... *********");
|
|
||||||
_contacts.addAll(newContacts);
|
_contacts.addAll(newContacts);
|
||||||
servers?.clearGroups();
|
servers?.clearGroups();
|
||||||
print("contact len: ${_contacts.length}");
|
|
||||||
_contacts.forEach((contact) {
|
_contacts.forEach((contact) {
|
||||||
//print("looking at contact ${contact.onion} (${contact.isGroup})...");
|
|
||||||
if (contact.isGroup) {
|
if (contact.isGroup) {
|
||||||
print("contactList adding group ${contact.onion} to ${contact.server}");
|
|
||||||
servers?.addGroup(contact);
|
servers?.addGroup(contact);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -159,7 +155,6 @@ class ContactListState extends ChangeNotifier {
|
||||||
void add(ContactInfoState newContact) {
|
void add(ContactInfoState newContact) {
|
||||||
_contacts.add(newContact);
|
_contacts.add(newContact);
|
||||||
if (newContact.isGroup) {
|
if (newContact.isGroup) {
|
||||||
print("contactList adding group ${newContact.onion} to ${newContact.server}");
|
|
||||||
servers?.addGroup(newContact);
|
servers?.addGroup(newContact);
|
||||||
}
|
}
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
@ -299,6 +294,13 @@ class ProfileInfoState extends ChangeNotifier {
|
||||||
// TODO Keys...
|
// TODO Keys...
|
||||||
return RemoteServerInfoState(onion: server["onion"], description: server["description"], status: server["status"]);
|
return RemoteServerInfoState(onion: server["onion"], description: server["description"], status: server["status"]);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
this._contacts.contacts.forEach((contact) {
|
||||||
|
if (contact.isGroup) {
|
||||||
|
_servers.addGroup(contact);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ class ProfileServerListState extends ChangeNotifier {
|
||||||
void updateServerState(String onion, String status) {
|
void updateServerState(String onion, String status) {
|
||||||
int idx = _servers.indexWhere((element) => element.onion == onion);
|
int idx = _servers.indexWhere((element) => element.onion == onion);
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
_servers[idx] = RemoteServerInfoState(onion: onion, description: _servers[idx].description, status: status);
|
_servers[idx].status = status;
|
||||||
} else {
|
} else {
|
||||||
print("Tried to update server cache without a starting state...this is probably an error");
|
print("Tried to update server cache without a starting state...this is probably an error");
|
||||||
}
|
}
|
||||||
|
@ -31,11 +31,21 @@ class ProfileServerListState extends ChangeNotifier {
|
||||||
_servers.sort((RemoteServerInfoState a, RemoteServerInfoState b) {
|
_servers.sort((RemoteServerInfoState a, RemoteServerInfoState b) {
|
||||||
// return -1 = a first in list
|
// return -1 = a first in list
|
||||||
// return 1 = b first in list
|
// return 1 = b first in list
|
||||||
|
|
||||||
|
// online v offline
|
||||||
if (a.status == "Synced" && b.status != "Synced") {
|
if (a.status == "Synced" && b.status != "Synced") {
|
||||||
return -1;
|
return -1;
|
||||||
} else if (a.status != "Synced" && b.status == "Synced") {
|
} else if (a.status != "Synced" && b.status == "Synced") {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// num of groups
|
||||||
|
if (a.groups.length > b.groups.length) {
|
||||||
|
return -1;
|
||||||
|
} else if (b.groups.length > a.groups.length) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -45,8 +55,6 @@ class ProfileServerListState extends ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
void addGroup(ContactInfoState group) {
|
void addGroup(ContactInfoState group) {
|
||||||
print("serverList adding group ${group.onion} to ${group.server}");
|
|
||||||
|
|
||||||
int idx = _servers.indexWhere((element) => element.onion == group.server);
|
int idx = _servers.indexWhere((element) => element.onion == group.server);
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
_servers[idx].addGroup(group);
|
_servers[idx].addGroup(group);
|
||||||
|
@ -59,7 +67,7 @@ class ProfileServerListState extends ChangeNotifier {
|
||||||
|
|
||||||
class RemoteServerInfoState extends ChangeNotifier {
|
class RemoteServerInfoState extends ChangeNotifier {
|
||||||
final String onion;
|
final String onion;
|
||||||
final String status;
|
String status;
|
||||||
String description;
|
String description;
|
||||||
List<ContactInfoState> _groups = [];
|
List<ContactInfoState> _groups = [];
|
||||||
|
|
||||||
|
@ -71,21 +79,14 @@ class RemoteServerInfoState extends ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearGroups() {
|
void clearGroups() {
|
||||||
print("Server CLEARING group");
|
|
||||||
description = "cleared groups";
|
|
||||||
_groups = [];
|
_groups = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
void addGroup(ContactInfoState group) {
|
void addGroup(ContactInfoState group) {
|
||||||
print("server $onion adding group ${group.onion}");
|
|
||||||
_groups.add(group);
|
_groups.add(group);
|
||||||
print("now has ${_groups.length}");
|
|
||||||
description = "i have ${_groups.length} groups";
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
int get groupsLen => _groups.length;
|
|
||||||
|
|
||||||
List<ContactInfoState> get groups => _groups.sublist(0); //todo: copy?? dont want caller able to bypass changenotifier
|
List<ContactInfoState> get groups => _groups.sublist(0); //todo: copy?? dont want caller able to bypass changenotifier
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,8 +107,7 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
|
||||||
labelText: AppLocalizations.of(context)!.yourDisplayName,
|
labelText: AppLocalizations.of(context)!.yourDisplayName,
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value.isEmpty) {
|
if (value.isEmpty) {
|
||||||
// TODO l10n ize
|
return AppLocalizations.of(context)!.displayNameTooltip;
|
||||||
return "Please enter a display name";
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
|
@ -113,11 +113,11 @@ class _ContactsViewState extends State<ContactsView> {
|
||||||
Clipboard.setData(new ClipboardData(text: Provider.of<ProfileInfoState>(context, listen: false).onion));
|
Clipboard.setData(new ClipboardData(text: Provider.of<ProfileInfoState>(context, listen: false).onion));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Manage servers
|
// Manage known Servers
|
||||||
if (Provider.of<Settings>(context, listen: false).isExperimentEnabled(ServerManagementExperiment)) {
|
if (Provider.of<Settings>(context, listen: false).isExperimentEnabled(ServerManagementExperiment)) {
|
||||||
actions.add(IconButton(
|
actions.add(IconButton(
|
||||||
icon: Icon(CwtchIcons.dns_24px),
|
icon: Icon(CwtchIcons.dns_24px),
|
||||||
tooltip: "Manage known servers", //AppLocalizations.of(context)!.copyAddress,
|
tooltip: AppLocalizations.of(context)!.manageKnownServersButton,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_pushServers();
|
_pushServers();
|
||||||
}));
|
}));
|
||||||
|
@ -176,7 +176,7 @@ class _ContactsViewState extends State<ContactsView> {
|
||||||
Navigator.of(context).push(MaterialPageRoute<void>(
|
Navigator.of(context).push(MaterialPageRoute<void>(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return MultiProvider(
|
return MultiProvider(
|
||||||
providers: [ChangeNotifierProvider(create: (context) => profile.serverList), Provider.value(value: Provider.of<FlwtchState>(context))],
|
providers: [ChangeNotifierProvider(create: (context) => profile), Provider.value(value: Provider.of<FlwtchState>(context))],
|
||||||
child: ProfileServersView(),
|
child: ProfileServersView(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,7 +5,10 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../cwtch_icons_icons.dart';
|
||||||
|
import '../main.dart';
|
||||||
import '../model.dart';
|
import '../model.dart';
|
||||||
|
import '../settings.dart';
|
||||||
|
|
||||||
|
|
||||||
class ProfileServersView extends StatefulWidget {
|
class ProfileServersView extends StatefulWidget {
|
||||||
|
@ -23,16 +26,31 @@ class _ProfileServersView extends State<ProfileServersView> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
||||||
|
var knownServers = Provider.of<ProfileInfoState>(context).serverList.servers.map<String>((RemoteServerInfoState remoteServer) { return remoteServer.onion + ".onion"; }).toSet();
|
||||||
|
var importServerList = Provider.of<ServerListState>(context).servers.where((server) => !knownServers.contains(server.onion) ).map<DropdownMenuItem<String>>((ServerInfoState serverInfo) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: serverInfo.onion,
|
||||||
|
child: Text(
|
||||||
|
serverInfo.description.isNotEmpty ? serverInfo.description : serverInfo.onion,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
importServerList.insert(0, DropdownMenuItem<String>(
|
||||||
|
value: "",
|
||||||
|
child: Text(AppLocalizations.of(context)!.importLocalServerSelectText)));
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text(MediaQuery
|
title: Text(MediaQuery
|
||||||
.of(context)
|
.of(context)
|
||||||
.size
|
.size
|
||||||
.width > 600 ? AppLocalizations.of(context)!.serversManagerTitleLong : AppLocalizations.of(context)!.serversManagerTitleShort),
|
.width > 600 ? AppLocalizations.of(context)!.manageKnownServersLong : AppLocalizations.of(context)!.manageKnownServersShort),
|
||||||
//actions: getActions(),
|
//actions: getActions(),
|
||||||
),
|
),
|
||||||
body: Consumer<ProfileServerListState>(
|
body: Consumer<ProfileInfoState>(builder: (context, profile, child) {
|
||||||
builder: (context, servers, child) {
|
ProfileServerListState servers = profile.serverList;
|
||||||
final tiles = servers.servers.map((RemoteServerInfoState server) {
|
final tiles = servers.servers.map((RemoteServerInfoState server) {
|
||||||
return ChangeNotifierProvider<RemoteServerInfoState>.value(
|
return ChangeNotifierProvider<RemoteServerInfoState>.value(
|
||||||
value: server,
|
value: server,
|
||||||
|
@ -46,14 +64,84 @@ class _ProfileServersView extends State<ProfileServersView> {
|
||||||
tiles: tiles,
|
tiles: tiles,
|
||||||
).toList();
|
).toList();
|
||||||
|
|
||||||
// TODO: add import row from global servers
|
final importCard = Card( child: ListTile(
|
||||||
divided.insert(0, Row( children: [Text("Import server from global list if any")]));
|
title: Text(AppLocalizations.of(context)!.importLocalServerLabel),
|
||||||
|
leading: Icon(CwtchIcons.add_circle_24px , color: Provider.of<Settings>(context).current().mainTextColor()),
|
||||||
|
trailing: DropdownButton(
|
||||||
|
onChanged: (String? importServer) {
|
||||||
|
if (importServer!.isNotEmpty) {
|
||||||
|
var server = Provider.of<ServerListState>(context).getServer(importServer)!;
|
||||||
|
showImportConfirm(context, profile.onion, server.onion, server.description, server.serverBundle);
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
value: "",
|
||||||
|
items: importServerList,
|
||||||
|
|
||||||
|
)));
|
||||||
|
|
||||||
|
return LayoutBuilder(builder: (BuildContext context, BoxConstraints viewportConstraints) {
|
||||||
|
return Scrollbar(
|
||||||
|
isAlwaysShown: true,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
clipBehavior: Clip.antiAlias,
|
||||||
|
child:
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.fromLTRB(5, 0, 5, 10),
|
||||||
|
padding: EdgeInsets.fromLTRB(5, 0, 5, 10),
|
||||||
|
child: Column(children: [
|
||||||
|
|
||||||
|
if (importServerList.length > 1) importCard,
|
||||||
|
|
||||||
|
Column( children: divided )
|
||||||
|
]))));});
|
||||||
|
|
||||||
return ListView(children: divided);
|
return ListView(children: divided);
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showImportConfirm(BuildContext context, String profileHandle, String serverHandle, String serverDesc, String bundle) {
|
||||||
|
var serverLabel = serverDesc.isNotEmpty ? serverDesc : serverHandle;
|
||||||
|
serverHandle = serverHandle.substring(0, serverHandle.length-6 ); // remove '.onion'
|
||||||
|
// set up the buttons
|
||||||
|
Widget cancelButton = ElevatedButton(
|
||||||
|
child: Text(AppLocalizations.of(context)!.cancel),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop(); // dismiss dialog
|
||||||
|
},
|
||||||
|
);
|
||||||
|
Widget continueButton = ElevatedButton(
|
||||||
|
child: Text(AppLocalizations.of(context)!.importLocalServerButton.replaceAll("%1", serverLabel)),
|
||||||
|
onPressed: () {
|
||||||
|
Provider.of<FlwtchState>(context, listen: false).cwtch.ImportBundle(profileHandle, bundle);
|
||||||
|
// Wait 500ms and hope the server is imported and add it's description in the UI and as an attribute
|
||||||
|
Future.delayed(const Duration(milliseconds: 500), () {
|
||||||
|
var profile = Provider.of<ProfileInfoState>(context);
|
||||||
|
profile.serverList.getServer(serverHandle)?.updateDescription(serverDesc);
|
||||||
|
Provider.of<FlwtchState>(context, listen: false).cwtch.SetContactAttribute(profile.onion, serverHandle, "local.server.description", serverDesc);
|
||||||
|
});
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
});
|
||||||
|
|
||||||
|
// set up the AlertDialog
|
||||||
|
AlertDialog alert = AlertDialog(
|
||||||
|
title: Text(AppLocalizations.of(context)!.importLocalServerButton.replaceAll("%1", serverLabel)),
|
||||||
|
actions: [
|
||||||
|
cancelButton,
|
||||||
|
continueButton,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
// show the dialog
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return alert;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -48,118 +48,102 @@ class _RemoteServerViewState extends State<RemoteServerView> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Consumer2<RemoteServerInfoState, Settings>(builder: (context, serverInfoState, settings, child) {
|
return Consumer3<ProfileInfoState, RemoteServerInfoState, Settings>(builder: (context, profile, serverInfoState, settings, child) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text(ctrlrDesc.text.isNotEmpty ? ctrlrDesc.text : serverInfoState.onion)
|
title: Text(ctrlrDesc.text.isNotEmpty ? ctrlrDesc.text : serverInfoState.onion)
|
||||||
),
|
),
|
||||||
body: LayoutBuilder(builder: (BuildContext context, BoxConstraints viewportConstraints) {
|
body: Container(
|
||||||
return Scrollbar(
|
margin: EdgeInsets.fromLTRB(30, 0, 30, 10),
|
||||||
isAlwaysShown: true,
|
padding: EdgeInsets.fromLTRB(20, 0, 20, 10),
|
||||||
child: SingleChildScrollView(
|
child: Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
clipBehavior: Clip.antiAlias,
|
SizedBox(
|
||||||
child: ConstrainedBox(
|
height: 20,
|
||||||
constraints: BoxConstraints(
|
),
|
||||||
minHeight: viewportConstraints.maxHeight,
|
CwtchLabel(label: AppLocalizations.of(context)!.serverAddress),
|
||||||
),
|
SizedBox(
|
||||||
child: Form(
|
height: 20,
|
||||||
key: _formKey,
|
),
|
||||||
child: Container(
|
SelectableText(
|
||||||
margin: EdgeInsets.fromLTRB(30, 0, 30, 10),
|
serverInfoState.onion
|
||||||
padding: EdgeInsets.fromLTRB(20, 0, 20, 10),
|
),
|
||||||
child: Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
|
|
||||||
Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [
|
// Description
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 20,
|
height: 20,
|
||||||
),
|
),
|
||||||
CwtchLabel(label: AppLocalizations.of(context)!.serverAddress),
|
CwtchLabel(label: AppLocalizations.of(context)!.serverDescriptionLabel),
|
||||||
SizedBox(
|
Text(AppLocalizations.of(context)!.serverDescriptionDescription),
|
||||||
height: 20,
|
SizedBox(
|
||||||
),
|
height: 20,
|
||||||
SelectableText(
|
),
|
||||||
serverInfoState.onion
|
CwtchButtonTextField(
|
||||||
)
|
controller: ctrlrDesc,
|
||||||
]),
|
readonly: false,
|
||||||
|
tooltip: AppLocalizations.of(context)!.saveBtn,
|
||||||
|
labelText: AppLocalizations.of(context)!.fieldDescriptionLabel,
|
||||||
|
icon: Icon(Icons.save),
|
||||||
|
onPressed: () {
|
||||||
|
Provider.of<FlwtchState>(context, listen: false).cwtch.SetContactAttribute(profile.onion, serverInfoState.onion, "local.server.description", ctrlrDesc.text);
|
||||||
|
serverInfoState.updateDescription(ctrlrDesc.text);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
// Description
|
SizedBox(
|
||||||
Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [
|
height: 20,
|
||||||
SizedBox(
|
),
|
||||||
height: 20,
|
|
||||||
),
|
|
||||||
CwtchLabel(label: AppLocalizations.of(context)!.serverDescriptionLabel),
|
|
||||||
Text(AppLocalizations.of(context)!.serverDescriptionDescription),
|
|
||||||
SizedBox(
|
|
||||||
height: 20,
|
|
||||||
),
|
|
||||||
CwtchButtonTextField(
|
|
||||||
controller: ctrlrDesc,
|
|
||||||
readonly: false,
|
|
||||||
tooltip: "Save", //TODO localize
|
|
||||||
labelText: "Description", // TODO localize
|
|
||||||
icon: Icon(Icons.save),
|
|
||||||
onPressed: () {
|
|
||||||
// TODO save
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]),
|
|
||||||
|
|
||||||
Text("Groups on this server"),
|
Padding(padding: EdgeInsets.all(8), child: Text( AppLocalizations.of(context)!.groupsOnThisServerLabel),),
|
||||||
_buildGroupsList(serverInfoState),
|
Expanded(child: _buildGroupsList(serverInfoState))
|
||||||
|
])));
|
||||||
|
|
||||||
]))))));
|
});
|
||||||
}),);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildGroupsList(RemoteServerInfoState serverInfoState) {
|
Widget _buildGroupsList(RemoteServerInfoState serverInfoState) {
|
||||||
print("groups: ${serverInfoState.groups} lenMethod: ${serverInfoState.groupsLen} len: ${serverInfoState.groups.length}");
|
|
||||||
final tiles = serverInfoState.groups.map((ContactInfoState group) {
|
final tiles = serverInfoState.groups.map((ContactInfoState group) {
|
||||||
print("building group tile for ${group.onion}");
|
return ChangeNotifierProvider<ContactInfoState>.value(
|
||||||
return ChangeNotifierProvider<ContactInfoState>.value(key: ValueKey(group.profileOnion + "" + group.onion), value: group, builder: (_, __) => RepaintBoundary(child: _buildGroupRow(group)));
|
value: group,
|
||||||
});
|
builder: (context, child) => RepaintBoundary(child: _buildGroupRow(group)), // ServerRow()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
final divided = ListTile.divideTiles(
|
final divided = ListTile.divideTiles(
|
||||||
context: context,
|
context: context,
|
||||||
tiles: tiles,
|
tiles: tiles,
|
||||||
).toList();
|
).toList();
|
||||||
return RepaintBoundary(child: ListView(children: divided));
|
|
||||||
}
|
|
||||||
|
|
||||||
void _savePressed() {
|
var size = MediaQuery.of(context).size;
|
||||||
|
|
||||||
var server = Provider.of<ServerInfoState>(context, listen: false);
|
int cols = ((size.width - 50) / 500).ceil();
|
||||||
|
final double itemHeight = 60; // magic arbitary
|
||||||
|
final double itemWidth = (size.width - 50 /* magic padding guess */) / cols;
|
||||||
|
|
||||||
Provider.of<FlwtchState>(context, listen: false)
|
return GridView.count(crossAxisCount: cols, childAspectRatio: (itemWidth / itemHeight), children: divided);
|
||||||
.cwtch.SetServerAttribute(server.onion, "description", ctrlrDesc.text);
|
|
||||||
server.setDescription(ctrlrDesc.text);
|
|
||||||
|
|
||||||
|
|
||||||
if (_formKey.currentState!.validate()) {
|
|
||||||
// TODO support change password
|
|
||||||
}
|
|
||||||
Navigator.of(context).pop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildGroupRow(ContactInfoState group) {
|
Widget _buildGroupRow(ContactInfoState group) {
|
||||||
return Column(
|
return Padding(
|
||||||
children: [
|
padding: const EdgeInsets.all(6.0), //border size
|
||||||
Text(
|
child: Column(
|
||||||
group.nickname,
|
children: [
|
||||||
style: Provider.of<FlwtchState>(context).biggerFont.apply(color: Provider.of<Settings>(context).theme.portraitOnlineBorderColor()),
|
Text(
|
||||||
softWrap: true,
|
group.nickname,
|
||||||
overflow: TextOverflow.ellipsis,
|
style: Provider.of<FlwtchState>(context).biggerFont.apply(color: Provider.of<Settings>(context).theme.portraitOnlineBorderColor()),
|
||||||
),
|
softWrap: true,
|
||||||
Visibility(
|
overflow: TextOverflow.ellipsis,
|
||||||
visible: !Provider.of<Settings>(context).streamerMode,
|
),
|
||||||
child: ExcludeSemantics(
|
Visibility(
|
||||||
child: Text(
|
visible: !Provider.of<Settings>(context).streamerMode,
|
||||||
group.onion,
|
child: ExcludeSemantics(
|
||||||
softWrap: true,
|
child: Text(
|
||||||
overflow: TextOverflow.ellipsis,
|
group.onion,
|
||||||
style: TextStyle(color: Provider.of<Settings>(context).theme.portraitOnlineBorderColor()),
|
softWrap: true,
|
||||||
)))
|
overflow: TextOverflow.ellipsis,
|
||||||
],
|
style: TextStyle(color: Provider.of<Settings>(context).theme.portraitOnlineBorderColor()),
|
||||||
|
)))
|
||||||
|
])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,53 +25,54 @@ class _RemoteServerRowState extends State<RemoteServerRow> {
|
||||||
var server = Provider.of<RemoteServerInfoState>(context);
|
var server = Provider.of<RemoteServerInfoState>(context);
|
||||||
var description = server.description.isNotEmpty ? server.description : server.onion;
|
var description = server.description.isNotEmpty ? server.description : server.onion;
|
||||||
var running = server.status == "Synced";
|
var running = server.status == "Synced";
|
||||||
return Card(clipBehavior: Clip.antiAlias,
|
return Consumer<ProfileInfoState>(
|
||||||
margin: EdgeInsets.all(0.0),
|
builder: (context, profile, child) {
|
||||||
child: InkWell(
|
return Card(clipBehavior: Clip.antiAlias,
|
||||||
child: Row(
|
margin: EdgeInsets.all(0.0),
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
child: InkWell(
|
||||||
children: [
|
child: Row(
|
||||||
Padding(
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
padding: const EdgeInsets.all(6.0), //border size
|
children: [
|
||||||
child: Icon(CwtchIcons.dns_24px,
|
Padding(
|
||||||
color: running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor(),
|
padding: const EdgeInsets.all(6.0), //border size
|
||||||
size: 64)
|
child: Icon(CwtchIcons.dns_24px,
|
||||||
|
color: running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor(),
|
||||||
|
size: 64)
|
||||||
|
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
description,
|
description,
|
||||||
semanticsLabel: description,
|
semanticsLabel: description,
|
||||||
style: Provider.of<FlwtchState>(context).biggerFont.apply(color: running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
style: Provider.of<FlwtchState>(context).biggerFont.apply(color: running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: !Provider.of<Settings>(context).streamerMode,
|
visible: !Provider.of<Settings>(context).streamerMode,
|
||||||
child: ExcludeSemantics(
|
child: ExcludeSemantics(
|
||||||
child: Text(
|
child: Text(
|
||||||
server.onion,
|
server.onion,
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: TextStyle(color: running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
style: TextStyle(color: running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
||||||
)))
|
)))
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
|
|
||||||
]),
|
]),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute<void>(
|
Navigator.of(context).push(MaterialPageRoute<void>(
|
||||||
settings: RouteSettings(name: "remoteserverview"),
|
settings: RouteSettings(name: "remoteserverview"),
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return MultiProvider(
|
return MultiProvider(
|
||||||
providers: [ChangeNotifierProvider(create: (context) => server), Provider.value(value: Provider.of<FlwtchState>(context))],
|
providers: [Provider.value(value: profile), ChangeNotifierProvider(create: (context) => server), Provider.value(value: Provider.of<FlwtchState>(context))],
|
||||||
child: RemoteServerView(),
|
child: RemoteServerView(),
|
||||||
);
|
);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
));
|
));});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue