diff --git a/changedetectionio/__init__.py b/changedetectionio/__init__.py index 3c2ee355..542c2fa5 100644 --- a/changedetectionio/__init__.py +++ b/changedetectionio/__init__.py @@ -400,6 +400,37 @@ def changedetection_app(config=None, datastore_o=None): return output + + # AJAX endpoint for sending a test + @app.route("/notification/send-test", methods=['POST']) + @login_required + def ajax_callback_send_notification_test(): + + import apprise + apobj = apprise.Apprise() + + # validate URLS + if not len(request.form['notification_urls'].strip()): + return make_response({'error': 'No Notification URLs set'}, 400) + + for server_url in request.form['notification_urls'].splitlines(): + if not apobj.add(server_url): + message = '{} is not a valid AppRise URL.'.format(server_url) + return make_response({'error': message}, 400) + + try: + n_object = {'watch_url': request.form['window_url'], + 'notification_urls': request.form['notification_urls'].splitlines(), + 'notification_title': request.form['notification_title'].strip(), + 'notification_body': request.form['notification_body'].strip(), + 'notification_format': request.form['notification_format'].strip() + } + notification_q.put(n_object) + except Exception as e: + return make_response({'error': str(e)}, 400) + + return 'OK' + @app.route("/scrub", methods=['GET', 'POST']) @login_required def scrub_page(): @@ -561,20 +592,6 @@ def changedetection_app(config=None, datastore_o=None): # Queue the watch for immediate recheck update_q.put(uuid) - if form.trigger_check.data: - if len(form.notification_urls.data): - n_object = {'watch_url': form.url.data.strip(), - 'notification_urls': form.notification_urls.data, - 'notification_title': form.notification_title.data, - 'notification_body': form.notification_body.data, - 'notification_format': form.notification_format.data, - 'uuid': uuid - } - notification_q.put(n_object) - flash('Test notification queued.') - else: - flash('No notification URLs set, cannot send test.', 'error') - # Diff page [edit] link should go back to diff page if request.args.get("next") and request.args.get("next") == 'diff' and not form.save_and_preview_button.data: return redirect(url_for('diff_history_page', uuid=uuid)) @@ -650,19 +667,6 @@ def changedetection_app(config=None, datastore_o=None): datastore.data['settings']['application']['ignore_whitespace'] = form.ignore_whitespace.data datastore.data['settings']['application']['real_browser_save_screenshot'] = form.real_browser_save_screenshot.data - if form.trigger_check.data: - if len(form.notification_urls.data): - n_object = {'watch_url': "Test from changedetection.io!", - 'notification_urls': form.notification_urls.data, - 'notification_title': form.notification_title.data, - 'notification_body': form.notification_body.data, - 'notification_format': form.notification_format.data, - } - notification_q.put(n_object) - flash('Test notification queued.') - else: - flash('No notification URLs set, cannot send test.', 'error') - if not os.getenv("SALTED_PASS", False) and form.password.encrypted_password: datastore.data['settings']['application']['password'] = form.password.encrypted_password flash("Password protection enabled.", 'notice') @@ -1027,10 +1031,14 @@ def changedetection_app(config=None, datastore_o=None): flash("Error") return redirect(url_for('index')) + @app.route("/api/delete", methods=['GET']) @login_required def api_delete(): uuid = request.args.get('uuid') + # More for testing, possible to return the first/only + if uuid == 'first': + uuid = list(datastore.data['watching'].keys()).pop() datastore.delete(uuid) flash('Deleted.') diff --git a/changedetectionio/forms.py b/changedetectionio/forms.py index ae73cb85..4dc7921a 100644 --- a/changedetectionio/forms.py +++ b/changedetectionio/forms.py @@ -306,7 +306,6 @@ class commonSettingsForm(Form): notification_title = StringField('Notification Title', default=default_notification_title, validators=[validators.Optional(), ValidateTokensList()]) notification_body = TextAreaField('Notification Body', default=default_notification_body, validators=[validators.Optional(), ValidateTokensList()]) notification_format = SelectField('Notification Format', choices=valid_notification_formats.keys(), default=default_notification_format) - trigger_check = BooleanField('Send test notification on save') fetch_backend = RadioField(u'Fetch Method', choices=content_fetcher.available_fetchers(), validators=[ValidateContentFetcherIsReady()]) extract_title_as_title = BooleanField('Extract
which has this one new line
+ + So let's see what happens. + Ohh yeah awesome