diff options
author | wurstsalat <mailtrash@posteo.de> | 2023-06-08 21:33:55 +0300 |
---|---|---|
committer | wurstsalat <mailtrash@posteo.de> | 2023-06-08 21:34:00 +0300 |
commit | 0f5af752c7eeb5ab47566f651586aef2d00103e4 (patch) | |
tree | 6477cd7cf4a9da503ba6752bac4b9c72282c5394 | |
parent | dfe0cd605211097f4ae07f2667e661137028112b (diff) |
fix: CreateGroupchatWindow: Improve handling of MUC service availability
Fixes #11557
-rw-r--r-- | gajim/data/gui/groupchat_creation.ui | 17 | ||||
-rw-r--r-- | gajim/gtk/builder.pyi | 1 | ||||
-rw-r--r-- | gajim/gtk/groupchat_creation.py | 33 |
3 files changed, 37 insertions, 14 deletions
diff --git a/gajim/data/gui/groupchat_creation.ui b/gajim/data/gui/groupchat_creation.ui index 89339b8ee..703cbe5a2 100644 --- a/gajim/data/gui/groupchat_creation.ui +++ b/gajim/data/gui/groupchat_creation.ui @@ -341,6 +341,23 @@ <property name="position">2</property> </packing> </child> + <child> + <object class="GtkLabel" id="error_label"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="no-show-all">True</property> + <property name="wrap">True</property> + <property name="max-width-chars">38</property> + <style> + <class name="warning-color"/> + </style> + </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> diff --git a/gajim/gtk/builder.pyi b/gajim/gtk/builder.pyi index 78f9d9e2a..ddae1dbfd 100644 --- a/gajim/gtk/builder.pyi +++ b/gajim/gtk/builder.pyi @@ -406,6 +406,7 @@ class GroupchatCreationBuilder(Builder): private_radio: Gtk.RadioButton public_radio: Gtk.RadioButton address_entry: Gtk.Entry + error_label: Gtk.Label spinner: Gtk.Spinner create_button: Gtk.Button diff --git a/gajim/gtk/groupchat_creation.py b/gajim/gtk/groupchat_creation.py index 1fa837006..63e5f1b23 100644 --- a/gajim/gtk/groupchat_creation.py +++ b/gajim/gtk/groupchat_creation.py @@ -137,7 +137,10 @@ class CreateGroupchatWindow(Gtk.ApplicationWindow, EventHelper): def _get_muc_service_jid(self) -> str: assert self._account is not None client = app.get_client(self._account) - return str(client.get_module('MUC').service_jid or 'muc.example.com') + service_jid = client.get_module('MUC').service_jid + if service_jid is None: + return '' + return str(service_jid) def _on_key_press(self, _widget: Gtk.Widget, event: Gdk.EventKey) -> None: if event.keyval == Gdk.KEY_Escape: @@ -153,9 +156,19 @@ class CreateGroupchatWindow(Gtk.ApplicationWindow, EventHelper): self._account = model[iter_][0] self._fill_placeholders() + self._validate_jid(self._ui.address_entry.get_text()) + + if not self._get_muc_service_jid(): + self._set_warning( + _('Your server does not provide a group chat service. ' + 'Please try with a different server.')) + self._ui.advanced_switch.set_active(True) + else: + self._ui.error_label.hide() + def _validate_jid(self, text: str) -> None: if not text: - self._set_warning_icon(False) + self._ui.error_label.hide() self._ui.create_button.set_sensitive(False) return @@ -167,7 +180,7 @@ class CreateGroupchatWindow(Gtk.ApplicationWindow, EventHelper): except ValueError: self._set_warning(_('Invalid Address')) else: - self._set_warning_icon(False) + self._ui.error_label.hide() self._ui.create_button.set_sensitive(True) def _set_processing_state(self, enabled: bool) -> None: @@ -178,18 +191,10 @@ class CreateGroupchatWindow(Gtk.ApplicationWindow, EventHelper): self._ui.spinner.stop() self._ui.grid.set_sensitive(not enabled) - def _set_warning_icon(self, enabled: bool) -> None: - icon = 'dialog-warning-symbolic' if enabled else None - self._ui.address_entry.set_icon_from_icon_name( - Gtk.EntryIconPosition.SECONDARY, icon) - - def _set_warning_tooltip(self, text: str) -> None: - self._ui.address_entry.set_icon_tooltip_text( - Gtk.EntryIconPosition.SECONDARY, text) - def _set_warning(self, text: str) -> None: - self._set_warning_icon(True) - self._set_warning_tooltip(text) + self._ui.error_label.set_text(text) + self._ui.error_label.show() + self._ui.advanced_switch.set_active(True) self._ui.create_button.set_sensitive(False) def _set_warning_from_error(self, error: StanzaError) -> None: |