diff --git a/fetch-tor-win.ps1 b/fetch-tor-win.ps1 index c293f26a..ba275cbc 100644 --- a/fetch-tor-win.ps1 +++ b/fetch-tor-win.ps1 @@ -1,6 +1,6 @@ -Invoke-WebRequest -Uri https://dist.torproject.org/torbrowser/10.0.18/tor-win64-0.4.5.9.zip -OutFile tor.zip +Invoke-WebRequest -Uri https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-win64-0.4.6.5.zip -OutFile tor.zip -if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne '72764eb07ad8ab511603aba0734951ca003989f5f4686af91ba220217b4a8a4bcc5f571b59f52c847932f6efedf847b111621983050fcddbb8099d43ca66fb07' ) { Write-Error 'tor.zip sha512sum mismatch' } +if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne '7917561a7a063440a1ddfa9cb544ab9ffd09de84cea3dd66e3cc9cd349dd9f85b74a522ec390d7a974bc19b424c4d53af60e57bbc47e763d13cab6a203c4592f' ) { Write-Error 'tor.zip sha512sum mismatch' } Expand-Archive -Path tor.zip -DestinationPath Tor diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 58c21817..4b780758 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,6 +1,20 @@ { "@@locale": "de", - "@@last_modified": "2021-07-14T23:49:07+02:00", + "@@last_modified": "2021-08-26T23:44:51+02:00", + "profileOnionLabel": "Senden Sie diese Adresse an Peers, mit denen Sie sich verbinden möchten", + "addPeerTab": "Einen anderen Nutzer hinzufügen", + "addPeer": "Anderen Nutzer hinzufügen", + "peerNotOnline": "Der andere Nutzer ist offline. Die App kann momentan nicht verwendet werden.", + "peerBlockedMessage": "Anderer Nutzer ist blockiert", + "peerOfflineMessage": "Anderer Nutzer ist offline, Nachrichten können derzeit nicht zugestellt werden", + "blockBtn": "Anderen Nutzer blockieren", + "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", + "unblockBtn": "Anderen Nutzer entsperren", + "blockUnknownLabel": "Unbekannte Peers blockieren", + "blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings", + "networkStatusConnecting": "Verbinde zu Netzwerk und Peers ...", "showMessageButton": "Show Message", "blockedMessageMessage": "This message is from a profile you have blocked.", "placeholderEnterMessage": "Type a message...", @@ -84,7 +98,6 @@ "todoPlaceholder": "noch zu erledigen", "newConnectionPaneTitle": "Neue Verbindung", "networkStatusOnline": "Online", - "networkStatusConnecting": "Verbinde zu Netzwerk und Peers ...", "networkStatusAttemptingTor": "Versuche, eine Verbindung mit dem Tor-Netzwerk herzustellen", "networkStatusDisconnected": "Vom Internet getrennt, überprüfe deine Verbindung", "viewGroupMembershipTooltip": "Gruppenmitgliedschaft anzeigen", @@ -104,7 +117,6 @@ "localeFr": "Frances", "localeEn": "English", "settingLanguage": "Sprache", - "blockUnknownLabel": "Unbekannte Peers blockieren", "zoomLabel": "Benutzeroberflächen-Zoom (betriftt hauptsächlich Text- und Knopgrößen)", "versionBuilddate": "Version: %1 Aufgebaut auf: %2", "cwtchSettingsTitle": "Cwtch Einstellungen", @@ -128,7 +140,6 @@ "password1Label": "Passwort", "currentPasswordLabel": "aktuelles Passwort", "yourDisplayName": "Dein Anzeigename", - "profileOnionLabel": "Senden Sie diese Adresse an Peers, mit denen Sie sich verbinden möchten", "noPasswordWarning": "Wenn für dieses Konto kein Passwort verwendet wird, bedeutet dies, dass alle lokal gespeicherten Daten nicht verschlüsselt werden.", "radioNoPassword": "Unverschlüsselt (kein Passwort)", "radioUsePassword": "Passwort", @@ -141,11 +152,6 @@ "editProfileTitle": "Profil bearbeiten", "addProfileTitle": "Neues Profil hinzufügen", "deleteBtn": "Löschen", - "unblockBtn": "Anderen Nutzer entsperren", - "dontSavePeerHistory": "Verlauf mit anderem Nutzer löschen", - "savePeerHistoryDescription": "Legt fest, ob ein mit dem anderen Nutzer verknüpfter Verlauf gelöscht werden soll oder nicht.", - "savePeerHistory": "Peer-Verlauf speichern", - "blockBtn": "Anderen Nutzer blockieren", "saveBtn": "Speichern", "displayNameLabel": "Angezeigename", "addressLabel": "Adresse", @@ -158,15 +164,12 @@ "acceptGroupInviteLabel": "Möchtest Du die Einladung annehmen", "newGroupBtn": "Neue Gruppe anlegen", "copiedClipboardNotification": "in die Zwischenablage kopiert", - "peerOfflineMessage": "Anderer Nutzer ist offline, Nachrichten können derzeit nicht zugestellt werden", - "peerBlockedMessage": "Anderer Nutzer ist blockiert", "pendingLabel": "Bestätigung ausstehend", "acknowledgedLabel": "bestätigt", "couldNotSendMsgError": "Nachricht konnte nicht gesendet werden", "dmTooltip": "Klicken, um Direktnachricht zu senden", "membershipDescription": "Unten steht eine Liste der Benutzer, die Nachrichten an die Gruppe gesendet haben. Möglicherweise enthält diese Benutzerzliste nicht alle, die Zugang zur Gruppe haben.", "addListItemBtn": "Element hinzufügen", - "peerNotOnline": "Der andere Nutzer ist offline. Die App kann momentan nicht verwendet werden.", "searchList": "Liste durchsuchen", "update": "Update", "inviteBtn": "Einladen", @@ -192,7 +195,6 @@ "newBulletinLabel": "Neue Meldung", "joinGroup": "Gruppe beitreten", "createGroup": "Gruppe erstellen", - "addPeer": "Anderen Nutzer hinzufügen", "groupAddr": "Adresse", "invitation": "Einladung", "server": "Server", @@ -201,7 +203,6 @@ "peerAddress": "Adresse", "joinGroupTab": "Einer Gruppe beitreten", "createGroupTab": "Eine Gruppe erstellen", - "addPeerTab": "Einen anderen Nutzer hinzufügen", "createGroupBtn": "Anlegen", "defaultGroupName": "Tolle Gruppe", "createGroupTitle": "Gruppe Anlegen" diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index c5979fa9..cc5b5e01 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -1,6 +1,20 @@ { "@@locale": "en", - "@@last_modified": "2021-07-14T23:49:07+02:00", + "@@last_modified": "2021-08-26T23:44:51+02:00", + "profileOnionLabel": "Send this address to people you want to connect with", + "addPeerTab": "Add a contact", + "addPeer": "Add Contact", + "peerNotOnline": "Contact is offline. Applications cannot be used right now.", + "peerBlockedMessage": "Contact is blocked", + "peerOfflineMessage": "Contact is offline, messages can't be delivered right now", + "blockBtn": "Block Contact", + "savePeerHistory": "Save History", + "savePeerHistoryDescription": "Determines whether or not to delete any history associated with the contact.", + "dontSavePeerHistory": "Delete History", + "unblockBtn": "Unblock Contact", + "blockUnknownLabel": "Block Unknown Contacts", + "blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings", + "networkStatusConnecting": "Connecting to network and contacts...", "showMessageButton": "Show Message", "blockedMessageMessage": "This message is from a profile you have blocked.", "placeholderEnterMessage": "Type a message...", @@ -84,7 +98,6 @@ "todoPlaceholder": "Todo...", "newConnectionPaneTitle": "New Connection", "networkStatusOnline": "Online", - "networkStatusConnecting": "Connecting to network and peers...", "networkStatusAttemptingTor": "Attempting to connect to Tor network", "networkStatusDisconnected": "Disconnected from the internet, check your connection", "viewGroupMembershipTooltip": "View Group Membership", @@ -104,7 +117,6 @@ "localeFr": "Frances", "localeEn": "English", "settingLanguage": "Language", - "blockUnknownLabel": "Block Unknown Peers", "zoomLabel": "Interface zoom (mostly affects text and button sizes)", "versionBuilddate": "Version: %1 Built on: %2", "cwtchSettingsTitle": "Cwtch Settings", @@ -128,7 +140,6 @@ "password1Label": "Password", "currentPasswordLabel": "Current Password", "yourDisplayName": "Your Display Name", - "profileOnionLabel": "Send this address to peers you want to connect with", "noPasswordWarning": "Not using a password on this account means that all data stored locally will not be encrypted", "radioNoPassword": "Unencrypted (No password)", "radioUsePassword": "Password", @@ -141,11 +152,6 @@ "editProfileTitle": "Edit Profile", "addProfileTitle": "Add new profile", "deleteBtn": "Delete", - "unblockBtn": "Unblock Peer", - "dontSavePeerHistory": "Delete Peer History", - "savePeerHistoryDescription": "Determines whether or not to delete any history associated with the peer.", - "savePeerHistory": "Save Peer History", - "blockBtn": "Block Peer", "saveBtn": "Save", "displayNameLabel": "Display Name", "addressLabel": "Address", @@ -158,15 +164,12 @@ "acceptGroupInviteLabel": "Do you want to accept the invitation to", "newGroupBtn": "Create new group", "copiedClipboardNotification": "Copied to clipboard", - "peerOfflineMessage": "Peer is offline, messages can't be delivered right now", - "peerBlockedMessage": "Peer is blocked", "pendingLabel": "Pending", "acknowledgedLabel": "Acknowledged", "couldNotSendMsgError": "Could not send this message", "dmTooltip": "Click to DM", "membershipDescription": "Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.", "addListItemBtn": "Add Item", - "peerNotOnline": "Peer is Offline. Applications cannot be used right now.", "searchList": "Search List", "update": "Update", "inviteBtn": "Invite", @@ -192,7 +195,6 @@ "newBulletinLabel": "New Bulletin", "joinGroup": "Join group", "createGroup": "Create group", - "addPeer": "Add Peer", "groupAddr": "Address", "invitation": "Invitation", "server": "Server", @@ -201,7 +203,6 @@ "peerAddress": "Address", "joinGroupTab": "Join a group", "createGroupTab": "Create a group", - "addPeerTab": "Add a peer", "createGroupBtn": "Create", "defaultGroupName": "Awesome Group", "createGroupTitle": "Create Group" diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 1e01cb51..52427f6f 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,6 +1,20 @@ { "@@locale": "es", - "@@last_modified": "2021-07-14T23:49:07+02:00", + "@@last_modified": "2021-08-26T23:44:51+02:00", + "profileOnionLabel": "Envía esta dirección a los contactos con los que quieras conectarte", + "addPeerTab": "Agregar Contacto", + "addPeer": "Agregar Contacto", + "peerNotOnline": "Este contacto no está en línea, la aplicación no puede ser usada en este momento", + "peerBlockedMessage": "Contacto bloqueado", + "peerOfflineMessage": "Este contacto no está en línea, los mensajes no pueden ser entregados en este momento", + "blockBtn": "Bloquear contacto", + "savePeerHistory": "Guardar el historial con contacto", + "savePeerHistoryDescription": "Determina si eliminar o no el historial asociado con el contacto.", + "dontSavePeerHistory": "Eliminar historial de contacto", + "unblockBtn": "Desbloquear contacto", + "blockUnknownLabel": "Bloquear conexiones desconocidas", + "blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings", + "networkStatusConnecting": "Conectando a la red y a los contactos...", "showMessageButton": "Show Message", "blockedMessageMessage": "This message is from a profile you have blocked.", "placeholderEnterMessage": "Type a message...", @@ -84,7 +98,6 @@ "todoPlaceholder": "Por hacer...", "newConnectionPaneTitle": "Nueva conexión", "networkStatusOnline": "En línea", - "networkStatusConnecting": "Conectando a la red y a los contactos...", "networkStatusAttemptingTor": "Intentando conectarse a la red Tor", "networkStatusDisconnected": "Sin conexión, comprueba tu conexión", "viewGroupMembershipTooltip": "Ver membresía del grupo", @@ -104,7 +117,6 @@ "localeFr": "Francés", "localeEn": "Inglés", "settingLanguage": "Idioma", - "blockUnknownLabel": "Bloquear conexiones desconocidas", "zoomLabel": "Zoom de la interfaz (afecta principalmente el tamaño del texto y de los botones)", "versionBuilddate": "Versión: %1 Basado en %2", "cwtchSettingsTitle": "Configuración de Cwtch", @@ -128,7 +140,6 @@ "password1Label": "Contraseña", "currentPasswordLabel": "Contraseña actual", "yourDisplayName": "Tu nombre de usuario", - "profileOnionLabel": "Envía esta dirección a los contactos con los que quieras conectarte", "noPasswordWarning": "No usar una contraseña para esta cuenta significa que los datos almacenados localmente no serán encriptados", "radioNoPassword": "Sin cifrado (sin contraseña)", "radioUsePassword": "Contraseña", @@ -141,11 +152,6 @@ "editProfileTitle": "Editar perfil", "addProfileTitle": "Agregar nuevo perfil", "deleteBtn": "Eliminar", - "unblockBtn": "Desbloquear contacto", - "dontSavePeerHistory": "Eliminar historial de contacto", - "savePeerHistoryDescription": "Determina si eliminar o no el historial asociado con el contacto.", - "savePeerHistory": "Guardar el historial con contacto", - "blockBtn": "Bloquear contacto", "saveBtn": "Guardar", "displayNameLabel": "Nombre de Usuario", "addressLabel": "Dirección", @@ -158,15 +164,12 @@ "acceptGroupInviteLabel": "¿Quieres aceptar la invitación a ", "newGroupBtn": "Crear un nuevo grupo de chat", "copiedClipboardNotification": "Copiado al portapapeles", - "peerOfflineMessage": "Este contacto no está en línea, los mensajes no pueden ser entregados en este momento", - "peerBlockedMessage": "Contacto bloqueado", "pendingLabel": "Pendiente", "acknowledgedLabel": "Reconocido", "couldNotSendMsgError": "No se pudo enviar este mensaje", "dmTooltip": "Haz clic para enviar mensaje directo", "membershipDescription": "La lista a continuación solo muestra los miembros que han enviado mensajes al grupo, no incluye a todos los usuarios dentro del grupo", "addListItemBtn": "Agregar artículo", - "peerNotOnline": "Este contacto no está en línea, la aplicación no puede ser usada en este momento", "searchList": "Buscar en la lista", "update": "Actualizar", "inviteBtn": "Invitar", @@ -192,7 +195,6 @@ "newBulletinLabel": "Nuevo Boletín", "joinGroup": "Únete al grupo", "createGroup": "Crear perfil", - "addPeer": "Agregar Contacto", "groupAddr": "Dirección", "invitation": "Invitación", "server": "Servidor", @@ -201,7 +203,6 @@ "peerAddress": "Dirección", "joinGroupTab": "Únete a un grupo", "createGroupTab": "Crear un grupo", - "addPeerTab": "Agregar Contacto", "createGroupBtn": "Crear", "defaultGroupName": "El Grupo Asombroso", "createGroupTitle": "Crear un grupo" diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 50bbf436..cc64f3c5 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,20 @@ { "@@locale": "fr", - "@@last_modified": "2021-07-14T23:49:07+02:00", + "@@last_modified": "2021-08-26T23:44:51+02:00", + "profileOnionLabel": "Envoyez cette adresse aux personnes avec lesquelles vous souhaitez entrer en contact.", + "addPeerTab": "Ajouter un pair", + "addPeer": "Ajouter un pair", + "peerNotOnline": "Le pair est hors ligne, les messages ne peuvent pas être remis pour le moment", + "peerBlockedMessage": "Le pair est bloqué", + "peerOfflineMessage": "Le pair est hors ligne, les messages ne peuvent pas être remis pour le moment", + "blockBtn": "Bloquer le pair", + "savePeerHistory": "Sauvegarder l'historique des pairs", + "savePeerHistoryDescription": "Détermine s'il faut ou non supprimer tout historique associé au pair.", + "dontSavePeerHistory": "Supprimer l'historique des pairs", + "unblockBtn": "Débloquer le pair", + "blockUnknownLabel": "Bloquer les pairs inconnus", + "blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings", + "networkStatusConnecting": "Se connecter au réseau et aux pairs...", "showMessageButton": "Afficher le message", "blockedMessageMessage": "Ce message provient d'un profil que vous avez bloqué.", "placeholderEnterMessage": "saisissez un message", @@ -84,7 +98,6 @@ "todoPlaceholder": "À faire...", "newConnectionPaneTitle": "Nouvelle connexion", "networkStatusOnline": "En ligne", - "networkStatusConnecting": "Se connecter au réseau et aux pairs...", "networkStatusAttemptingTor": "Tentative de connexion au réseau Tor", "networkStatusDisconnected": "Déconnecté d'Internet, vérifiez votre connexion", "viewGroupMembershipTooltip": "Afficher les membres du groupe", @@ -104,7 +117,6 @@ "localeFr": "Français", "localeEn": "Anglais", "settingLanguage": "Langue", - "blockUnknownLabel": "Bloquer les pairs inconnus", "zoomLabel": "Zoom de l'interface (affecte principalement la taille du texte et des boutons)", "versionBuilddate": "Version : %1 Construite le : %2", "cwtchSettingsTitle": "Préférences Cwtch", @@ -128,7 +140,6 @@ "password1Label": "Mot de passe", "currentPasswordLabel": "Mot de passe actuel", "yourDisplayName": "Pseudo", - "profileOnionLabel": "Envoyez cette adresse aux personnes avec lesquelles vous souhaitez entrer en contact.", "noPasswordWarning": "Ne pas utiliser de mot de passe sur ce compte signifie que toutes les données stockées localement ne seront pas chiffrées.", "radioNoPassword": "Non chiffré (pas de mot de passe)", "radioUsePassword": "Mot de passe", @@ -141,11 +152,6 @@ "editProfileTitle": "Modifier le profil", "addProfileTitle": "Ajouter un nouveau profil", "deleteBtn": "Effacer", - "unblockBtn": "Débloquer le pair", - "dontSavePeerHistory": "Supprimer l'historique des pairs", - "savePeerHistoryDescription": "Détermine s'il faut ou non supprimer tout historique associé au pair.", - "savePeerHistory": "Sauvegarder l'historique des pairs", - "blockBtn": "Bloquer le pair", "saveBtn": "Sauvegarder", "displayNameLabel": "Pseudo", "addressLabel": "Adresse", @@ -158,15 +164,12 @@ "acceptGroupInviteLabel": "Voulez-vous accepter l'invitation au groupe", "newGroupBtn": "Créer un nouveau groupe", "copiedClipboardNotification": "Copié dans le presse-papier", - "peerOfflineMessage": "Le pair est hors ligne, les messages ne peuvent pas être remis pour le moment", - "peerBlockedMessage": "Le pair est bloqué", "pendingLabel": "En attente", "acknowledgedLabel": "Accusé de réception", "couldNotSendMsgError": "Impossible d'envoyer ce message", "dmTooltip": "Envoyer un message privé", "membershipDescription": "Liste des utilisateurs ayant envoyés un ou plusieurs messages au groupe. Cette liste peut ne pas être représentatives de l'ensemble des membres du groupe.", "addListItemBtn": "Ajouter un élément", - "peerNotOnline": "Le pair est hors ligne, les messages ne peuvent pas être remis pour le moment", "searchList": "Liste de recherche", "update": "Mise à jour", "inviteBtn": "Invitation", @@ -192,7 +195,6 @@ "newBulletinLabel": "Nouveau bulletin", "joinGroup": "Rejoindre le groupe", "createGroup": "Créer un groupe", - "addPeer": "Ajouter un pair", "groupAddr": "Adresse", "invitation": "Invitation", "server": "Serveur", @@ -201,7 +203,6 @@ "peerAddress": "Adresse", "joinGroupTab": "Rejoindre un groupe", "createGroupTab": "Créer un groupe", - "addPeerTab": "Ajouter un pair", "createGroupBtn": "Créer", "defaultGroupName": "Un groupe génial", "createGroupTitle": "Créer un groupe" diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 9c9dc29d..26995b98 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1,6 +1,20 @@ { "@@locale": "it", - "@@last_modified": "2021-07-14T23:49:07+02:00", + "@@last_modified": "2021-08-26T23:44:51+02:00", + "profileOnionLabel": "Inviare questo indirizzo ai peer con cui si desidera connettersi", + "addPeerTab": "Aggiungi un peer", + "addPeer": "Aggiungi peer", + "peerNotOnline": "Il peer è offline. Le applicazioni non possono essere utilizzate in questo momento.", + "peerBlockedMessage": "Il peer è bloccato", + "peerOfflineMessage": "Il peer è offline, i messaggi non possono essere recapitati in questo momento", + "blockBtn": "Blocca il peer", + "savePeerHistory": "Salva cronologia peer", + "savePeerHistoryDescription": "Determina se eliminare o meno ogni cronologia eventualmente associata al peer.", + "dontSavePeerHistory": "Elimina cronologia dei peer", + "unblockBtn": "Sblocca il peer", + "blockUnknownLabel": "Blocca peer sconosciuti", + "blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings", + "networkStatusConnecting": "Connessione alla rete e ai peer ...", "showMessageButton": "Show Message", "blockedMessageMessage": "This message is from a profile you have blocked.", "placeholderEnterMessage": "Type a message...", @@ -84,7 +98,6 @@ "todoPlaceholder": "Da fare...", "newConnectionPaneTitle": "Nuova connessione", "networkStatusOnline": "Online", - "networkStatusConnecting": "Connessione alla rete e ai peer ...", "networkStatusAttemptingTor": "Tentativo di connessione alla rete Tor", "networkStatusDisconnected": "Disconnesso da Internet, controlla la tua connessione", "viewGroupMembershipTooltip": "Visualizza i membri del gruppo", @@ -104,7 +117,6 @@ "localeFr": "Francese", "localeEn": "Inglese", "settingLanguage": "Lingua", - "blockUnknownLabel": "Blocca peer sconosciuti", "zoomLabel": "Zoom dell'interfaccia (influisce principalmente sulle dimensioni del testo e dei pulsanti)", "versionBuilddate": "Versione: %1 Costruito il: %2", "cwtchSettingsTitle": "Impostazioni di Cwtch", @@ -128,7 +140,6 @@ "password1Label": "Password", "currentPasswordLabel": "Password corrente", "yourDisplayName": "Il tuo nome visualizzato", - "profileOnionLabel": "Inviare questo indirizzo ai peer con cui si desidera connettersi", "noPasswordWarning": "Non utilizzare una password su questo account significa che tutti i dati archiviati localmente non verranno criptati", "radioNoPassword": "Non criptato (senza password)", "radioUsePassword": "Password", @@ -141,11 +152,6 @@ "editProfileTitle": "Modifica profilo", "addProfileTitle": "Aggiungi nuovo profilo", "deleteBtn": "Elimina", - "unblockBtn": "Sblocca il peer", - "dontSavePeerHistory": "Elimina cronologia dei peer", - "savePeerHistoryDescription": "Determina se eliminare o meno ogni cronologia eventualmente associata al peer.", - "savePeerHistory": "Salva cronologia peer", - "blockBtn": "Blocca il peer", "saveBtn": "Salva", "displayNameLabel": "Nome visualizzato", "addressLabel": "Indirizzo", @@ -158,15 +164,12 @@ "acceptGroupInviteLabel": "Vuoi accettare l'invito a", "newGroupBtn": "Crea un nuovo gruppo", "copiedClipboardNotification": "Copiato negli Appunti", - "peerOfflineMessage": "Il peer è offline, i messaggi non possono essere recapitati in questo momento", - "peerBlockedMessage": "Il peer è bloccato", "pendingLabel": "In corso", "acknowledgedLabel": "Riconosciuto", "couldNotSendMsgError": "Impossibile inviare questo messaggio", "dmTooltip": "Clicca per inviare un Messagio Diretto", "membershipDescription": "Di seguito è riportato un elenco di utenti che hanno inviato messaggi al gruppo. Questo elenco potrebbe non corrispondere a tutti gli utenti che hanno accesso al gruppo.", "addListItemBtn": "Aggiungi elemento", - "peerNotOnline": "Il peer è offline. Le applicazioni non possono essere utilizzate in questo momento.", "searchList": "Cerca nella lista", "update": "Aggiornamento", "inviteBtn": "Invitare", @@ -192,7 +195,6 @@ "newBulletinLabel": "Nuovo bollettino", "joinGroup": "Unisciti al gruppo", "createGroup": "Crea un gruppo", - "addPeer": "Aggiungi peer", "groupAddr": "Indirizzo", "invitation": "Invito", "server": "Server", @@ -201,7 +203,6 @@ "peerAddress": "Indirizzo", "joinGroupTab": "Unisciti a un gruppo", "createGroupTab": "Crea un gruppo", - "addPeerTab": "Aggiungi un peer", "createGroupBtn": "Crea", "defaultGroupName": "Gruppo fantastico", "createGroupTitle": "Crea un gruppo" diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 28d65c94..6f7c38f2 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,6 +1,20 @@ { "@@locale": "pt", - "@@last_modified": "2021-07-14T23:49:07+02:00", + "@@last_modified": "2021-08-26T23:44:51+02:00", + "profileOnionLabel": "Send this address to contacts you want to connect with", + "addPeerTab": "Add a contact", + "addPeer": "Add Contact", + "peerNotOnline": "Contact is offline. Applications cannot be used right now.", + "peerBlockedMessage": "Contact is blocked", + "peerOfflineMessage": "Contact is offline, messages can't be delivered right now", + "blockBtn": "Block Contact", + "savePeerHistory": "Save History", + "savePeerHistoryDescription": "Determines whether or not to delete any history associated with the contact.", + "dontSavePeerHistory": "Delete History", + "unblockBtn": "Unblock Contact", + "blockUnknownLabel": "Block Unknown Contacts", + "blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings", + "networkStatusConnecting": "Connecting to network and contacts...", "showMessageButton": "Show Message", "blockedMessageMessage": "This message is from a profile you have blocked.", "placeholderEnterMessage": "Type a message...", @@ -84,7 +98,6 @@ "todoPlaceholder": "Afazer…", "newConnectionPaneTitle": "New Connection", "networkStatusOnline": "Online", - "networkStatusConnecting": "Connecting to network and peers...", "networkStatusAttemptingTor": "Attempting to connect to Tor network", "networkStatusDisconnected": "Disconnected from the internet, check your connection", "viewGroupMembershipTooltip": "View Group Membership", @@ -104,7 +117,6 @@ "localeFr": "Frances", "localeEn": "English", "settingLanguage": "Language", - "blockUnknownLabel": "Block Unknown Peers", "zoomLabel": "Zoom da interface (afeta principalmente tamanho de texto e botões)", "versionBuilddate": "Version: %1 Built on: %2", "cwtchSettingsTitle": "Configurações do Cwtch", @@ -128,7 +140,6 @@ "password1Label": "Password", "currentPasswordLabel": "Current Password", "yourDisplayName": "Your Display Name", - "profileOnionLabel": "Send this address to peers you want to connect with", "noPasswordWarning": "Not using a password on this account means that all data stored locally will not be encrypted", "radioNoPassword": "Unencrypted (No password)", "radioUsePassword": "Password", @@ -141,11 +152,6 @@ "editProfileTitle": "Edit Profile", "addProfileTitle": "Add new profile", "deleteBtn": "Deletar", - "unblockBtn": "Unblock Peer", - "dontSavePeerHistory": "Delete Peer History", - "savePeerHistoryDescription": "Determines whether or not to delete any history associated with the peer.", - "savePeerHistory": "Save Peer History", - "blockBtn": "Block Peer", "saveBtn": "Salvar", "displayNameLabel": "Nome de Exibição", "addressLabel": "Endereço", @@ -158,15 +164,12 @@ "acceptGroupInviteLabel": "Você quer aceitar o convite para", "newGroupBtn": "Criar novo grupo", "copiedClipboardNotification": "Copiado", - "peerOfflineMessage": "Peer is offline, messages can't be delivered right now", - "peerBlockedMessage": "Peer is blocked", "pendingLabel": "Pendente", "acknowledgedLabel": "Confirmada", "couldNotSendMsgError": "Não deu para enviar esta mensagem", "dmTooltip": "Clique para DM", "membershipDescription": "A lista abaixo é de usuários que enviaram mensagens ao grupo. Essa lista pode não refletir todos os usuários que têm acesso ao grupo.", "addListItemBtn": "Add Item", - "peerNotOnline": "Peer is Offline. Applications cannot be used right now.", "searchList": "Search List", "update": "Update", "inviteBtn": "Convidar", @@ -192,7 +195,6 @@ "newBulletinLabel": "Novo Boletim", "joinGroup": "Join group", "createGroup": "Create group", - "addPeer": "Add Peer", "groupAddr": "Address", "invitation": "Invitation", "server": "Server", @@ -201,7 +203,6 @@ "peerAddress": "Address", "joinGroupTab": "Join a group", "createGroupTab": "Create a group", - "addPeerTab": "Add a peer", "createGroupBtn": "Criar", "defaultGroupName": "Grupo incrível", "createGroupTitle": "Criar Grupo" diff --git a/lib/views/contactsview.dart b/lib/views/contactsview.dart index 5bd3897d..297fc0d5 100644 --- a/lib/views/contactsview.dart +++ b/lib/views/contactsview.dart @@ -87,18 +87,7 @@ class _ContactsViewState extends State { child: Text("%1 » %2".replaceAll("%1", Provider.of(context).nickname).replaceAll("%2", AppLocalizations.of(context)!.titleManageContacts), overflow: TextOverflow.ellipsis, style: TextStyle(color: Provider.of(context).current().mainTextColor()))), ])), - actions: [ - IconButton(icon: TorIcon(), onPressed: _pushTorStatus), - IconButton( - // need both conditions for displaying initial empty textfield and also allowing filters to be cleared if this widget gets lost/reset - icon: Icon(showSearchBar || Provider.of(context).isFiltered ? Icons.search_off : Icons.search), - onPressed: () { - Provider.of(context, listen: false).filter = ""; - setState(() { - showSearchBar = !showSearchBar; - }); - }) - ], + actions: getActions(context), ), floatingActionButton: FloatingActionButton( onPressed: _pushAddContact, @@ -108,6 +97,26 @@ class _ContactsViewState extends State { body: showSearchBar || Provider.of(context).isFiltered ? _buildFilterable() : _buildContactList()); } + List getActions(context) { + var actions = List.empty(growable: true); + if (Provider.of(context).blockUnknownConnections) { + actions.add(Tooltip(message: AppLocalizations.of(context)!.blockUnknownConnectionsEnabledDescription, child: Icon(CwtchIcons.block_unknown))); + } + actions.add( + IconButton(icon: TorIcon(), onPressed: _pushTorStatus), + ); + actions.add(IconButton( + // need both conditions for displaying initial empty textfield and also allowing filters to be cleared if this widget gets lost/reset + icon: Icon(showSearchBar || Provider.of(context).isFiltered ? Icons.search_off : Icons.search), + onPressed: () { + Provider.of(context, listen: false).filter = ""; + setState(() { + showSearchBar = !showSearchBar; + }); + })); + return actions; + } + Widget _buildFilterable() { Widget txtfield = CwtchTextField( controller: ctrlrFilter, diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index 8ee6196c..5528d97a 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -78,9 +78,13 @@ class _MessageViewState extends State { return WillPopScope( onWillPop: _onWillPop, child: Scaffold( - floatingActionButton: appState.unreadMessagesBelow ? FloatingActionButton(child: Icon(Icons.arrow_downward), onPressed: (){ - scrollController.scrollTo(index: 0, duration: Duration(milliseconds: 600)); - }) : null, + floatingActionButton: appState.unreadMessagesBelow + ? FloatingActionButton( + child: Icon(Icons.arrow_downward), + onPressed: () { + scrollController.scrollTo(index: 0, duration: Duration(milliseconds: 600)); + }) + : null, appBar: AppBar( // setting leading to null makes it do the default behaviour; container() hides it leading: Provider.of(context).uiColumns(appState.isLandscape(context)).length > 1 ? Container() : null, @@ -105,6 +109,12 @@ class _MessageViewState extends State { //IconButton(icon: Icon(Icons.chat), onPressed: _pushContactSettings), //IconButton(icon: Icon(Icons.list), onPressed: _pushContactSettings), //IconButton(icon: Icon(Icons.push_pin), onPressed: _pushContactSettings), + IconButton( + icon: Icon(CwtchIcons.send_invite, size: 24), + tooltip: AppLocalizations.of(context)!.sendInvite, + onPressed: () { + _modalSendInvitation(context); + }), IconButton( icon: Provider.of(context, listen: false).isGroup == true ? Icon(CwtchIcons.group_settings_24px) : Icon(CwtchIcons.peer_settings_24px), tooltip: AppLocalizations.of(context)!.conversationSettings, @@ -200,43 +210,37 @@ class _MessageViewState extends State { child: Row( children: [ Expanded( - child: Container( - decoration: BoxDecoration(border: Border(top: BorderSide(color: Provider.of(context).theme.defaultButtonActiveColor()))), - child: RawKeyboardListener( - focusNode: FocusNode(), - onKey: handleKeyPress, - child: TextFormField( - key: Key('txtCompose'), - controller: ctrlrCompose, - focusNode: focusNode, - autofocus: !Platform.isAndroid, - textInputAction: TextInputAction.newline, - keyboardType: TextInputType.multiline, - enableIMEPersonalizedLearning: false, - minLines: 1, - maxLines: null, - onFieldSubmitted: _sendMessage, - enabled: !isOffline, - decoration: InputDecoration( - hintText: isOffline ? "" : AppLocalizations.of(context)!.placeholderEnterMessage, - hintStyle: TextStyle(color: Provider.of(context).theme.altTextColor()), - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabled: true, - prefixIcon: IconButton( - icon: Icon(CwtchIcons.send_invite, size: 24, color: Provider.of(context).theme.mainTextColor()), - tooltip: AppLocalizations.of(context)!.sendInvite, - enableFeedback: true, - splashColor: Provider.of(context).theme.defaultButtonActiveColor(), - hoverColor: Provider.of(context).theme.defaultButtonActiveColor(), - onPressed: () => _modalSendInvitation(context)), - suffixIcon: IconButton( - icon: Icon(CwtchIcons.send_24px, size: 24, color: Provider.of(context).theme.mainTextColor()), - tooltip: AppLocalizations.of(context)!.sendMessage, - onPressed: isOffline ? null : _sendMessage, - ), - )))), - ), + child: Container( + decoration: BoxDecoration(border: Border(top: BorderSide(color: Provider.of(context).theme.defaultButtonActiveColor()))), + child: RawKeyboardListener( + focusNode: FocusNode(), + onKey: handleKeyPress, + child: Padding( + padding: EdgeInsets.all(8), + child: TextFormField( + key: Key('txtCompose'), + controller: ctrlrCompose, + focusNode: focusNode, + autofocus: !Platform.isAndroid, + textInputAction: TextInputAction.newline, + keyboardType: TextInputType.multiline, + enableIMEPersonalizedLearning: false, + minLines: 1, + maxLines: null, + onFieldSubmitted: _sendMessage, + enabled: !isOffline, + decoration: InputDecoration( + hintText: isOffline ? "" : AppLocalizations.of(context)!.placeholderEnterMessage, + hintStyle: TextStyle(color: Provider.of(context).theme.altTextColor()), + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabled: true, + suffixIcon: ElevatedButton( + style: ElevatedButton.styleFrom(primary: Provider.of(context).theme.defaultButtonColor()), + child: Icon(CwtchIcons.send_24px, size: 24, color: Provider.of(context).theme.mainTextColor()), + onPressed: isOffline ? null : _sendMessage, + ))), + )))), ], ), ); diff --git a/lib/widgets/messagerow.dart b/lib/widgets/messagerow.dart index 8a94837c..df9d3568 100644 --- a/lib/widgets/messagerow.dart +++ b/lib/widgets/messagerow.dart @@ -5,6 +5,7 @@ import 'package:cwtch/models/message.dart'; import 'package:cwtch/views/contactsview.dart'; import 'package:flutter/material.dart'; import 'package:cwtch/widgets/profileimage.dart'; +import 'package:flutter/physics.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -20,9 +21,31 @@ class MessageRow extends StatefulWidget { MessageRowState createState() => MessageRowState(); } -class MessageRowState extends State { +class MessageRowState extends State with SingleTickerProviderStateMixin { bool showMenu = false; bool showBlockedMessage = false; + late AnimationController _controller; + late Animation _animation; + late Alignment _dragAlignment = Alignment.center; + Alignment _dragAffinity = Alignment.center; + + @override + void initState() { + super.initState(); + _controller = AnimationController(vsync: this); + _controller.addListener(() { + setState(() { + _dragAlignment = _animation.value; + }); + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { var fromMe = Provider.of(context).senderHandle == Provider.of(context).onion; @@ -30,6 +53,12 @@ class MessageRowState extends State { var isBlocked = isContact ? Provider.of(context).contactList.getContact(Provider.of(context).senderHandle)!.isBlocked : false; var actualMessage = Flexible(flex: 3, fit: FlexFit.loose, child: widget.child); + _dragAffinity = fromMe ? Alignment.centerRight : Alignment.centerLeft; + + if (_dragAlignment == Alignment.center) { + _dragAlignment = fromMe ? Alignment.centerRight : Alignment.centerLeft; + } + var senderDisplayStr = ""; if (!fromMe) { ContactInfoState? contact = Provider.of(context).contactList.getContact(Provider.of(context).senderHandle); @@ -52,7 +81,7 @@ class MessageRowState extends State { Provider.of(context, listen: false).selectedIndex = Provider.of(context, listen: false).messageIndex; }, icon: Icon(Icons.reply, color: Provider.of(context).theme.dropShadowColor()))); - Widget wdgSpacer = Expanded(child: SizedBox(width: 60, height: 10)); + Widget wdgSpacer = Flexible(child: SizedBox(width: 60, height: 10)); var widgetRow = []; if (fromMe) { @@ -131,10 +160,9 @@ class MessageRowState extends State { wdgSpacer, ]; } - + var size = MediaQuery.of(context).size; return MouseRegion( // For desktop... - onHover: (event) { setState(() { this.showMenu = true; @@ -146,14 +174,55 @@ class MessageRowState extends State { }); }, child: GestureDetector( + onPanUpdate: (details) { + setState(() { + _dragAlignment += Alignment( + details.delta.dx / (size.width * 0.5), + 0, + ); + }); + }, + onPanDown: (details) { + _controller.stop(); + }, + onPanEnd: (details) { + _runAnimation(details.velocity.pixelsPerSecond, size); + Provider.of(context, listen: false).selectedIndex = Provider.of(context, listen: false).messageIndex; + }, + child: Padding( + padding: EdgeInsets.all(2), + child: Align( + widthFactor: 1, + alignment: _dragAlignment, + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: widgetRow, + ))))); + } - // Swipe to quote on Android - onHorizontalDragEnd: Platform.isAndroid - ? (details) { - Provider.of(context, listen: false).selectedIndex = Provider.of(context, listen: false).messageIndex; - } - : null, - child: Padding(padding: EdgeInsets.all(2), child: Row(mainAxisAlignment: fromMe ? MainAxisAlignment.end : MainAxisAlignment.start, children: widgetRow)))); + void _runAnimation(Offset pixelsPerSecond, Size size) { + _animation = _controller.drive( + AlignmentTween( + begin: _dragAlignment, + end: _dragAffinity, + ), + ); + // Calculate the velocity relative to the unit interval, [0,1], + // used by the animation controller. + final unitsPerSecondX = pixelsPerSecond.dx / size.width; + final unitsPerSecondY = pixelsPerSecond.dy / size.height; + final unitsPerSecond = Offset(unitsPerSecondX, unitsPerSecondY); + final unitVelocity = unitsPerSecond.distance; + + const spring = SpringDescription( + mass: 30, + stiffness: 1, + damping: 1, + ); + + final simulation = SpringSimulation(spring, 0, 1, -unitVelocity); + _controller.animateWith(simulation); } void _btnGoto() {