From 03424d34198121c59eed5d2b000776e14adbd35f Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Wed, 31 Aug 2022 13:09:55 +0200 Subject: [PATCH] Cleaner separation of watch/global notification settings Re #809 Re #562 Re #865 --- changedetectionio/forms.py | 2 ++ changedetectionio/model/Watch.py | 1 + changedetectionio/static/js/watch-settings.js | 31 +++++++++++++------ changedetectionio/templates/edit.html | 4 ++- changedetectionio/update_worker.py | 4 +-- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/changedetectionio/forms.py b/changedetectionio/forms.py index f5a10283..2b4f5318 100644 --- a/changedetectionio/forms.py +++ b/changedetectionio/forms.py @@ -355,6 +355,8 @@ class watchForm(commonSettingsForm): filter_failure_notification_send = BooleanField( 'Send a notification when the filter can no longer be found on the page', default=False) + notification_use_default = BooleanField('Use default/system notification settings', default=False) + def validate(self, **kwargs): if not super().validate(): return False diff --git a/changedetectionio/model/Watch.py b/changedetectionio/model/Watch.py index c59dd1da..f97f8c61 100644 --- a/changedetectionio/model/Watch.py +++ b/changedetectionio/model/Watch.py @@ -35,6 +35,7 @@ class model(dict): 'notification_title': default_notification_title, 'notification_body': default_notification_body, 'notification_format': default_notification_format, + 'notification_use_default': False, 'notification_muted': False, 'css_filter': '', 'last_error': False, diff --git a/changedetectionio/static/js/watch-settings.js b/changedetectionio/static/js/watch-settings.js index b45ca95d..8af98fb9 100644 --- a/changedetectionio/static/js/watch-settings.js +++ b/changedetectionio/static/js/watch-settings.js @@ -1,7 +1,7 @@ -$(document).ready(function() { - function toggle() { +$(document).ready(function () { + function toggle_fetch_backend() { if ($('input[name="fetch_backend"]:checked').val() == 'html_webdriver') { - if(playwright_enabled) { + if (playwright_enabled) { // playwright supports headers, so hide everything else // See #664 $('#requests-override-options #request-method').hide(); @@ -13,12 +13,8 @@ $(document).ready(function() { // selenium/webdriver doesnt support anything afaik, hide it all $('#requests-override-options').hide(); } - - $('#webdriver-override-options').show(); - } else { - $('#requests-override-options').show(); $('#requests-override-options *:hidden').show(); $('#webdriver-override-options').hide(); @@ -26,8 +22,25 @@ $(document).ready(function() { } $('input[name="fetch_backend"]').click(function (e) { - toggle(); + toggle_fetch_backend(); }); - toggle(); + toggle_fetch_backend(); + function toggle_default_notifications() { + var n=$('#notification_urls, #notification_title, #notification_body, #notification_format'); + if ($('#notification_use_default').is(':checked')) { + $(n).each(function (e) { + $(this).attr('readonly', true).css('opacity',0.5); + }); + } else { + $(n).each(function (e) { + $(this).attr('readonly', false).css('opacity',1); + }); + } + } + + $('#notification_use_default').click(function (e) { + toggle_default_notifications(); + }); + toggle_default_notifications(); }); diff --git a/changedetectionio/templates/edit.html b/changedetectionio/templates/edit.html index 1d18c4d8..e41f33f9 100644 --- a/changedetectionio/templates/edit.html +++ b/changedetectionio/templates/edit.html @@ -135,9 +135,11 @@ User-Agent: wonderbra 1.0") }}
- Note: These settings override the global settings for this watch.
+
+ {{ render_checkbox_field(form.notification_use_default) }} +
{{ render_common_settings_form(form, current_base_url, emailprefix) }}
diff --git a/changedetectionio/update_worker.py b/changedetectionio/update_worker.py index d56a9298..afe5c04f 100644 --- a/changedetectionio/update_worker.py +++ b/changedetectionio/update_worker.py @@ -41,7 +41,7 @@ class update_worker(threading.Thread): ) # Did it have any notification alerts to hit? - if len(watch['notification_urls']): + if not watch.get('notification_use_default') and len(watch['notification_urls']): print(">>> Notifications queued for UUID from watch {}".format(watch_uuid)) n_object['notification_urls'] = watch['notification_urls'] n_object['notification_title'] = watch['notification_title'] @@ -49,7 +49,7 @@ class update_worker(threading.Thread): n_object['notification_format'] = watch['notification_format'] # No? maybe theres a global setting, queue them all - elif len(self.datastore.data['settings']['application']['notification_urls']): + elif watch.get('notification_use_default') and len(self.datastore.data['settings']['application']['notification_urls']): print(">>> Watch notification URLs were empty, using GLOBAL notifications for UUID: {}".format(watch_uuid)) n_object['notification_urls'] = self.datastore.data['settings']['application']['notification_urls'] n_object['notification_title'] = self.datastore.data['settings']['application']['notification_title']