From 5fcf4620dcd019fecbc685347702ae61ad3b6d4b Mon Sep 17 00:00:00 2001 From: ske087 Date: Thu, 13 Mar 2025 11:52:46 +0200 Subject: [PATCH] corected the delete function on settings page --- server_api/app.py | 94 ++++++++++++++++------------- server_api/instance/logs.db | Bin 0 -> 36864 bytes server_api/templates/settings.html | 18 +++--- 3 files changed, 62 insertions(+), 50 deletions(-) create mode 100644 server_api/instance/logs.db diff --git a/server_api/app.py b/server_api/app.py index 7bfd0fc..c020097 100644 --- a/server_api/app.py +++ b/server_api/app.py @@ -38,6 +38,14 @@ class MirServerSettings(db.Model): password = db.Column(db.String(100), nullable=False) auth_header = db.Column(db.String(500), nullable=False) +class BoardSettings(db.Model): + id = db.Column(db.Integer, primary_key=True) + hostname = db.Column(db.String(100), nullable=False) + mission1 = db.Column(db.String(100), nullable=False) + mission2 = db.Column(db.String(100), nullable=False) + mission3 = db.Column(db.String(100), nullable=False) + mission4 = db.Column(db.String(100), nullable=False) + # Create the database if it does not exist if not os.path.exists('instance/logs.db'): with app.app_context(): @@ -70,10 +78,6 @@ def log_message(): input2_status = latest_log.input2_status if latest_log else 'off' input3_status = latest_log.input3_status if latest_log else 'off' input4_status = latest_log.input4_status if latest_log else 'off' - mission1 = latest_log.mission1 if latest_log else '' - mission2 = latest_log.mission2 if latest_log else '' - mission3 = latest_log.mission3 if latest_log else '' - mission4 = latest_log.mission4 if latest_log else '' if hostname and ip_address and message: # Parse the message to update relay status @@ -97,30 +101,35 @@ def log_message(): action = 'on' if "pressed" in message else 'off' if input_index == 1: input1_status = action - if action == 'on': - execute_mission(mission1) elif input_index == 2: input2_status = action - if action == 'on': - execute_mission(mission2) elif input_index == 3: input3_status = action - if action == 'on': - execute_mission(mission3) elif input_index == 4: input4_status = action - if action == 'on': - execute_mission(mission4) new_log = Log( hostname=hostname, ip_address=ip_address, message=message, relay1_status=relay1_status, relay2_status=relay2_status, relay3_status=relay3_status, relay4_status=relay4_status, input1_status=input1_status, input2_status=input2_status, - input3_status=input3_status, input4_status=input4_status, - mission1=mission1, mission2=mission2, mission3=mission3, mission4=mission4 + input3_status=input3_status, input4_status=input4_status ) db.session.add(new_log) + + # Check if the board settings already exist + board_settings = BoardSettings.query.filter_by(hostname=hostname).first() + if not board_settings: + # Initialize board settings if they do not exist + board_settings = BoardSettings( + hostname=hostname, + mission1='', + mission2='', + mission3='', + mission4='' + ) + db.session.add(board_settings) + db.session.commit() return jsonify({'status': 'success', 'message': 'Log saved'}), 201 return jsonify({'status': 'error', 'message': 'Invalid data'}), 400 @@ -185,7 +194,14 @@ def view_board(hostname): @app.route('/delete_board/', methods=['POST']) def delete_board(hostname): + # Delete all logs related to the board Log.query.filter_by(hostname=hostname).delete() + + # Delete the board settings if they exist + board_settings = BoardSettings.query.filter_by(hostname=hostname).first() + if board_settings: + db.session.delete(board_settings) + db.session.commit() flash(f'Board {hostname} and its settings have been deleted.', 'success') return redirect(url_for('settings')) @@ -223,20 +239,15 @@ def settings(): mir_user = app.config.get('MIR_USER', '') mir_password = app.config.get('MIR_PASSWORD', '') mir_auth_header = app.config.get('MIR_AUTH_HEADER', '') - boards = Log.query.with_entities(Log.hostname).distinct().all() + boards = BoardSettings.query.all() board_settings = [] for board in boards: - latest_log = Log.query.filter_by(hostname=board.hostname).order_by(Log.timestamp.desc()).first() board_settings.append({ 'hostname': board.hostname, - 'input1': latest_log.input1_status if latest_log else 'off', - 'input2': latest_log.input2_status if latest_log else 'off', - 'input3': latest_log.input3_status if latest_log else 'off', - 'input4': latest_log.input4_status if latest_log else 'off', - 'mission1': latest_log.mission1 if latest_log else '', - 'mission2': latest_log.mission2 if latest_log else '', - 'mission3': latest_log.mission3 if latest_log else '', - 'mission4': latest_log.mission4 if latest_log else '' + 'mission1': board.mission1, + 'mission2': board.mission2, + 'mission3': board.mission3, + 'mission4': board.mission4 }) return render_template('settings.html', cleanup_time=cleanup_time, mir_ip=mir_ip, mir_user=mir_user, mir_password=mir_password, mir_auth_header=mir_auth_header, boards=board_settings) @@ -268,29 +279,28 @@ def set_mir_server(): @app.route('/set_board_settings/', methods=['POST']) def set_board_settings(hostname): - input1 = request.form.get('input1') - input2 = request.form.get('input2') - input3 = request.form.get('input3') - input4 = request.form.get('input4') mission1 = request.form.get('mission1') mission2 = request.form.get('mission2') mission3 = request.form.get('mission3') mission4 = request.form.get('mission4') - if input1 and input2 and input3 and input4 and mission1 and mission2 and mission3 and mission4: - latest_log = Log.query.filter_by(hostname=hostname).order_by(Log.timestamp.desc()).first() - if latest_log: - latest_log.input1_status = input1 - latest_log.input2_status = input2 - latest_log.input3_status = input3 - latest_log.input4_status = input4 - latest_log.mission1 = mission1 - latest_log.mission2 = mission2 - latest_log.mission3 = mission3 - latest_log.mission4 = mission4 - db.session.commit() - flash('Board settings updated successfully!', 'success') + if mission1 and mission2 and mission3 and mission4: + board_settings = BoardSettings.query.filter_by(hostname=hostname).first() + if board_settings: + board_settings.mission1 = mission1 + board_settings.mission2 = mission2 + board_settings.mission3 = mission3 + board_settings.mission4 = mission4 else: - flash('No logs found for the specified board.', 'danger') + board_settings = BoardSettings( + hostname=hostname, + mission1=mission1, + mission2=mission2, + mission3=mission3, + mission4=mission4 + ) + db.session.add(board_settings) + db.session.commit() + flash('Board settings updated successfully!', 'success') else: flash('Invalid board settings!', 'danger') return redirect(url_for('settings')) diff --git a/server_api/instance/logs.db b/server_api/instance/logs.db new file mode 100644 index 0000000000000000000000000000000000000000..a7690674d7ad9e95ac5eb38828c4a66fcbce5018 GIT binary patch literal 36864 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 BASM6+ literal 0 HcmV?d00001 diff --git a/server_api/templates/settings.html b/server_api/templates/settings.html index 9dabcd5..a918f6d 100644 --- a/server_api/templates/settings.html +++ b/server_api/templates/settings.html @@ -45,6 +45,9 @@
+

Settings

@@ -96,33 +99,32 @@
- +
- +
- +
- +
- - -
+
+ +
{% endfor %}
- Back to Main Page \ No newline at end of file