aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_details.vala
diff options
context:
space:
mode:
authorMiquel Lionel <lionel@les-miquelots.net>2023-10-08 17:45:16 +0200
committerfiaxh <fiaxh@users.noreply.github.com>2024-08-19 11:36:17 +0200
commit8e7dedcaa62a49373c22dfc54bf1bb8b261bcb61 (patch)
tree822997b08d8cd1c2925650bf7203f928f9364c3c /main/src/ui/conversation_details.vala
parentcfb0ca2a64c1d680799ce752412b089ac075b780 (diff)
downloaddino-8e7dedcaa62a49373c22dfc54bf1bb8b261bcb61.tar.gz
dino-8e7dedcaa62a49373c22dfc54bf1bb8b261bcb61.zip
Allow blocking entire domain from conversation details
- the block domain option is in a drop down of the block button - when blocking the domain, the "Blocked domain" button appears and block button disappears and vice versa.
Diffstat (limited to 'main/src/ui/conversation_details.vala')
-rw-r--r--main/src/ui/conversation_details.vala40
1 files changed, 33 insertions, 7 deletions
diff --git a/main/src/ui/conversation_details.vala b/main/src/ui/conversation_details.vala
index 1c82f105..90aa9244 100644
--- a/main/src/ui/conversation_details.vala
+++ b/main/src/ui/conversation_details.vala
@@ -10,6 +10,7 @@ namespace Dino.Ui.ConversationDetails {
model.conversation = conversation;
model.display_name = stream_interactor.get_module(ContactModels.IDENTITY).get_display_name_model(conversation);
model.blocked = stream_interactor.get_module(BlockingManager.IDENTITY).is_blocked(model.conversation.account, model.conversation.counterpart);
+ model.domain_blocked = stream_interactor.get_module(BlockingManager.IDENTITY).is_blocked(model.conversation.account, model.conversation.counterpart.domain_jid);
if (conversation.type_ == Conversation.Type.GROUPCHAT) {
stream_interactor.get_module(MucManager.IDENTITY).get_config_form.begin(conversation.account, conversation.counterpart, (_, res) => {
@@ -58,6 +59,7 @@ namespace Dino.Ui.ConversationDetails {
return true;
});
model.bind_property("blocked", view_model, "blocked", BindingFlags.SYNC_CREATE);
+ model.bind_property("domain_blocked", view_model, "domain_blocked", BindingFlags.SYNC_CREATE);
model.bind_property("data-form", view_model, "room-configuration-rows", BindingFlags.SYNC_CREATE, (_, from, ref to) => {
var data_form = (DataForms.DataForm) from;
if (data_form == null) return true;
@@ -77,13 +79,37 @@ namespace Dino.Ui.ConversationDetails {
view_model.pin_changed.connect(() => {
model.conversation.pinned = model.conversation.pinned == 1 ? 0 : 1;
});
- view_model.block_changed.connect(() => {
- if (view_model.blocked) {
- stream_interactor.get_module(BlockingManager.IDENTITY).unblock(model.conversation.account, model.conversation.counterpart);
- } else {
- stream_interactor.get_module(BlockingManager.IDENTITY).block(model.conversation.account, model.conversation.counterpart);
+ view_model.block_changed.connect((action) => {
+ switch (action) {
+ case USER:
+ stream_interactor.get_module(BlockingManager.IDENTITY).block(model.conversation.account, model.conversation.counterpart);
+ view_model.blocked = true;
+ break;
+ case DOMAIN:
+ stream_interactor.get_module(BlockingManager.IDENTITY).block(model.conversation.account, model.conversation.counterpart.domain_jid);
+ view_model.blocked = true;
+ view_model.domain_blocked = true;
+ break;
+ case UNBLOCK:
+ stream_interactor.get_module(BlockingManager.IDENTITY).unblock(model.conversation.account, model.conversation.counterpart);
+ stream_interactor.get_module(BlockingManager.IDENTITY).unblock(model.conversation.account, model.conversation.counterpart.domain_jid);
+ view_model.blocked = false;
+ view_model.domain_blocked = false;
+ break;
+ case TOGGLE:
+ if (view_model.blocked) {
+ view_model.block_changed(UNBLOCK);
+ }
+ else {
+ view_model.block_changed(USER);
+ }
+ if (view_model.domain_blocked) {
+ view_model.block_changed(UNBLOCK);
+ }
+ break;
+ default:
+ break;
}
- view_model.blocked = !view_model.blocked;
});
view_model.notification_changed.connect((setting) => {
switch (setting) {
@@ -189,4 +215,4 @@ namespace Dino.Ui.ConversationDetails {
break;
}
}
-} \ No newline at end of file
+}