mirror of
https://github.com/FoggedLens/deflock-app.git
synced 2026-08-16 16:10:20 +02:00
settings area metadata, offline areas support for tile types
This commit is contained in:
@@ -182,6 +182,10 @@ class OfflineAreaService {
|
||||
void Function(double progress)? onProgress,
|
||||
void Function(OfflineAreaStatus status)? onComplete,
|
||||
String? name,
|
||||
String? tileProviderId,
|
||||
String? tileProviderName,
|
||||
String? tileTypeId,
|
||||
String? tileTypeName,
|
||||
}) async {
|
||||
OfflineArea? area;
|
||||
for (final a in _areas) {
|
||||
@@ -202,6 +206,10 @@ class OfflineAreaService {
|
||||
maxZoom: maxZoom,
|
||||
directory: directory,
|
||||
isPermanent: area?.isPermanent ?? false,
|
||||
tileProviderId: tileProviderId,
|
||||
tileProviderName: tileProviderName,
|
||||
tileTypeId: tileTypeId,
|
||||
tileTypeName: tileTypeName,
|
||||
);
|
||||
_areas.add(area);
|
||||
await saveAreasToDisk();
|
||||
|
||||
@@ -20,6 +20,12 @@ class OfflineArea {
|
||||
List<OsmCameraNode> cameras;
|
||||
int sizeBytes; // Disk size in bytes
|
||||
final bool isPermanent; // Not user-deletable if true
|
||||
|
||||
// Tile provider metadata (null for legacy areas)
|
||||
final String? tileProviderId;
|
||||
final String? tileProviderName;
|
||||
final String? tileTypeId;
|
||||
final String? tileTypeName;
|
||||
|
||||
OfflineArea({
|
||||
required this.id,
|
||||
@@ -35,6 +41,10 @@ class OfflineArea {
|
||||
this.cameras = const [],
|
||||
this.sizeBytes = 0,
|
||||
this.isPermanent = false,
|
||||
this.tileProviderId,
|
||||
this.tileProviderName,
|
||||
this.tileTypeId,
|
||||
this.tileTypeName,
|
||||
});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
@@ -54,6 +64,10 @@ class OfflineArea {
|
||||
'cameras': cameras.map((c) => c.toJson()).toList(),
|
||||
'sizeBytes': sizeBytes,
|
||||
'isPermanent': isPermanent,
|
||||
'tileProviderId': tileProviderId,
|
||||
'tileProviderName': tileProviderName,
|
||||
'tileTypeId': tileTypeId,
|
||||
'tileTypeName': tileTypeName,
|
||||
};
|
||||
|
||||
static OfflineArea fromJson(Map<String, dynamic> json) {
|
||||
@@ -77,6 +91,27 @@ class OfflineArea {
|
||||
.map((e) => OsmCameraNode.fromJson(e)).toList(),
|
||||
sizeBytes: json['sizeBytes'] ?? 0,
|
||||
isPermanent: json['isPermanent'] ?? false,
|
||||
tileProviderId: json['tileProviderId'],
|
||||
tileProviderName: json['tileProviderName'],
|
||||
tileTypeId: json['tileTypeId'],
|
||||
tileTypeName: json['tileTypeName'],
|
||||
);
|
||||
}
|
||||
|
||||
/// Get display text for the tile provider used in this area
|
||||
String get tileProviderDisplay {
|
||||
if (tileProviderName != null && tileTypeName != null) {
|
||||
return '$tileProviderName - $tileTypeName';
|
||||
} else if (tileTypeName != null) {
|
||||
return tileTypeName!;
|
||||
} else if (tileProviderName != null) {
|
||||
return tileProviderName!;
|
||||
} else {
|
||||
// Legacy area - assume OSM
|
||||
return 'OpenStreetMap (Legacy)';
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if this area has tile provider metadata
|
||||
bool get hasTileProviderInfo => tileProviderId != null && tileTypeId != null;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,10 @@ class WorldAreaManager {
|
||||
required int maxZoom,
|
||||
required String directory,
|
||||
String? name,
|
||||
String? tileProviderId,
|
||||
String? tileProviderName,
|
||||
String? tileTypeId,
|
||||
String? tileTypeName,
|
||||
}) downloadArea,
|
||||
) async {
|
||||
// Find existing world area
|
||||
@@ -66,6 +70,10 @@ class WorldAreaManager {
|
||||
required int maxZoom,
|
||||
required String directory,
|
||||
String? name,
|
||||
String? tileProviderId,
|
||||
String? tileProviderName,
|
||||
String? tileTypeId,
|
||||
String? tileTypeName,
|
||||
}) downloadArea,
|
||||
) async {
|
||||
if (world.status == OfflineAreaStatus.complete) return;
|
||||
@@ -97,7 +105,7 @@ class WorldAreaManager {
|
||||
world.status = OfflineAreaStatus.downloading;
|
||||
debugPrint('WorldAreaManager: Starting world area download. ${world.tilesDownloaded}/${world.tilesTotal} tiles found.');
|
||||
|
||||
// Start download (fire and forget)
|
||||
// Start download (fire and forget) - use OSM for world areas
|
||||
downloadArea(
|
||||
id: world.id,
|
||||
bounds: world.bounds,
|
||||
@@ -105,6 +113,10 @@ class WorldAreaManager {
|
||||
maxZoom: world.maxZoom,
|
||||
directory: world.directory,
|
||||
name: world.name,
|
||||
tileProviderId: 'openstreetmap',
|
||||
tileProviderName: 'OpenStreetMap',
|
||||
tileTypeId: 'osm_street',
|
||||
tileTypeName: 'Street Map',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user