diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-05-15 11:50:26 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-10-05 14:32:07 +0200 |
| commit | 366a49a82073a591c9b06979fd2bbb0c102a9581 (patch) | |
| tree | acf4c8044e618257932af5379443cee920af2eef | |
| parent | cc6d8d5930769e48df8b604622afaae93cdaa8ff (diff) | |
| download | dino-366a49a82073a591c9b06979fd2bbb0c102a9581.tar.gz | |
Set up default encryption settings GUI
| -rw-r--r-- | libdino/src/entity/encryption.vala | 23 | ||||
| -rw-r--r-- | libdino/src/entity/settings.vala | 20 | ||||
| -rw-r--r-- | main/data/settings_dialog.ui | 71 | ||||
| -rw-r--r-- | main/src/ui/settings_dialog.vala | 25 |
4 files changed, 138 insertions, 1 deletions
diff --git a/libdino/src/entity/encryption.vala b/libdino/src/entity/encryption.vala index 193d741b..f6427b02 100644 --- a/libdino/src/entity/encryption.vala +++ b/libdino/src/entity/encryption.vala @@ -6,7 +6,28 @@ public enum Encryption { OMEMO, DTLS_SRTP, SRTP, - UNKNOWN, + UNKNOWN; + + public static Encryption parse(string str) { + switch (str) { + case "DINO_ENTITIES_ENCRYPTION_NONE": + return NONE; + case "DINO_ENTITIES_ENCRYPTION_PGP": + return PGP; + case "DINO_ENTITIES_ENCRYPTION_OMEMO": + return OMEMO; + case "DINO_ENTITIES_ENCRYPTION_DTLS_SRTP": + return DTLS_SRTP; + case "DINO_ENTITIES_ENCRYPTION_SRTP": + return SRTP; + case "DINO_ENTITIES_ENCRYPTION_UNKNOWN": + // Fall through. + default: + break; + } + + return UNKNOWN; + } } }
\ No newline at end of file diff --git a/libdino/src/entity/settings.vala b/libdino/src/entity/settings.vala index 97ea5482..716c5f7d 100644 --- a/libdino/src/entity/settings.vala +++ b/libdino/src/entity/settings.vala @@ -12,6 +12,7 @@ public class Settings : Object { notifications_ = col_to_bool_or_default("notifications", true); convert_utf8_smileys_ = col_to_bool_or_default("convert_utf8_smileys", true); check_spelling = col_to_bool_or_default("check_spelling", true); + default_encryption = col_to_encryption_or_default("default_encryption", Encryption.OMEMO); } private bool col_to_bool_or_default(string key, bool def) { @@ -19,6 +20,12 @@ public class Settings : Object { return val != null ? bool.parse(val) : def; } + private Encryption col_to_encryption_or_default(string key, Encryption def) { + var sval = db.settings.value; + string? val = db.settings.select({sval}).with(db.settings.key, "=", key)[sval]; + return val != null ? Encryption.parse(val) : def; + } + private bool send_typing_; public bool send_typing { get { return send_typing_; } @@ -78,6 +85,19 @@ public class Settings : Object { check_spelling_ = value; } } + + private Encryption default_encryption_; + public Encryption default_encryption { + get { return default_encryption_; } + set { + string valstr = value.to_string(); + db.settings.upsert() + .value(db.settings.key, "default_encryption", true) + .value(db.settings.value, valstr) + .perform(); + default_encryption_ = value; + } + } } } diff --git a/main/data/settings_dialog.ui b/main/data/settings_dialog.ui index d5b7ac92..2d4b52c3 100644 --- a/main/data/settings_dialog.ui +++ b/main/data/settings_dialog.ui @@ -77,6 +77,77 @@ <property name="height">1</property> </packing> </child> + <child> + <object class="GtkBox" id ="default_encryption_box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel"> + <property name="label" translatable="yes">Default encryption</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="encryption_radio_undecided"> + <property name="label" translatable="yes">Ask</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">encryption_radio_undecided</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="encryption_radio_omemo"> + <property name="label" translatable="yes">OMEMO</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">encryption_radio_undecided</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="encryption_radio_openpgp"> + <property name="label" translatable="yes">OpenPGP</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">encryption_radio_undecided</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> </object> </child> </object> diff --git a/main/src/ui/settings_dialog.vala b/main/src/ui/settings_dialog.vala index e994e00c..59edef2c 100644 --- a/main/src/ui/settings_dialog.vala +++ b/main/src/ui/settings_dialog.vala @@ -1,4 +1,5 @@ using Gtk; +using Dino.Entities; namespace Dino.Ui { @@ -10,6 +11,9 @@ class SettingsDialog : Dialog { [GtkChild] private unowned CheckButton notification_checkbutton; [GtkChild] private unowned CheckButton emoji_checkbutton; [GtkChild] private unowned CheckButton check_spelling_checkbutton; + [GtkChild] private unowned RadioButton encryption_radio_undecided; + [GtkChild] private unowned RadioButton encryption_radio_omemo; + [GtkChild] private unowned RadioButton encryption_radio_openpgp; Dino.Entities.Settings settings = Dino.Application.get_default().settings; @@ -21,12 +25,33 @@ class SettingsDialog : Dialog { notification_checkbutton.active = settings.notifications; emoji_checkbutton.active = settings.convert_utf8_smileys; check_spelling_checkbutton.active = settings.check_spelling; + encryption_radio_undecided.active = settings.default_encryption == Encryption.UNKNOWN; + encryption_radio_omemo.active = settings.default_encryption == Encryption.OMEMO; + encryption_radio_openpgp.active = settings.default_encryption == Encryption.PGP; typing_checkbutton.toggled.connect(() => { settings.send_typing = typing_checkbutton.active; } ); marker_checkbutton.toggled.connect(() => { settings.send_marker = marker_checkbutton.active; } ); notification_checkbutton.toggled.connect(() => { settings.notifications = notification_checkbutton.active; } ); emoji_checkbutton.toggled.connect(() => { settings.convert_utf8_smileys = emoji_checkbutton.active; }); check_spelling_checkbutton.toggled.connect(() => { settings.check_spelling = check_spelling_checkbutton.active; }); + + encryption_radio_undecided.toggled.connect(() => { + if (encryption_radio_undecided.active) { + settings.default_encryption = Encryption.UNKNOWN; + } + }); + + encryption_radio_omemo.toggled.connect(() => { + if (encryption_radio_omemo.active) { + settings.default_encryption = Encryption.OMEMO; + } + }); + + encryption_radio_openpgp.toggled.connect(() => { + if (encryption_radio_openpgp.active) { + settings.default_encryption = Encryption.PGP; + } + }); } } |
