Merge pull request 'fixes' (#588) from fixes into trunk
continuous-integration/drone/push Build is pending Details

Reviewed-on: #588
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
This commit is contained in:
Sarah Jamie Lewis 2022-12-06 00:06:19 +00:00
commit faba13d435
33 changed files with 250 additions and 49 deletions

View File

@ -1 +1 @@
2022-11-30-14-27-v1.10.0 2022-12-05-13-24-v1.10.0-6-g0d05a07

View File

@ -1 +1 @@
2022-11-30-19-28-v1.10.0 2022-12-05-18-24-v1.10.0-6-g0d05a07

View File

@ -364,6 +364,14 @@ class MainActivity: FlutterActivity() {
val pass: String = call.argument("pass") ?: "" val pass: String = call.argument("pass") ?: ""
Cwtch.loadProfiles(pass) Cwtch.loadProfiles(pass)
} }
"ActivatePeerEngine" -> {
val profile: String = call.argument("profile") ?: ""
Cwtch.activatePeerEngine(profile)
}
"DeactivatePeerEngine" -> {
val profile: String = call.argument("profile") ?: ""
Cwtch.deactivatePeerEngine(profile)
}
"ChangePassword" -> { "ChangePassword" -> {
val profile: String = call.argument("ProfileOnion") ?: "" val profile: String = call.argument("ProfileOnion") ?: ""
val pass: String = call.argument("OldPass") ?: "" val pass: String = call.argument("OldPass") ?: ""

View File

@ -12,6 +12,12 @@ abstract class Cwtch {
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void CreateProfile(String nick, String pass); void CreateProfile(String nick, String pass);
// ignore: non_constant_identifier_names
void ActivatePeerEngine(String profile);
// ignore: non_constant_identifier_names
void DeactivatePeerEngine(String profile);
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void LoadProfiles(String pass); void LoadProfiles(String pass);
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names

View File

@ -72,7 +72,7 @@ class CwtchNotifier {
} }
EnvironmentConfig.debugLog("NewPeer $data"); EnvironmentConfig.debugLog("NewPeer $data");
// if tag != v1-defaultPassword then it is either encrypted OR it is an unencrypted account created during pre-beta... // if tag != v1-defaultPassword then it is either encrypted OR it is an unencrypted account created during pre-beta...
profileCN.add(data["Identity"], data["name"], data["picture"], data["defaultPicture"], data["ContactsJson"], data["ServerList"], data["Online"] == "true", data["tag"] != "v1-defaultPassword"); profileCN.add(data["Identity"], data["name"], data["picture"], data["defaultPicture"], data["ContactsJson"], data["ServerList"], data["Online"] == "true", data["autostart"] == "true", data["tag"] != "v1-defaultPassword");
break; break;
case "ContactCreated": case "ContactCreated":
EnvironmentConfig.debugLog("ContactCreated $data"); EnvironmentConfig.debugLog("ContactCreated $data");

View File

@ -301,6 +301,24 @@ class CwtchFfi implements Cwtch {
malloc.free(ut8pass); malloc.free(ut8pass);
} }
// ignore: non_constant_identifier_names
void ActivatePeerEngine(String profile) {
var activatePeerEngineC = library.lookup<NativeFunction<string_to_void_function>>("c_ActivatePeerEngine");
final ActivatePeerEngine = activatePeerEngineC.asFunction<StringFn>();
final ut8profile = profile.toNativeUtf8();
ActivatePeerEngine(ut8profile, ut8profile.length);
malloc.free(ut8profile);
}
// ignore: non_constant_identifier_names
void DeactivatePeerEngine(String profile) {
var deactivatePeerEngineC = library.lookup<NativeFunction<string_to_void_function>>("c_ActivatePeerEngine");
final DeactivatePeerEngine = deactivatePeerEngineC.asFunction<StringFn>();
final ut8profile = profile.toNativeUtf8();
DeactivatePeerEngine(ut8profile, ut8profile.length);
malloc.free(ut8profile);
}
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void LoadProfiles(String pass) { void LoadProfiles(String pass) {
var loadProfileC = library.lookup<NativeFunction<string_to_void_function>>("c_LoadProfiles"); var loadProfileC = library.lookup<NativeFunction<string_to_void_function>>("c_LoadProfiles");

View File

@ -75,6 +75,16 @@ class CwtchGomobile implements Cwtch {
cwtchPlatform.invokeMethod("CreateProfile", {"nick": nick, "pass": pass}); cwtchPlatform.invokeMethod("CreateProfile", {"nick": nick, "pass": pass});
} }
// ignore: non_constant_identifier_names
void ActivatePeerEngine(String profile) {
cwtchPlatform.invokeMethod("ActivatePeerEngine", {"profile": profile});
}
// ignore: non_constant_identifier_names
void DeactivatePeerEngine(String profile) {
cwtchPlatform.invokeMethod("DeactivatePeerEngine", {"profile": profile});
}
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void LoadProfiles(String pass) { void LoadProfiles(String pass) {
cwtchPlatform.invokeMethod("LoadProfiles", {"pass": pass}); cwtchPlatform.invokeMethod("LoadProfiles", {"pass": pass});

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "cy", "@@locale": "cy",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "da", "@@locale": "da",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,14 +1,18 @@
{ {
"@@locale": "de", "@@locale": "de",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "profileEnabledDescription": "Start or stop the profile",
"localeNl": "Dutch \/ Dutch", "profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "profileEnabled": "Enable",
"enableExperimentQRCode": "QR Codes", "profileAutostartLabel": "Autostart",
"shareMenuQRCode": "Show QR Code", "acquiringTicketsFromServer": "Antispam-Herausforderung meistern",
"shareProfileMenuTooltop": "Share profile via...", "acquiredTicketsFromServer": "Antispam-Herausforderung abgeschlossen",
"acquiredTicketsFromServer": "Antispam Challenge Complete", "shareProfileMenuTooltop": "Profil teilen über...",
"acquiringTicketsFromServer": "Performing Antispam Challenge", "localeNl": "Niederländisch \/ Nederlands",
"localePtBr": "Brasilianisches Portugiesisch \/ Português do Brasil",
"shareMenuQRCode": "QR-Code anzeigen",
"enableExperimentQRCode": "QR-Codes",
"experimentQRCodeDescription": "QR-Code-Unterstützung ermöglicht den Austausch von Daten (z. B. Profilidentität) über QR-Codes",
"localeIt": "Italienisch \/ Italiano", "localeIt": "Italienisch \/ Italiano",
"errorDownloadDirectoryDoesNotExist": "Die Dateifreigabe kann nicht aktiviert werden, da der Download-Ordner nicht festgelegt wurde oder auf einen nicht vorhandenen Ordner festgelegt ist.", "errorDownloadDirectoryDoesNotExist": "Die Dateifreigabe kann nicht aktiviert werden, da der Download-Ordner nicht festgelegt wurde oder auf einen nicht vorhandenen Ordner festgelegt ist.",
"localeTr": "Türkisch \/ Türk", "localeTr": "Türkisch \/ Türk",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "el", "@@locale": "el",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "en", "@@locale": "en",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "es", "@@locale": "es",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,14 +1,18 @@
{ {
"@@locale": "fr", "@@locale": "fr",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "profileEnabledDescription": "Start or stop the profile",
"localeNl": "Dutch \/ Dutch", "profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"shareProfileMenuTooltop": "Partager le profil via...",
"shareMenuQRCode": "Afficher le QR code",
"localePtBr": "Portugais du Brésil \/ Português do Brasil",
"localeNl": "néerlandais \/ néerlandais",
"experimentQRCodeDescription": "La prise en charge des QR codes permet de partager des données (telles que l'identité du profil) par des QR codes \n",
"enableExperimentQRCode": "QR Codes", "enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code", "acquiringTicketsFromServer": "Réaliser un défi anti-spam",
"shareProfileMenuTooltop": "Share profile via...", "acquiredTicketsFromServer": "Défi anti-spam terminé",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Le partage de fichiers ne peut pas être activé car le dossier de téléchargement n'a pas été défini ou est défini sur un dossier qui n'existe pas.", "errorDownloadDirectoryDoesNotExist": "Le partage de fichiers ne peut pas être activé car le dossier de téléchargement n'a pas été défini ou est défini sur un dossier qui n'existe pas.",
"localeIt": "italien \/ italien", "localeIt": "italien \/ italien",
"localeTr": "Turc \/ Türk", "localeTr": "Turc \/ Türk",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "it", "@@locale": "it",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"tooltipPinConversation": "Aggiungi la conversazione in cima alla lista \"Conversazioni\"", "tooltipPinConversation": "Aggiungi la conversazione in cima alla lista \"Conversazioni\"",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "lb", "@@locale": "lb",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,7 +1,11 @@
{ {
"@@locale": "nl", "@@locale": "nl",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Braziliaans Portugees \/ Português do Brasil",
"acquiredTicketsFromServer": "Anti-spam uitdaging voltooid", "acquiredTicketsFromServer": "Anti-spam uitdaging voltooid",
"acquiringTicketsFromServer": "Anti-spam uitdaging uitvoeren", "acquiringTicketsFromServer": "Anti-spam uitdaging uitvoeren",
"acknowledgedLabel": "Erkend", "acknowledgedLabel": "Erkend",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "no", "@@locale": "no",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "pl", "@@locale": "pl",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "pt", "@@locale": "pt",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "pt_BR", "@@locale": "pt_BR",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Português do Brasil \/ Português do Brasil", "localePtBr": "Português do Brasil \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "O suporte a QR Code permite o compartilhamento de dados (como identidade de perfil) através dos QR Codes", "experimentQRCodeDescription": "O suporte a QR Code permite o compartilhamento de dados (como identidade de perfil) através dos QR Codes",
@ -289,7 +293,7 @@
"password1Label": "Senha", "password1Label": "Senha",
"currentPasswordLabel": "Senha Atual", "currentPasswordLabel": "Senha Atual",
"yourDisplayName": "Seu nome de exibição", "yourDisplayName": "Seu nome de exibição",
"profileOnionLabel": "Envie este endereço para contatos que você deseja se conectar", "profileOnionLabel": "Send this address to contacts you want to connect with",
"noPasswordWarning": "Não usar uma senha nesta conta significa que todos os dados armazenados localmente não serão criptografados", "noPasswordWarning": "Não usar uma senha nesta conta significa que todos os dados armazenados localmente não serão criptografados",
"radioNoPassword": "Descriptografado (Sem senha)", "radioNoPassword": "Descriptografado (Sem senha)",
"radioUsePassword": "Senha", "radioUsePassword": "Senha",
@ -299,13 +303,13 @@
"profileName": "Nome de exibição", "profileName": "Nome de exibição",
"editProfileTitle": "Editar perfil", "editProfileTitle": "Editar perfil",
"addProfileTitle": "Adicionar novo perfil", "addProfileTitle": "Adicionar novo perfil",
"deleteBtn": "Deletar", "deleteBtn": "Delete",
"unblockBtn": "Desbloquear Contato", "unblockBtn": "Desbloquear Contato",
"dontSavePeerHistory": "Deletar histórico", "dontSavePeerHistory": "Deletar histórico",
"savePeerHistoryDescription": "Determina se deve excluir algum histórico associado com o contato.", "savePeerHistoryDescription": "Determina se deve excluir algum histórico associado com o contato.",
"savePeerHistory": "Salvar histórico", "savePeerHistory": "Salvar histórico",
"blockBtn": "Bloquear Contato", "blockBtn": "Bloquear Contato",
"saveBtn": "Salvar", "saveBtn": "Save",
"displayNameLabel": "Nome de Exibição", "displayNameLabel": "Nome de Exibição",
"copiedToClipboardNotification": "Copiado", "copiedToClipboardNotification": "Copiado",
"addressLabel": "Endereço", "addressLabel": "Endereço",
@ -339,7 +343,7 @@
"serverConnectivityConnected": "Servidor Conectado", "serverConnectivityConnected": "Servidor Conectado",
"serverInfo": "Informação do Servidor", "serverInfo": "Informação do Servidor",
"invitationLabel": "Convite", "invitationLabel": "Convite",
"serverLabel": "Servidor", "serverLabel": "Server",
"search": "Pesquisar...", "search": "Pesquisar...",
"blocked": "Bloqueado", "blocked": "Bloqueado",
"pasteAddressToAddContact": "… cole um endereço aqui para adicionar um contato…", "pasteAddressToAddContact": "… cole um endereço aqui para adicionar um contato…",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "ro", "@@locale": "ro",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,6 +1,10 @@
{ {
"@@locale": "ru", "@@locale": "ru",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch", "localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes", "experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",

View File

@ -1,7 +1,11 @@
{ {
"@@locale": "tr", "@@locale": "tr",
"@@last_modified": "2022-11-18T15:19:11+01:00", "@@last_modified": "2022-12-05T21:06:07+01:00",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil", "profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brezilya Portekizcesi \/ Português do Brasil",
"experimentQRCodeDescription": "QR Kod desteği profil kimliği gibi verilerin QR Kodla paylaşılmasına olanak tanır", "experimentQRCodeDescription": "QR Kod desteği profil kimliği gibi verilerin QR Kodla paylaşılmasına olanak tanır",
"acquiringTicketsFromServer": "Spame Karşı Sınama", "acquiringTicketsFromServer": "Spame Karşı Sınama",
"acquiredTicketsFromServer": "Spame Karşı Sınama Tamamlandı", "acquiredTicketsFromServer": "Spame Karşı Sınama Tamamlandı",

View File

@ -26,6 +26,9 @@ class ProfileInfoState extends ChangeNotifier {
// in the constructor if the profile is encrypted with the defacto password. // in the constructor if the profile is encrypted with the defacto password.
bool _encrypted = true; bool _encrypted = true;
bool _autostart = true;
bool _enabled = false;
ProfileInfoState({ ProfileInfoState({
required this.onion, required this.onion,
nickname = "", nickname = "",
@ -35,6 +38,7 @@ class ProfileInfoState extends ChangeNotifier {
contactsJson = "", contactsJson = "",
serversJson = "", serversJson = "",
online = false, online = false,
autostart = true,
encrypted = true, encrypted = true,
String, String,
}) { }) {
@ -43,6 +47,11 @@ class ProfileInfoState extends ChangeNotifier {
this._defaultImagePath = defaultImagePath; this._defaultImagePath = defaultImagePath;
this._unreadMessages = unreadMessages; this._unreadMessages = unreadMessages;
this._online = online; this._online = online;
this._enabled = _enabled;
this._autostart = autostart;
if (autostart) {
this._enabled = true;
}
this._encrypted = encrypted; this._encrypted = encrypted;
_contacts.connectServers(this._servers); _contacts.connectServers(this._servers);
@ -130,6 +139,20 @@ class ProfileInfoState extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
bool get enabled => this._enabled;
set enabled(bool newVal) {
this._enabled = newVal;
notifyListeners();
}
bool get autostart => this._autostart;
set autostart(bool newVal) {
this._autostart = newVal;
notifyListeners();
}
String get defaultImagePath => this._defaultImagePath; String get defaultImagePath => this._defaultImagePath;
set defaultImagePath(String newVal) { set defaultImagePath(String newVal) {

View File

@ -1,3 +1,5 @@
import 'dart:ui';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -7,11 +9,11 @@ class ProfileListState extends ChangeNotifier {
List<ProfileInfoState> _profiles = []; List<ProfileInfoState> _profiles = [];
int get num => _profiles.length; int get num => _profiles.length;
void add(String onion, String name, String picture, String defaultPicture, String contactsJson, String serverJson, bool online, bool encrypted) { void add(String onion, String name, String picture, String defaultPicture, String contactsJson, String serverJson, bool online, bool autostart, bool encrypted) {
var idx = _profiles.indexWhere((element) => element.onion == onion); var idx = _profiles.indexWhere((element) => element.onion == onion);
if (idx == -1) { if (idx == -1) {
_profiles.add(ProfileInfoState( _profiles.add(ProfileInfoState(
onion: onion, nickname: name, imagePath: picture, defaultImagePath: defaultPicture, contactsJson: contactsJson, serversJson: serverJson, online: online, encrypted: encrypted)); onion: onion, nickname: name, imagePath: picture, defaultImagePath: defaultPicture, contactsJson: contactsJson, serversJson: serverJson, online: online, autostart: autostart, encrypted: encrypted));
} else { } else {
_profiles[idx].updateFrom(onion, name, picture, contactsJson, serverJson, online); _profiles[idx].updateFrom(onion, name, picture, contactsJson, serverJson, online);
} }

View File

@ -169,6 +169,45 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
) )
])), ])),
// We only allow setting password types on profile creation // We only allow setting password types on profile creation
// Enabled
Visibility(
visible: Provider.of<ProfileInfoState>(context).onion.isNotEmpty,
child: SwitchListTile(
title: Text(AppLocalizations.of(context)!.profileEnabled, style: TextStyle(color: Provider.of<Settings>(context).current().mainTextColor)),
subtitle: Text(AppLocalizations.of(context)!.profileEnabledDescription),
value: Provider.of<ProfileInfoState>(context).enabled,
onChanged: (bool value) {
Provider.of<ProfileInfoState>(context).enabled = value;
if (value) {
Provider.of<FlwtchState>(context, listen: false).cwtch.ActivatePeerEngine(Provider.of<ProfileInfoState>(context).onion);
} else {
Provider.of<FlwtchState>(context, listen: false).cwtch.DeactivatePeerEngine(Provider.of<ProfileInfoState>(context).onion);
}
},
activeTrackColor: Provider.of<Settings>(context).theme.defaultButtonColor,
inactiveTrackColor: Provider.of<Settings>(context).theme.defaultButtonDisabledColor,
secondary: Icon(CwtchIcons.negative_heart_24px, color: Provider.of<Settings>(context).current().mainTextColor),
)),
// Auto start
SwitchListTile(
title: Text(AppLocalizations.of(context)!.profileAutostartLabel, style: TextStyle(color: Provider.of<Settings>(context).current().mainTextColor)),
subtitle: Text(AppLocalizations.of(context)!.profileAutostartDescription),
value: Provider.of<ProfileInfoState>(context).autostart,
onChanged: (bool value) {
Provider.of<ProfileInfoState>(context).autostart = value;
if (!Provider.of<ProfileInfoState>(context).onion.isEmpty) {
Provider.of<FlwtchState>(context, listen: false).cwtch.SetProfileAttribute(Provider.of<ProfileInfoState>(context).onion, "profile.autostart", value ? "true" : "false");
}
},
activeTrackColor: Provider.of<Settings>(context).theme.defaultButtonColor,
inactiveTrackColor: Provider.of<Settings>(context).theme.defaultButtonDisabledColor,
secondary: Icon(CwtchIcons.favorite_24dp, color: Provider.of<Settings>(context).current().mainTextColor),
),
Visibility( Visibility(
visible: Provider.of<ProfileInfoState>(context).onion.isEmpty, visible: Provider.of<ProfileInfoState>(context).onion.isEmpty,
child: SizedBox( child: SizedBox(
@ -339,7 +378,7 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
showAlertDialog(context); showAlertDialog(context);
}, },
icon: Icon(Icons.delete_forever), icon: Icon(Icons.delete_forever),
label: Text(AppLocalizations.of(context)!.deleteBtn), label: Text(AppLocalizations.of(context)!.deleteBtn, style: TextStyle(color: Provider.of<Settings>(context).theme.defaultButtonActiveColor)),
))) )))
])))))); ]))))));
}); });
@ -358,6 +397,7 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
// match (and are provided if the user has requested an encrypted profile). // match (and are provided if the user has requested an encrypted profile).
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate()) {
if (Provider.of<ProfileInfoState>(context, listen: false).onion.isEmpty) { if (Provider.of<ProfileInfoState>(context, listen: false).onion.isEmpty) {
// TODO: save autostart in create flow
if (usePassword == true) { if (usePassword == true) {
Provider.of<FlwtchState>(context, listen: false).cwtch.CreateProfile(ctrlrNick.value.text, ctrlrPass.value.text); Provider.of<FlwtchState>(context, listen: false).cwtch.CreateProfile(ctrlrNick.value.text, ctrlrPass.value.text);
Navigator.of(context).pop(); Navigator.of(context).pop();

View File

@ -51,7 +51,7 @@ class _ContactRowState extends State<ContactRow> {
badgeTextColor: Provider.of<Settings>(context).theme.portraitContactBadgeTextColor, badgeTextColor: Provider.of<Settings>(context).theme.portraitContactBadgeTextColor,
diameter: 64.0, diameter: 64.0,
imagePath: Provider.of<Settings>(context).isExperimentEnabled(ImagePreviewsExperiment) ? contact.imagePath : contact.defaultImagePath, imagePath: Provider.of<Settings>(context).isExperimentEnabled(ImagePreviewsExperiment) ? contact.imagePath : contact.defaultImagePath,
maskOut: !contact.isOnline(), disabled: !contact.isOnline(),
border: contact.isOnline() border: contact.isOnline()
? Provider.of<Settings>(context).theme.portraitOnlineBorderColor ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor
: contact.isBlocked : contact.isBlocked

View File

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'dart:math'; import 'dart:math';
import 'package:cwtch/cwtch_icons_icons.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:cwtch/themes/opaque.dart'; import 'package:cwtch/themes/opaque.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -17,6 +18,7 @@ class ProfileImage extends StatefulWidget {
required this.badgeTextColor, required this.badgeTextColor,
this.maskOut = false, this.maskOut = false,
this.tooltip = "", this.tooltip = "",
this.disabled = false,
this.badgeEdit = false, this.badgeEdit = false,
this.badgeIcon = null}); this.badgeIcon = null});
final double diameter; final double diameter;
@ -26,6 +28,7 @@ class ProfileImage extends StatefulWidget {
final Color badgeColor; final Color badgeColor;
final Color badgeTextColor; final Color badgeTextColor;
final bool maskOut; final bool maskOut;
final bool disabled;
final bool badgeEdit; final bool badgeEdit;
final String tooltip; final String tooltip;
final Widget? badgeIcon; final Widget? badgeIcon;
@ -79,10 +82,15 @@ class _ProfileImageState extends State<ProfileImage> {
width: widget.diameter, width: widget.diameter,
height: widget.diameter, height: widget.diameter,
color: widget.border, color: widget.border,
foregroundDecoration: widget.disabled ? BoxDecoration(
color: Provider.of<Settings>(context).theme.portraitBackgroundColor, //Colors.grey,
backgroundBlendMode: BlendMode.color, //saturation,
) : null,
child: Padding( child: Padding(
padding: const EdgeInsets.all(2.0), //border size padding: const EdgeInsets.all(2.0), //border size
child: ClipOval(clipBehavior: Clip.antiAlias, child: widget.tooltip == "" ? image : Tooltip(message: widget.tooltip, child: image))))), child: ClipOval(clipBehavior: Clip.antiAlias, child: widget.tooltip == "" ? image : Tooltip(message: widget.tooltip, child: image))))),
Visibility( // badge
Visibility(
visible: widget.badgeIcon != null || widget.badgeEdit || widget.badgeCount > 0, visible: widget.badgeIcon != null || widget.badgeEdit || widget.badgeCount > 0,
child: Positioned( child: Positioned(
bottom: 0.0, bottom: 0.0,
@ -98,6 +106,23 @@ class _ProfileImageState extends State<ProfileImage> {
: (widget.badgeIcon != null ? widget.badgeIcon : Text(widget.badgeCount > 99 ? "99+" : widget.badgeCount.toString(), style: TextStyle(color: widget.badgeTextColor, fontSize: 8.0))), : (widget.badgeIcon != null ? widget.badgeIcon : Text(widget.badgeCount > 99 ? "99+" : widget.badgeCount.toString(), style: TextStyle(color: widget.badgeTextColor, fontSize: 8.0))),
), ),
)), )),
// disabled center icon
Visibility(
visible: widget.disabled,
child: Container(
width: widget.diameter,
height: widget.diameter,
child:
Center(
child: Icon(
CwtchIcons.negative_heart_24px,
size: widget.diameter / 1.5,
color: Provider.of<Settings>(context).theme.portraitOfflineBorderColor,
)
))),
])); ]));
} }
} }

View File

@ -37,6 +37,7 @@ class _ProfileRowState extends State<ProfileRow> {
badgeCount: profile.unreadMessages, badgeCount: profile.unreadMessages,
badgeColor: Provider.of<Settings>(context).theme.portraitProfileBadgeColor, badgeColor: Provider.of<Settings>(context).theme.portraitProfileBadgeColor,
badgeTextColor: Provider.of<Settings>(context).theme.portraitProfileBadgeTextColor, badgeTextColor: Provider.of<Settings>(context).theme.portraitProfileBadgeTextColor,
disabled: !profile.enabled,
diameter: 64.0, diameter: 64.0,
imagePath: Provider.of<Settings>(context).isExperimentEnabled(ImagePreviewsExperiment) ? profile.imagePath : profile.defaultImagePath, imagePath: Provider.of<Settings>(context).isExperimentEnabled(ImagePreviewsExperiment) ? profile.imagePath : profile.defaultImagePath,
border: profile.isOnline ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor)), border: profile.isOnline ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor)),

View File

@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
exec env LD_LIBRARY_PATH=./lib/ ./lib/cwtch exec env LD_LIBRARY_PATH=./lib/:./lib/Tor ./lib/cwtch

View File

@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
exec env LD_LIBRARY_PATH=~/.local/lib/cwtch/ ~/.local/lib/cwtch/cwtch exec env LD_LIBRARY_PATH=~/.local/lib/cwtch/:~/.local/lib/cwtch/Tor ~/.local/lib/cwtch/cwtch

View File

@ -1,3 +1,3 @@
#!/bin/sh #!/bin/sh
exec env LD_LIBRARY_PATH=/usr/lib/cwtch /usr/lib/cwtch/cwtch exec env LD_LIBRARY_PATH=/usr/lib/cwtch:/usr/lib/cwtch/Tor /usr/lib/cwtch/cwtch