diff --git a/app.py b/app.py index e1cb3e4..4a6a5db 100644 --- a/app.py +++ b/app.py @@ -1,4 +1,4 @@ -from flask import Flask, render_template, request, session, jsonify +from flask import Flask, render_template, request, session, jsonify, send_from_directory from paho.mqtt import client as mqtt_client from werkzeug.security import generate_password_hash, check_password_hash import json @@ -569,6 +569,18 @@ def save_config_file(): conn.close() return jsonify({"success": True}) +@app.route('/manifest.json') +def serve_manifest(): + return send_from_directory('.', 'manifest.json') + +@app.route('/sw.js') +def serve_sw(): + return send_from_directory('.', 'sw.js') + +@app.route('/icon-512.png') +def serve_icon(): + return send_from_directory('.', 'icon-512.png') + if __name__ == '__main__': threading.Thread(target=auto_update_ids, daemon=True).start() app.run(host='0.0.0.0', port=5000) diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..74eef20 --- /dev/null +++ b/manifest.json @@ -0,0 +1,15 @@ +{ + "name": "Fleet Control Console", + "short_name": "Fleet C2", + "start_url": "/", + "display": "standalone", + "background_color": "#0f172a", + "theme_color": "#3b82f6", + "icons": [ + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..aeaeeeb --- /dev/null +++ b/sw.js @@ -0,0 +1,18 @@ +const CACHE_NAME = 'fleet-c2-v1'; +const urlsToCache = [ + '/', + '/manifest.json' +]; + +self.addEventListener('install', event => { + event.waitUntil( + caches.open(CACHE_NAME) + .then(cache => cache.addAll(urlsToCache)) + ); +}); + +self.addEventListener('fetch', event => { + event.respondWith( + fetch(event.request).catch(() => caches.match(event.request)) + ); +}); diff --git a/templates/index.html b/templates/index.html index 45d7a3e..82c0ae8 100644 --- a/templates/index.html +++ b/templates/index.html @@ -5,6 +5,11 @@