From 93a7df54629a78b43041630a79af947beccd76e6 Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Thu, 24 Oct 2024 18:36:54 +0200 Subject: [PATCH] "Send test notification" in "Restock" mode was not working correclty when restock tokens "{{restock.price}}" were in the notification body --- changedetectionio/flask_app.py | 19 ++++++++++++------- changedetectionio/static/js/notifications.js | 9 +++------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/changedetectionio/flask_app.py b/changedetectionio/flask_app.py index a1bb862e..b0c9340c 100644 --- a/changedetectionio/flask_app.py +++ b/changedetectionio/flask_app.py @@ -537,19 +537,22 @@ def changedetection_app(config=None, datastore_o=None): import random from .apprise_asset import asset apobj = apprise.Apprise(asset=asset) + # so that the custom endpoints are registered from changedetectionio.apprise_plugin import apprise_custom_api_call_wrapper is_global_settings_form = request.args.get('mode', '') == 'global-settings' is_group_settings_form = request.args.get('mode', '') == 'group-settings' + # Use an existing random one on the global/main settings form if not watch_uuid and (is_global_settings_form or is_group_settings_form) \ and datastore.data.get('watching'): - logger.debug(f"Send test notification - Choosing random Watch {watch_uuid}") watch_uuid = random.choice(list(datastore.data['watching'].keys())) - watch = datastore.data['watching'].get(watch_uuid) - else: - watch = None + + if not watch_uuid: + return make_response("Error: You must have atleast one watch configured for 'test notification' to work", 400) + + watch = datastore.data['watching'].get(watch_uuid) notification_urls = request.form['notification_urls'].strip().splitlines() @@ -569,12 +572,12 @@ def changedetection_app(config=None, datastore_o=None): if not notification_urls: - return 'No Notification URLs set/found' + return 'Error: No Notification URLs set/found' for n_url in notification_urls: if len(n_url.strip()): if not apobj.add(n_url): - return f'Error - {n_url} is not a valid AppRise URL.' + return f'Error: {n_url} is not a valid AppRise URL.' try: # use the same as when it is triggered, but then override it with the form test values @@ -593,11 +596,13 @@ def changedetection_app(config=None, datastore_o=None): if 'notification_body' in request.form and request.form['notification_body'].strip(): n_object['notification_body'] = request.form.get('notification_body', '').strip() + n_object.update(watch.extra_notification_token_values()) + from . import update_worker new_worker = update_worker.update_worker(update_q, notification_q, app, datastore) new_worker.queue_notification_for_watch(notification_q=notification_q, n_object=n_object, watch=watch) except Exception as e: - return make_response({'error': str(e)}, 400) + return make_response(f"Error: str(e)", 400) return 'OK - Sent test notifications' diff --git a/changedetectionio/static/js/notifications.js b/changedetectionio/static/js/notifications.js index 95f3eacf..95a0763c 100644 --- a/changedetectionio/static/js/notifications.js +++ b/changedetectionio/static/js/notifications.js @@ -28,17 +28,14 @@ $(document).ready(function() { url: notification_base_url, data : data, statusCode: { - 400: function() { - // More than likely the CSRF token was lost when the server restarted - alert("There was a problem processing the request, please reload the page."); + 400: function(data) { + // More than likely the CSRF token was lost when the server restarted + alert(data.responseText); } } }).done(function(data){ console.log(data); alert(data); - }).fail(function(data){ - console.log(data); - alert('There was an error communicating with the server.'); }) }); });