diff --git a/routes/adsb.py b/routes/adsb.py index 65e44a2..9a09168 100644 --- a/routes/adsb.py +++ b/routes/adsb.py @@ -944,10 +944,12 @@ def stream_adsb(): @adsb_bp.route('/dashboard') def adsb_dashboard(): """Popout ADS-B dashboard.""" + embedded = request.args.get('embedded', 'false') == 'true' return render_template( 'adsb_dashboard.html', shared_observer_location=SHARED_OBSERVER_LOCATION_ENABLED, adsb_auto_start=ADSB_AUTO_START, + embedded=embedded, ) diff --git a/routes/ais.py b/routes/ais.py index 038be87..091d1ae 100644 --- a/routes/ais.py +++ b/routes/ais.py @@ -540,7 +540,9 @@ def get_vessel_dsc(mmsi: str): @ais_bp.route('/dashboard') def ais_dashboard(): """Popout AIS dashboard.""" + embedded = request.args.get('embedded', 'false') == 'true' return render_template( 'ais_dashboard.html', shared_observer_location=SHARED_OBSERVER_LOCATION_ENABLED, + embedded=embedded, ) diff --git a/routes/satellite.py b/routes/satellite.py index f9fb3ca..f36c627 100644 --- a/routes/satellite.py +++ b/routes/satellite.py @@ -166,9 +166,11 @@ def _fetch_iss_realtime(observer_lat: Optional[float] = None, observer_lon: Opti @satellite_bp.route('/dashboard') def satellite_dashboard(): """Popout satellite tracking dashboard.""" + embedded = request.args.get('embedded', 'false') == 'true' return render_template( 'satellite_dashboard.html', shared_observer_location=SHARED_OBSERVER_LOCATION_ENABLED, + embedded=embedded, ) @@ -584,67 +586,67 @@ def list_tracked_satellites(): return jsonify({'status': 'success', 'satellites': sats}) -@satellite_bp.route('/tracked', methods=['POST']) -def add_tracked_satellites_endpoint(): - """Add one or more tracked satellites.""" - global _tle_cache - data = request.get_json(silent=True) - if not data: - return jsonify({'status': 'error', 'message': 'No data provided'}), 400 - - # Accept a single satellite dict or a list - sat_list = data if isinstance(data, list) else [data] - - normalized: list[dict] = [] - for sat in sat_list: - norad_id = str(sat.get('norad_id', sat.get('norad', ''))) - name = sat.get('name', '') - if not norad_id or not name: - continue +@satellite_bp.route('/tracked', methods=['POST']) +def add_tracked_satellites_endpoint(): + """Add one or more tracked satellites.""" + global _tle_cache + data = request.get_json(silent=True) + if not data: + return jsonify({'status': 'error', 'message': 'No data provided'}), 400 + + # Accept a single satellite dict or a list + sat_list = data if isinstance(data, list) else [data] + + normalized: list[dict] = [] + for sat in sat_list: + norad_id = str(sat.get('norad_id', sat.get('norad', ''))) + name = sat.get('name', '') + if not norad_id or not name: + continue tle1 = sat.get('tle_line1', sat.get('tle1')) tle2 = sat.get('tle_line2', sat.get('tle2')) enabled = sat.get('enabled', True) - normalized.append({ - 'norad_id': norad_id, - 'name': name, - 'tle_line1': tle1, - 'tle_line2': tle2, - 'enabled': bool(enabled), - 'builtin': False, - }) - - # Also inject into TLE cache if we have TLE data - if tle1 and tle2: - cache_key = name.replace(' ', '-').upper() - _tle_cache[cache_key] = (name, tle1, tle2) - - # Single inserts preserve previous behavior; list inserts use DB-level bulk path. - if len(normalized) == 1: - sat = normalized[0] - added = 1 if add_tracked_satellite( - sat['norad_id'], - sat['name'], - sat.get('tle_line1'), - sat.get('tle_line2'), - sat.get('enabled', True), - sat.get('builtin', False), - ) else 0 - else: - added = bulk_add_tracked_satellites(normalized) - - response_payload = { - 'status': 'success', - 'added': added, - 'processed': len(normalized), - } - - # Returning all tracked satellites for very large imports can stall the UI. - include_satellites = request.args.get('include_satellites', '').lower() == 'true' - if include_satellites or len(normalized) <= 32: - response_payload['satellites'] = get_tracked_satellites() - - return jsonify(response_payload) + normalized.append({ + 'norad_id': norad_id, + 'name': name, + 'tle_line1': tle1, + 'tle_line2': tle2, + 'enabled': bool(enabled), + 'builtin': False, + }) + + # Also inject into TLE cache if we have TLE data + if tle1 and tle2: + cache_key = name.replace(' ', '-').upper() + _tle_cache[cache_key] = (name, tle1, tle2) + + # Single inserts preserve previous behavior; list inserts use DB-level bulk path. + if len(normalized) == 1: + sat = normalized[0] + added = 1 if add_tracked_satellite( + sat['norad_id'], + sat['name'], + sat.get('tle_line1'), + sat.get('tle_line2'), + sat.get('enabled', True), + sat.get('builtin', False), + ) else 0 + else: + added = bulk_add_tracked_satellites(normalized) + + response_payload = { + 'status': 'success', + 'added': added, + 'processed': len(normalized), + } + + # Returning all tracked satellites for very large imports can stall the UI. + include_satellites = request.args.get('include_satellites', '').lower() == 'true' + if include_satellites or len(normalized) <= 32: + response_payload['satellites'] = get_tracked_satellites() + + return jsonify(response_payload) @satellite_bp.route('/tracked/', methods=['PUT']) diff --git a/templates/adsb_dashboard.html b/templates/adsb_dashboard.html index 11940ef..4a7ed47 100644 --- a/templates/adsb_dashboard.html +++ b/templates/adsb_dashboard.html @@ -54,8 +54,10 @@ + {% if not embedded %} {% set active_mode = 'adsb' %} {% include 'partials/nav.html' with context %} + {% endif %}
diff --git a/templates/ais_dashboard.html b/templates/ais_dashboard.html index f6ed869..aadcd42 100644 --- a/templates/ais_dashboard.html +++ b/templates/ais_dashboard.html @@ -54,8 +54,10 @@
+ {% if not embedded %} {% set active_mode = 'ais' %} {% include 'partials/nav.html' with context %} + {% endif %}
diff --git a/templates/layout/base_dashboard.html b/templates/layout/base_dashboard.html index 4853bd4..fb74507 100644 --- a/templates/layout/base_dashboard.html +++ b/templates/layout/base_dashboard.html @@ -166,7 +166,9 @@ {% block navigation %} {# Include the unified nav partial with active_mode set #} +{% if not embedded %} {% include 'partials/nav.html' with context %} +{% endif %} {% endblock %} {% block main %} diff --git a/templates/satellite_dashboard.html b/templates/satellite_dashboard.html index 6d399ac..818d569 100644 --- a/templates/satellite_dashboard.html +++ b/templates/satellite_dashboard.html @@ -74,8 +74,10 @@
+ {% if not embedded %} {% set active_mode = 'satellite' %} {% include 'partials/nav.html' with context %} + {% endif %}