From 0069f909ea38ea0b576d265f0c351fcc2fbfdb52 Mon Sep 17 00:00:00 2001 From: stopflock Date: Thu, 7 Aug 2025 11:27:50 -0500 Subject: [PATCH] remove cameras from world map area --- lib/screens/settings_screen.dart | 85 +++++++++++++------------- lib/services/offline_area_service.dart | 10 ++- 2 files changed, 51 insertions(+), 44 deletions(-) diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index c47eaa3..a635bd3 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -421,7 +421,9 @@ class _OfflineAreasSectionState extends State<_OfflineAreasSection> { subtitle += '\nTiles: ${area.tilesTotal}'; } subtitle += '\nSize: $diskStr'; - subtitle += '\nCameras: ${area.cameras.length}'; + if (!area.isPermanent) { + subtitle += '\nCameras: ${area.cameras.length}'; + } return Card( child: ListTile( leading: Icon(area.status == OfflineAreaStatus.complete @@ -436,46 +438,47 @@ class _OfflineAreasSectionState extends State<_OfflineAreasSection> { ? area.name : 'Area ${area.id.substring(0, 6)}...'), ), - IconButton( - icon: const Icon(Icons.edit, size: 20), - tooltip: 'Rename area', - onPressed: () async { - String? newName = await showDialog( - context: context, - builder: (ctx) { - final ctrl = TextEditingController(text: area.name); - return AlertDialog( - title: const Text('Rename Offline Area'), - content: TextField( - controller: ctrl, - maxLength: 40, - decoration: const InputDecoration(labelText: 'Area Name'), - autofocus: true, - ), - actions: [ - TextButton( - onPressed: () => Navigator.pop(ctx), - child: const Text('Cancel'), + if (!area.isPermanent) + IconButton( + icon: const Icon(Icons.edit, size: 20), + tooltip: 'Rename area', + onPressed: () async { + String? newName = await showDialog( + context: context, + builder: (ctx) { + final ctrl = TextEditingController(text: area.name); + return AlertDialog( + title: const Text('Rename Offline Area'), + content: TextField( + controller: ctrl, + maxLength: 40, + decoration: const InputDecoration(labelText: 'Area Name'), + autofocus: true, ), - ElevatedButton( - onPressed: () { - Navigator.pop(ctx, ctrl.text.trim()); - }, - child: const Text('Rename'), - ), - ], - ); - }, - ); - if (newName != null && newName.trim().isNotEmpty) { - setState(() { - area.name = newName.trim(); - service.saveAreasToDisk(); - }); - } - }, - ), - if (area.isPermanent) + actions: [ + TextButton( + onPressed: () => Navigator.pop(ctx), + child: const Text('Cancel'), + ), + ElevatedButton( + onPressed: () { + Navigator.pop(ctx, ctrl.text.trim()); + }, + child: const Text('Rename'), + ), + ], + ); + }, + ); + if (newName != null && newName.trim().isNotEmpty) { + setState(() { + area.name = newName.trim(); + service.saveAreasToDisk(); + }); + } + }, + ), + if (area.isPermanent && area.status != OfflineAreaStatus.downloading) IconButton( icon: const Icon(Icons.refresh, color: Colors.blue), tooltip: 'Refresh/re-download world tiles', @@ -494,7 +497,7 @@ class _OfflineAreasSectionState extends State<_OfflineAreasSection> { setState(() {}); }, ) - else if (area.status != OfflineAreaStatus.downloading) + else if (!area.isPermanent && area.status != OfflineAreaStatus.downloading) IconButton( icon: const Icon(Icons.delete, color: Colors.red), tooltip: 'Delete offline area', diff --git a/lib/services/offline_area_service.dart b/lib/services/offline_area_service.dart index 0b73547..b8e2e19 100644 --- a/lib/services/offline_area_service.dart +++ b/lib/services/offline_area_service.dart @@ -212,9 +212,13 @@ class OfflineAreaService { } // STEP 2: Fetch cameras for this bbox (all, not limited!) - final cameras = await _downloadAllCameras(bounds); - area.cameras = cameras; - await _saveCameras(cameras, directory); + if (!area.isPermanent) { + final cameras = await _downloadAllCameras(bounds); + area.cameras = cameras; + await _saveCameras(cameras, directory); + } else { + area.cameras = []; + } await getAreaSizeBytes(area); area.status = OfflineAreaStatus.complete;