mirror of
https://github.com/immich-app/immich
synced 2025-11-14 17:36:12 +00:00
feat(mobile): drift map page
This commit is contained in:
parent
da5deffd03
commit
d308d023c2
15 changed files with 783 additions and 0 deletions
21
mobile/lib/domain/models/map.model.dart
Normal file
21
mobile/lib/domain/models/map.model.dart
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||
|
||||
class Marker {
|
||||
final LatLng location;
|
||||
final String assetId;
|
||||
|
||||
const Marker({
|
||||
required this.location,
|
||||
required this.assetId,
|
||||
});
|
||||
|
||||
@override
|
||||
bool operator ==(covariant Marker other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other.location == location && other.assetId == assetId;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => location.hashCode ^ assetId.hashCode;
|
||||
}
|
||||
36
mobile/lib/domain/services/map.service.dart
Normal file
36
mobile/lib/domain/services/map.service.dart
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import 'package:immich_mobile/domain/models/map.model.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/map.repository.dart';
|
||||
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||
|
||||
typedef MapMarkerSource = Stream<List<Marker>> Function(LatLngBounds bounds);
|
||||
|
||||
class MapFactory {
|
||||
final DriftMapRepository _mapRepository;
|
||||
|
||||
const MapFactory({
|
||||
required DriftMapRepository mapRepository,
|
||||
}) : _mapRepository = mapRepository;
|
||||
|
||||
MapService main(List<String> timelineUsers) => MapService(
|
||||
markerSource: (bounds) =>
|
||||
_mapRepository.watchMainMarker(timelineUsers, bounds: bounds),
|
||||
);
|
||||
|
||||
MapService remoteAlbum({required String albumId}) => MapService(
|
||||
markerSource: (bounds) =>
|
||||
_mapRepository.watchRemoteAlbumMarker(albumId, bounds: bounds),
|
||||
);
|
||||
}
|
||||
|
||||
class MapService {
|
||||
final MapMarkerSource _markerSource;
|
||||
|
||||
const MapService({
|
||||
required MapMarkerSource markerSource,
|
||||
}) : _markerSource = markerSource;
|
||||
|
||||
Stream<List<Marker>> Function(LatLngBounds bounds) get watchMarkers =>
|
||||
_markerSource;
|
||||
|
||||
Future<void> dispose() async {}
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ import 'package:immich_mobile/domain/services/setting.service.dart';
|
|||
import 'package:immich_mobile/domain/utils/event_stream.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/timeline.repository.dart';
|
||||
import 'package:immich_mobile/utils/async_mutex.dart';
|
||||
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||
|
||||
typedef TimelineAssetSource = Future<List<BaseAsset>> Function(int index, int count);
|
||||
|
||||
|
|
@ -57,6 +58,9 @@ class TimelineFactory {
|
|||
TimelineService(_timelineRepository.person(userId, personId, groupBy));
|
||||
|
||||
TimelineService fromAssets(List<BaseAsset> assets) => TimelineService(_timelineRepository.fromAssets(assets));
|
||||
|
||||
TimelineService map(LatLngBounds bounds) =>
|
||||
TimelineService(_timelineRepository.map(bounds, groupBy));
|
||||
}
|
||||
|
||||
class TimelineService {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue