from flask import Flask, request, jsonify, render_template import mysql.connector import json import os from flask_socketio import SocketIO # Load configuration CONFIG_FILE = "config.json" def load_config(): with open(CONFIG_FILE, "r", encoding="utf-8") as config_file: return json.load(config_file) def save_config(updated_config): with open(CONFIG_FILE, "w", encoding="utf-8") as config_file: json.dump(updated_config, config_file, indent=4, ensure_ascii=False) def translate(key): return translations.get(config.get("language", "en"), {}).get(key, key) config = load_config() db_config = config["database"] matrix_size = config["matrix_size"] skip_n = config.get("skip_n", True) rtl = config.get("rtl", False) # Load translations with open("translations.json", "r", encoding="utf-8") as trans_file: translations = json.load(trans_file) app = Flask(__name__) app.config['JSON_AS_ASCII'] = False # Ensure UTF-8 support socketio = SocketIO(app, cors_allowed_origins="*") def init_db(): try: conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS storage ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), phone VARCHAR(20), location VARCHAR(10), bulk BOOLEAN)''') conn.commit() except Exception as e: print(f"Database initialization error: {e}") finally: if 'conn' in locals() and conn.is_connected(): conn.close() @app.route('/') def index(): return render_template("index.html", rtl=rtl) @app.route('/store', methods=['POST']) def store_item(): try: data = request.json name = data.get("name") phone = data.get("phone") location = data.get("location") bulk = data.get("bulk", 0) conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute("INSERT INTO storage (name, phone, location, bulk) VALUES (%s, %s, %s, %s)", (name, phone, location, bulk)) conn.commit() socketio.emit("update", {"message": translate("item_stored")}) return jsonify({"message": translate("item_stored")}) except Exception as e: print(f"Error storing item: {e}") return jsonify({"error": "An error occurred"}), 500 finally: if 'conn' in locals() and conn.is_connected(): conn.close() @app.route('/retrieve', methods=['GET']) def retrieve_items(): try: phone = request.args.get("phone") conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute("SELECT * FROM storage WHERE phone = %s", (phone,)) items = cursor.fetchall() return jsonify(items) except Exception as e: print(f"Error retrieving items: {e}") return jsonify({"error": "An error occurred"}), 500 finally: if 'conn' in locals() and conn.is_connected(): conn.close() @app.route('/remove', methods=['POST']) def remove_item(): try: data = request.json item_id = data.get("id") conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute("DELETE FROM storage WHERE id = %s", (item_id,)) conn.commit() socketio.emit("update", {"message": translate("item_removed")}) return jsonify({"message": translate("item_removed")}) except Exception as e: print(f"Error removing item: {e}") return jsonify({"error": "An error occurred"}), 500 finally: if 'conn' in locals() and conn.is_connected(): conn.close() @app.route('/config', methods=['GET', 'POST']) def configure_app(): global config, db_config, matrix_size, skip_n, rtl # Move this line to the start of the function if request.method == 'GET': return jsonify(config) try: new_config = request.json save_config(new_config) # Reload configuration config = load_config() db_config = config["database"] matrix_size = config["matrix_size"] skip_n = config.get("skip_n", True) rtl = config.get("rtl", False) return jsonify({"message": "Configuration updated successfully"}) except Exception as e: print(f"Error updating config: {e}") return jsonify({"error": "Failed to update config"}), 500 if __name__ == '__main__': init_db() socketio.run(app, host='0.0.0.0', port=5000, debug=True)