diff options
author | wurstsalat <mailtrash@posteo.de> | 2021-10-26 23:07:55 +0300 |
---|---|---|
committer | wurstsalat <mailtrash@posteo.de> | 2021-10-26 23:07:55 +0300 |
commit | 352d0ec1411969262119f75e15af1c2f12a8531b (patch) | |
tree | 66f584274af0bddacf964f6fd5f0992cce430d6c /triggers | |
parent | 3ac35b359c1929e7ebf9feb1d1951d98a3967ed2 (diff) |
[triggers] Adapt to Gajim changes
Diffstat (limited to 'triggers')
-rw-r--r-- | triggers/gtk/config.py | 52 | ||||
-rw-r--r-- | triggers/gtk/config.ui | 619 | ||||
-rw-r--r-- | triggers/triggers.py | 279 |
3 files changed, 345 insertions, 605 deletions
diff --git a/triggers/gtk/config.py b/triggers/gtk/config.py index d64f809..eafc702 100644 --- a/triggers/gtk/config.py +++ b/triggers/gtk/config.py @@ -28,24 +28,6 @@ from gajim.plugins.helpers import get_builder EVENTS = { 'message_received': [], - 'contact_connected': [ - 'use_systray_cb', - 'disable_systray_cb', - 'use_roster_cb', - 'disable_roster_cb' - ], - 'contact_disconnected': [ - 'use_systray_cb', - 'disable_systray_cb', - 'use_roster_cb', - 'disable_roster_cb' - ], - 'contact_status_change': [ - 'use_systray_cb', - 'disable_systray_cb', - 'use_roster_cb', - 'disable_roster_cb' - ] } RECIPIENT_TYPES = [ @@ -63,7 +45,7 @@ class ConfigDialog(Gtk.ApplicationWindow): self.set_show_menubar(False) self.set_title(_('Triggers Configuration')) self.set_transient_for(transient) - self.set_default_size(600, 700) + self.set_default_size(600, 800) self.set_type_hint(Gdk.WindowTypeHint.DIALOG) self.set_modal(True) self.set_destroy_with_parent(True) @@ -95,9 +77,7 @@ class ConfigDialog(Gtk.ApplicationWindow): 'recipient_type_combobox', 'recipient_list_entry', 'delete_button', 'online_cb', 'away_cb', 'xa_cb', 'dnd_cb', 'use_sound_cb', 'disable_sound_cb', 'use_popup_cb', - 'disable_popup_cb', 'use_auto_open_cb', - 'disable_auto_open_cb', 'use_systray_cb', - 'disable_systray_cb', 'use_roster_cb', 'disable_roster_cb', + 'disable_popup_cb', 'tab_opened_cb', 'not_tab_opened_cb', 'has_focus_cb', 'not_has_focus_cb', 'filechooser', 'sound_file_box', 'up_button', 'down_button', 'run_command_cb', @@ -233,7 +213,7 @@ class ConfigDialog(Gtk.ApplicationWindow): self._ui.filechooser.set_filename(value) # sound, popup, auto_open, systray, roster - for option in ('sound', 'popup', 'auto_open', 'systray', 'roster'): + for option in ('sound', 'popup'): value = self._config[self._active_num][option] if value == 'yes': self._ui.__dict__['use_' + option + '_cb'].set_active(True) @@ -322,11 +302,8 @@ class ConfigDialog(Gtk.ApplicationWindow): 'sound': '', 'sound_file': '', 'popup': '', - 'auto_open': '', 'run_command': False, 'command': '', - 'systray': '', - 'roster': '', 'one_shot': False, } iter_ = model.append((num, '')) @@ -397,9 +374,6 @@ class ConfigDialog(Gtk.ApplicationWindow): return event = list(EVENTS.keys())[active] self._config[self._active_num]['event'] = event - for widget in ('use_systray_cb', 'disable_systray_cb', 'use_roster_cb', - 'disable_roster_cb'): - self._ui.__dict__[widget].set_sensitive(True) for widget in EVENTS[event]: self._ui.__dict__[widget].set_sensitive(False) self._ui.__dict__[widget].set_state(False) @@ -555,14 +529,6 @@ class ConfigDialog(Gtk.ApplicationWindow): def _on_disable_popup_cb_toggled(self, widget): self._on_disable_it_toggled(widget, self._ui.use_popup_cb, 'popup') - def _on_use_auto_open_cb_toggled(self, widget): - self._on_use_it_toggled(widget, self._ui.disable_auto_open_cb, - 'auto_open') - - def _on_disable_auto_open_cb_toggled(self, widget): - self._on_disable_it_toggled(widget, self._ui.use_auto_open_cb, - 'auto_open') - def _on_run_command_cb_toggled(self, widget): self._config[self._active_num]['run_command'] = widget.get_active() if widget.get_active(): @@ -573,18 +539,6 @@ class ConfigDialog(Gtk.ApplicationWindow): def _on_command_entry_changed(self, widget): self._config[self._active_num]['command'] = widget.get_text() - def _on_use_systray_cb_toggled(self, widget): - self._on_use_it_toggled(widget, self._ui.disable_systray_cb, 'systray') - - def _on_disable_systray_cb_toggled(self, widget): - self._on_disable_it_toggled(widget, self._ui.use_systray_cb, 'systray') - - def _on_use_roster_cb_toggled(self, widget): - self._on_use_it_toggled(widget, self._ui.disable_roster_cb, 'roster') - - def _on_disable_roster_cb_toggled(self, widget): - self._on_disable_it_toggled(widget, self._ui.use_roster_cb, 'roster') - def _on_one_shot_cb_toggled(self, widget): self._config[self._active_num]['one_shot'] = widget.get_active() self._ui.command_entry.set_sensitive(widget.get_active()) diff --git a/triggers/gtk/config.ui b/triggers/gtk/config.ui index bf6f416..c9a1be8 100644 --- a/triggers/gtk/config.ui +++ b/triggers/gtk/config.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.2 --> +<!-- Generated with glade 3.38.2 --> <interface> - <requires lib="gtk+" version="3.20"/> + <requires lib="gtk+" version="3.24"/> <object class="GtkListStore" id="liststore1"> <columns> <!-- column-name item --> @@ -44,42 +44,42 @@ </object> <object class="GtkBox" id="box"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="border_width">18</property> + <property name="can-focus">False</property> + <property name="border-width">18</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkScrolledWindow"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="propagate_natural_width">True</property> - <property name="propagate_natural_height">True</property> + <property name="can-focus">True</property> + <property name="propagate-natural-width">True</property> + <property name="propagate-natural-height">True</property> <child> <object class="GtkViewport"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkBox" id="rules_box"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkScrolledWindow"> - <property name="height_request">100</property> + <property name="height-request">100</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> + <property name="can-focus">True</property> + <property name="shadow-type">in</property> <child> <object class="GtkTreeView" id="conditions_treeview"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="enable_grid_lines">horizontal</property> + <property name="can-focus">True</property> + <property name="enable-grid-lines">horizontal</property> <signal name="cursor-changed" handler="_on_conditions_treeview_cursor_changed" swapped="no"/> <child internal-child="selection"> <object class="GtkTreeSelection"/> @@ -96,18 +96,18 @@ <child> <object class="GtkToolbar"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="show_arrow">False</property> + <property name="can-focus">False</property> + <property name="show-arrow">False</property> <property name="icon_size">1</property> <child> <object class="GtkToolButton" id="up_button"> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">False</property> - <property name="tooltip_text" translatable="yes">Up</property> + <property name="can-focus">False</property> + <property name="tooltip-text" translatable="yes">Up</property> <property name="label" translatable="yes">Up</property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-go-up</property> + <property name="use-underline">True</property> + <property name="icon-name">go-up-symbolic</property> <signal name="clicked" handler="_on_up_button_clicked" swapped="no"/> </object> <packing> @@ -119,11 +119,11 @@ <object class="GtkToolButton" id="down_button"> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">False</property> - <property name="tooltip_text" translatable="yes">Down</property> + <property name="can-focus">False</property> + <property name="tooltip-text" translatable="yes">Down</property> <property name="label" translatable="yes">Down</property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-go-down</property> + <property name="use-underline">True</property> + <property name="icon-name">go-down-symbolic</property> <signal name="clicked" handler="_on_down_button_clicked" swapped="no"/> </object> <packing> @@ -134,11 +134,11 @@ <child> <object class="GtkToolButton" id="new_button"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="tooltip_text" translatable="yes">New rule</property> + <property name="can-focus">False</property> + <property name="tooltip-text" translatable="yes">New rule</property> <property name="label" translatable="yes">New rule</property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-new</property> + <property name="use-underline">True</property> + <property name="icon-name">list-add-symbolic</property> <signal name="clicked" handler="_on_new_button_clicked" swapped="no"/> </object> <packing> @@ -149,11 +149,11 @@ <child> <object class="GtkToolButton" id="delete_button"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="tooltip_text" translatable="yes">Delete rule</property> + <property name="can-focus">False</property> + <property name="tooltip-text" translatable="yes">Delete rule</property> <property name="label" translatable="yes">Delete rule</property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-delete</property> + <property name="use-underline">True</property> + <property name="icon-name">list-remove-symbolic</property> <signal name="clicked" handler="_on_delete_button_clicked" swapped="no"/> </object> <packing> @@ -181,23 +181,23 @@ <child> <object class="GtkBox" id="config_box"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <property name="spacing">5</property> <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">center</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_top">6</property> + <property name="can-focus">False</property> + <property name="margin-top">6</property> <property name="label" translatable="yes">Conditions</property> - <property name="use_markup">True</property> + <property name="use-markup">True</property> <style> <class name="large-header"/> <class name="dim-label"/> @@ -210,33 +210,34 @@ </packing> </child> <child> + <!-- n-columns=2 n-rows=3 --> <object class="GtkGrid"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">center</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> + <property name="row-spacing">6</property> + <property name="column-spacing">12</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">end</property> <property name="label" translatable="yes">Event</property> - <property name="use_markup">True</property> + <property name="use-markup">True</property> <style> <class name="dim-label"/> </style> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> + <property name="left-attach">0</property> + <property name="top-attach">0</property> </packing> </child> <child> <object class="GtkComboBox" id="event_combobox"> - <property name="width_request">200</property> + <property name="width-request">200</property> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="model">liststore2</property> <signal name="changed" handler="_on_event_combobox_changed" swapped="no"/> <child> @@ -247,30 +248,30 @@ </child> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> + <property name="left-attach">1</property> + <property name="top-attach">0</property> </packing> </child> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">end</property> <property name="label" translatable="yes">Category</property> - <property name="use_markup">True</property> + <property name="use-markup">True</property> <style> <class name="dim-label"/> </style> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> + <property name="left-attach">0</property> + <property name="top-attach">1</property> </packing> </child> <child> <object class="GtkComboBox" id="recipient_type_combobox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="model">liststore1</property> <signal name="changed" handler="_on_recipient_type_combobox_changed" swapped="no"/> <child> @@ -281,28 +282,28 @@ </child> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> + <property name="left-attach">1</property> + <property name="top-attach">1</property> </packing> </child> <child> <object class="GtkEntry" id="recipient_list_entry"> - <property name="width_request">300</property> + <property name="width-request">300</property> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="tooltip_text" translatable="yes">comma separated list</property> + <property name="can-focus">True</property> + <property name="tooltip-text" translatable="yes">comma separated list</property> <signal name="changed" handler="_on_recipient_list_entry_changed" swapped="no"/> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">2</property> + <property name="left-attach">1</property> + <property name="top-attach">2</property> </packing> </child> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">end</property> <property name="label" translatable="yes">List</property> <style> @@ -310,8 +311,8 @@ </style> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> + <property name="left-attach">0</property> + <property name="top-attach">2</property> </packing> </child> </object> @@ -324,17 +325,17 @@ <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">center</property> - <property name="margin_top">6</property> + <property name="margin-top">6</property> <property name="spacing">6</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="valign">start</property> <property name="label" translatable="yes">My status</property> - <property name="use_markup">True</property> + <property name="use-markup">True</property> <style> <class name="dim-label"/> </style> @@ -349,11 +350,11 @@ <object class="GtkRadioButton" id="all_status_rb"> <property name="label" translatable="yes">All statuses</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="valign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <property name="group">special_status_rb</property> <signal name="toggled" handler="_on_status_radiobutton_toggled" swapped="no"/> </object> @@ -367,11 +368,11 @@ <object class="GtkRadioButton" id="special_status_rb"> <property name="label" translatable="yes">Certain status</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="valign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <property name="group">all_status_rb</property> </object> <packing> @@ -383,14 +384,14 @@ <child> <object class="GtkExpander" id="status_expander"> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can-focus">True</property> <property name="valign">start</property> - <property name="margin_top">3</property> + <property name="margin-top">3</property> <property name="expanded">True</property> <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> @@ -398,11 +399,11 @@ <property name="label" translatable="yes">Online</property> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_status_cb_toggled" swapped="no"/> </object> <packing> @@ -416,11 +417,11 @@ <property name="label" translatable="yes">Away</property> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_status_cb_toggled" swapped="no"/> </object> <packing> @@ -434,11 +435,11 @@ <property name="label" translatable="yes">Not Available</property> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_status_cb_toggled" swapped="no"/> </object> <packing> @@ -452,11 +453,11 @@ <property name="label" translatable="yes">Busy</property> <property name="visible">True</property> <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_status_cb_toggled" swapped="no"/> </object> <packing> @@ -470,7 +471,7 @@ <child type="label"> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="label" translatable="yes">Status</property> </object> </child> @@ -489,15 +490,16 @@ </packing> </child> <child> + <!-- n-columns=3 n-rows=2 --> <object class="GtkGrid"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> + <property name="can-focus">False</property> + <property name="row-spacing">6</property> + <property name="column-spacing">12</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">end</property> <property name="label" translatable="yes">Chat Window</property> <style> @@ -505,14 +507,14 @@ </style> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> + <property name="left-attach">0</property> + <property name="top-attach">0</property> </packing> </child> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">end</property> <property name="label" translatable="yes">Focus</property> <style> @@ -520,70 +522,70 @@ </style> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> + <property name="left-attach">0</property> + <property name="top-attach">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="tab_opened_cb"> <property name="label" translatable="yes">Opened</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_tab_opened_cb_toggled" swapped="no"/> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> + <property name="left-attach">1</property> + <property name="top-attach">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="has_focus_cb"> <property name="label" translatable="yes">Has focus</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="draw_indicator">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_has_focus_cb_toggled" swapped="no"/> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> + <property name="left-attach">1</property> + <property name="top-attach">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="not_tab_opened_cb"> <property name="label" translatable="yes">Not opened</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_not_tab_opened_cb_toggled" swapped="no"/> </object> <packing> - <property name="left_attach">2</property> - <property name="top_attach">0</property> + <property name="left-attach">2</property> + <property name="top-attach">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="not_has_focus_cb"> <property name="label" translatable="yes">Does not have focus</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="draw_indicator">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_not_has_focus_cb_toggled" swapped="no"/> </object> <packing> - <property name="left_attach">2</property> - <property name="top_attach">1</property> + <property name="left-attach">2</property> + <property name="top-attach">1</property> </packing> </child> </object> @@ -603,17 +605,17 @@ <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">center</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_top">6</property> + <property name="can-focus">False</property> + <property name="margin-top">6</property> <property name="label" translatable="yes">Actions</property> - <property name="use_markup">True</property> + <property name="use-markup">True</property> <style> <class name="large-header"/> <class name="dim-label"/> @@ -628,77 +630,13 @@ <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Chat Window</property> - <style> - <class name="bold"/> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="use_auto_open_cb"> - <property name="label" translatable="yes">_Open chat window with contact</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_use_auto_open_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="disable_auto_open_cb"> - <property name="label" translatable="yes">_Disable automatically opening</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_disable_auto_open_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">start</property> <property name="label" translatable="yes">Notifications</property> <style> @@ -714,13 +652,13 @@ </child> <child> <object class="GtkCheckButton" id="use_popup_cb"> - <property name="label" translatable="yes">Not_ificate me with a popup</property> + <property name="label" translatable="yes">Not_ify me with a popup</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_use_popup_cb_toggled" swapped="no"/> </object> <packing> @@ -733,11 +671,11 @@ <object class="GtkCheckButton" id="disable_popup_cb"> <property name="label" translatable="yes">_Disable existing notification</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_disable_popup_cb_toggled" swapped="no"/> </object> <packing> @@ -750,22 +688,22 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">start</property> <property name="label" translatable="yes">Sounds</property> - <property name="use_markup">True</property> + <property name="use-markup">True</property> <style> <class name="bold"/> <class name="dim-label"/> @@ -780,18 +718,18 @@ <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="halign">start</property> <property name="spacing">12</property> <child> <object class="GtkCheckButton" id="use_sound_cb"> <property name="label" translatable="yes">Play sound</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_use_sound_cb_toggled" swapped="no"/> </object> <packing> @@ -803,16 +741,16 @@ <child> <object class="GtkBox" id="sound_file_box"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="spacing">12</property> <child> <object class="GtkFileChooserButton" id="filechooser"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="preview_widget_active">False</property> - <property name="use_preview_label">False</property> + <property name="can-focus">False</property> + <property name="preview-widget-active">False</property> + <property name="use-preview-label">False</property> <property name="title" translatable="yes">Select Sound</property> - <property name="width_chars">15</property> + <property name="width-chars">15</property> <signal name="file-set" handler="_on_sound_file_set" swapped="no"/> </object> <packing> @@ -824,14 +762,14 @@ <child> <object class="GtkButton" id="play_button"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <signal name="clicked" handler="_on_play_button_clicked" swapped="no"/> <child> <object class="GtkImage"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-media-play</property> + <property name="can-focus">False</property> + <property name="icon-name">media-playback-start-symbolic</property> </object> </child> </object> @@ -859,11 +797,11 @@ <object class="GtkCheckButton" id="disable_sound_cb"> <property name="label" translatable="yes">_Disable existing sound for this event</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <signal name="toggled" handler="_on_disable_sound_cb_toggled" swapped="no"/> </object> <packing> @@ -876,38 +814,40 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Advanced</property> + <style> + <class name="bold"/> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> <property name="position">3</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkExpander"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="margin_top">6</property> <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">center</property> - <property name="orientation">vertical</property> + <property name="can-focus">False</property> <property name="spacing">6</property> <child> - <object class="GtkCheckButton" id="one_shot_cb"> - <property name="label" translatable="yes">Delete this rule once applied</property> + <object class="GtkCheckButton" id="run_command_cb"> + <property name="label" translatable="yes">Launch command</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="margin_top">6</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_one_shot_cb_toggled" swapped="no"/> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> + <signal name="toggled" handler="_on_run_command_cb_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> @@ -916,174 +856,47 @@ </packing> </child> <child> - <object class="GtkBox"> + <object class="GtkEntry" id="command_entry"> + <property name="width-request">200</property> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkCheckButton" id="run_command_cb"> - <property name="label" translatable="yes">Launch command</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_run_command_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="command_entry"> - <property name="width_request">200</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="placeholder_text" translatable="yes">Command...</property> - <signal name="changed" handler="_on_command_entry_changed" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkGrid"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Notification</property> - <style> - <class name="bold"/> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Contact List</property> - <style> - <class name="bold"/> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="use_roster_cb"> - <property name="label" translatable="yes">_Show event</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_use_roster_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="disable_roster_cb"> - <property name="label" translatable="yes">_Disable showing event</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_disable_roster_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">2</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="use_systray_cb"> - <property name="label" translatable="yes">_Show event</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_use_systray_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="disable_systray_cb"> - <property name="label" translatable="yes">_Disable showing event</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="halign">start</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="_on_disable_systray_cb_toggled" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> - </packing> - </child> + <property name="can-focus">True</property> + <property name="placeholder-text" translatable="yes">Command...</property> + <signal name="changed" handler="_on_command_entry_changed" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">7</property> + <property name="position">1</property> </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel"> + <child> + <object class="GtkCheckButton" id="one_shot_cb"> + <property name="label" translatable="yes">Delete this rule once applied</property> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Advanced Actions</property> - <style> - <class name="bold"/> - <class name="dim-label"/> - </style> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="halign">start</property> + <property name="draw-indicator">True</property> + <signal name="toggled" handler="_on_one_shot_cb_toggled" swapped="no"/> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> diff --git a/triggers/triggers.py b/triggers/triggers.py index 844f422..aa85386 100644 --- a/triggers/triggers.py +++ b/triggers/triggers.py @@ -35,28 +35,125 @@ class Triggers(GajimPlugin): self.events_handlers = { 'notification': (ged.PREGUI, self._on_notification), - 'decrypted-message-received': (ged.PREGUI2, - self._on_message_received), - 'gc-message-received': (ged.PREGUI2, self._on_gc_message_received), + 'message-received': (ged.PREGUI2, self._on_message_received), + 'gc-message-received': (ged.PREGUI2, self._on_message_received), 'presence-received': (ged.PREGUI, self._on_presence_received), } - def _check_rule_recipients(self, obj, rule): + def _on_notification(self, event): + self._check_all(event, + self._check_rule_apply_notification, + self._apply_rule) + + def _on_message_received(self, event): + self._check_all(event, + self._check_rule_apply_msg_received, + self._apply_rule) + + def _on_presence_received(self, event): + if event.old_show < 2 and event.new_show > 1: + check_func = self._check_rule_apply_connected + elif event.old_show > 1 and event.new_show < 2: + check_func = self._check_rule_apply_disconnected + else: + check_func = self._check_rule_apply_status_changed + self._check_all(event, check_func, self._apply_rule) + + def _check_all(self, event, check_func, apply_func): + # check rules in order + rules_num = [int(item) for item in self.config.keys()] + rules_num.sort() + to_remove = [] + for num in rules_num: + rule = self.config[str(num)] + if check_func(event, rule): + apply_func(event, rule) + if 'one_shot' in rule and rule['one_shot']: + to_remove.append(num) + # Should we stop after first valid rule ? + # break + + decal = 0 + num = 0 + while str(num) in self.config: + if num + decal in to_remove: + num2 = num + while str(num2 + 1) in self.config: + self.config[str(num2)] = self.config[str(num2 + 1)].copy() + num2 += 1 + del self.config[str(num2)] + decal += 1 + else: + num += 1 + + def _check_rule_apply_msg_received(self, event, rule): + return self._check_rule_all('message_received', event, rule) + + def _check_rule_apply_connected(self, event, rule): + return self._check_rule_all('contact_connected', event, rule) + + def _check_rule_apply_disconnected(self, event, rule): + return self._check_rule_all('contact_disconnected', event, rule) + + def _check_rule_apply_status_changed(self, event, rule): + return self._check_rule_all('contact_status_change', event, rule) + + def _check_rule_apply_notification(self, event, rule): + # Check notification type + notif_type = '' + if event.notif_type == 'incoming-message': + notif_type = 'message_received' + if event.notif_type == 'pres': + # TODO: + if (event.base_event.old_show < 2 and + event.base_event.new_show > 1): + notif_type = 'contact_connected' + elif (event.base_event.old_show > 1 and + event.base_event.new_show < 2): + notif_type = 'contact_disconnected' + else: + notif_type = 'contact_status_change' + + return self._check_rule_all(notif_type, event, rule) + + def _check_rule_all(self, notif_type, event, rule): + # Check notification type + if rule['event'] != notif_type: + return False + + # notification type is ok. Now check recipient + if not self._check_rule_recipients(event, rule): + return False + + # recipient is ok. Now check our status + if not self._check_rule_status(event, rule): + return False + + # our_status is ok. Now check opened chat window + if not self._check_rule_tab_opened(event, rule): + return False + + # tab_opened is ok. Now check opened chat window + if not self._check_rule_has_focus(event, rule): + return False + + # All is ok + return True + + def _check_rule_recipients(self, event, rule): rule_recipients = [t.strip() for t in rule['recipients'].split(',')] if rule['recipient_type'] == 'groupchat': - if obj.jid in rule_recipients: + if event.jid in rule_recipients: return True return False - if (rule['recipient_type'] == 'contact' and obj.jid not in + if (rule['recipient_type'] == 'contact' and event.jid not in rule_recipients): return False - contact = app.contacts.get_first_contact_from_jid( - obj.conn.name, obj.jid) - if not contact: # PM? - return False - contact_groups = contact.groups + client = app.get_client(event.account) + contact = client.get_module('Contacts').get_contact(event.jid) + group_found = False - for group in contact_groups: + for group in contact.groups: if group in rule_recipients: group_found = True break @@ -65,19 +162,19 @@ class Triggers(GajimPlugin): return True - def _check_rule_status(self, obj, rule): + def _check_rule_status(self, event, rule): rule_statuses = rule['status'].split() - our_status = app.connections[obj.conn.name].status + our_status = app.connections[event.account].status if rule['status'] != 'all' and our_status not in rule_statuses: return False return True - def _check_rule_tab_opened(self, obj, rule): + def _check_rule_tab_opened(self, event, rule): if rule['tab_opened'] == 'both': return True tab_opened = False - if app.interface.msg_win_mgr.get_control(obj.jid, obj.conn.name): + if app.window.get_control(event.account, event.jid): tab_opened = True if tab_opened and rule['tab_opened'] == 'no': return False @@ -86,17 +183,17 @@ class Triggers(GajimPlugin): return True - def _check_rule_has_focus(self, obj, rule): + def _check_rule_has_focus(self, event, rule): if rule['has_focus'] == 'both': return True if rule['tab_opened'] == 'no': # Does not apply in this case return True - ctrl = app.interface.msg_win_mgr.get_control(obj.jid, obj.conn.name) + ctrl = app.window.get_control(event.account, event.jid) if not ctrl: # Does not apply in this case return True - has_focus = ctrl.parent_win.window.has_focus() + has_focus = ctrl.has_focus() if has_focus and rule['has_focus'] == 'no': return False elif not has_focus and rule['has_focus'] == 'yes': @@ -104,142 +201,18 @@ class Triggers(GajimPlugin): return True - def _check_rule_all(self, event, obj, rule): - # Check notification type - if rule['event'] != event: - return False - - # notification type is ok. Now check recipient - if not self._check_rule_recipients(obj, rule): - return False - - # recipient is ok. Now check our status - if not self._check_rule_status(obj, rule): - return False - - # our_status is ok. Now check opened chat window - if not self._check_rule_tab_opened(obj, rule): - return False - - # tab_opened is ok. Now check opened chat window - if not self._check_rule_has_focus(obj, rule): - return False - - # All is ok - return True - - def _check_rule_apply_notification(self, obj, rule): - # Check notification type - notif_type = '' - if obj.notif_type in ('msg', 'gc-msg'): - notif_type = 'message_received' - elif obj.notif_type == 'pres': - if obj.base_event.old_show < 2 and obj.base_event.new_show > 1: - notif_type = 'contact_connected' - elif obj.base_event.old_show > 1 and obj.base_event.new_show < 2: - notif_type = 'contact_disconnected' - else: - notif_type = 'contact_status_change' - - return self._check_rule_all(notif_type, obj, rule) - - def _check_rule_apply_msg_received(self, obj, rule): - return self._check_rule_all('message_received', obj, rule) - - def _check_rule_apply_connected(self, obj, rule): - return self._check_rule_all('contact_connected', obj, rule) - - def _check_rule_apply_disconnected(self, obj, rule): - return self._check_rule_all('contact_disconnected', obj, rule) - - def _check_rule_apply_status_changed(self, obj, rule): - return self._check_rule_all('contact_status_change', obj, rule) - - def _apply_rule_notification(self, obj, rule): + def _apply_rule(self, event, rule): if rule['sound'] == 'no': - obj.do_sound = False + event.sound = None + event.sound_file = None elif rule['sound'] == 'yes': - obj.do_sound = True - obj.sound_event = '' - obj.sound_file = rule['sound_file'] - - if rule['popup'] == 'no' or obj.control_focused: - obj.do_popup = False - elif rule['popup'] == 'yes': - obj.do_popup = True + event.sound = None + event.sound_file = rule['sound_file'] if rule['run_command']: - obj.do_command = True - obj.command = rule['command'] - else: - obj.do_command = False - - if rule['systray'] == 'no': - obj.show_in_notification_area = False - elif rule['systray'] == 'yes': - obj.show_in_notification_area = True - - if rule['roster'] == 'no': - obj.show_in_roster = False - elif rule['roster'] == 'yes': - obj.show_in_roster = True - - def _apply_rule_message_received(self, obj, rule): - if rule['auto_open'] == 'no': - obj.popup = False - elif rule['auto_open'] == 'yes': - obj.popup = True - - def _apply_rule_presence_received(self, obj, rule): - if rule['auto_open'] == 'no': - obj.popup = False - elif rule['auto_open'] == 'yes': - obj.popup = True - - def _check_all(self, obj, check_func, apply_func): - # check rules in order - rules_num = [int(i) for i in self.config.keys()] - rules_num.sort() - to_remove = [] - for num in rules_num: - rule = self.config[str(num)] - if check_func(obj, rule): - apply_func(obj, rule) - if 'one_shot' in rule and rule['one_shot']: - to_remove.append(num) - # Should we stop after first valid rule ? - # break + event.command = rule['command'] - decal = 0 - num = 0 - while str(num) in self.config: - if num + decal in to_remove: - num2 = num - while str(num2 + 1) in self.config: - self.config[str(num2)] = self.config[str(num2 + 1)].copy() - num2 += 1 - del self.config[str(num2)] - decal += 1 - else: - num += 1 - - def _on_notification(self, obj): - self._check_all(obj, self._check_rule_apply_notification, - self._apply_rule_notification) - - def _on_message_received(self, obj): - self._check_all(obj, self._check_rule_apply_msg_received, - self._apply_rule_message_received) - - def _on_gc_message_received(self, obj): - self._check_all(obj, self._check_rule_apply_msg_received, - self._apply_rule_message_received) - - def _on_presence_received(self, obj): - if obj.old_show < 2 and obj.new_show > 1: - check_func = self._check_rule_apply_connected - elif obj.old_show > 1 and obj.new_show < 2: - check_func = self._check_rule_apply_disconnected - else: - check_func = self._check_rule_apply_status_changed - self._check_all(obj, check_func, self._apply_rule_presence_received) + if rule['popup'] == 'no': + event.show_notification = False + elif rule['popup'] == 'yes': + event.show_notification = True |