From 79157e10437c02f3142e0c87c3a1140d1a7e64f3 Mon Sep 17 00:00:00 2001 From: shenlong <139912620+shenlong-tanwen@users.noreply.github.com> Date: Fri, 25 Jul 2025 00:58:40 +0530 Subject: [PATCH] fix: fallback auto grouping to day grouping (#20156) fallback auto grouping to day grouping Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> --- mobile/lib/domain/models/timeline.model.dart | 1 + mobile/lib/domain/services/timeline.service.dart | 8 ++++++-- .../infrastructure/repositories/timeline.repository.dart | 4 ++-- .../widgets/timeline/fixed/segment_builder.dart | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mobile/lib/domain/models/timeline.model.dart b/mobile/lib/domain/models/timeline.model.dart index f3b688b8b8..98a37d619c 100644 --- a/mobile/lib/domain/models/timeline.model.dart +++ b/mobile/lib/domain/models/timeline.model.dart @@ -3,6 +3,7 @@ import 'package:immich_mobile/domain/utils/event_stream.dart'; enum GroupAssetsBy { day, month, + auto, none; } diff --git a/mobile/lib/domain/services/timeline.service.dart b/mobile/lib/domain/services/timeline.service.dart index 0d31f06e74..26335ad3cf 100644 --- a/mobile/lib/domain/services/timeline.service.dart +++ b/mobile/lib/domain/services/timeline.service.dart @@ -33,8 +33,12 @@ class TimelineFactory { }) : _timelineRepository = timelineRepository, _settingsService = settingsService; - GroupAssetsBy get groupBy => - GroupAssetsBy.values[_settingsService.get(Setting.groupAssetsBy)]; + GroupAssetsBy get groupBy { + final group = + GroupAssetsBy.values[_settingsService.get(Setting.groupAssetsBy)]; + // We do not support auto grouping in the new timeline yet, fallback to day grouping + return group == GroupAssetsBy.auto ? GroupAssetsBy.day : group; + } TimelineService main(List timelineUsers) => TimelineService(_timelineRepository.main(timelineUsers, groupBy)); diff --git a/mobile/lib/infrastructure/repositories/timeline.repository.dart b/mobile/lib/infrastructure/repositories/timeline.repository.dart index 2916993a9b..b1fc540bd8 100644 --- a/mobile/lib/infrastructure/repositories/timeline.repository.dart +++ b/mobile/lib/infrastructure/repositories/timeline.repository.dart @@ -539,7 +539,7 @@ extension on Expression { // to create the correct time bucket final localTimeExp = modify(const DateTimeModifier.localTime()); return switch (groupBy) { - GroupAssetsBy.day => localTimeExp.date, + GroupAssetsBy.day || GroupAssetsBy.auto => localTimeExp.date, GroupAssetsBy.month => localTimeExp.strftime("%Y-%m"), GroupAssetsBy.none => throw ArgumentError( "GroupAssetsBy.none is not supported for date formatting", @@ -551,7 +551,7 @@ extension on Expression { extension on String { DateTime dateFmt(GroupAssetsBy groupBy) { final format = switch (groupBy) { - GroupAssetsBy.day => "y-M-d", + GroupAssetsBy.day || GroupAssetsBy.auto => "y-M-d", GroupAssetsBy.month => "y-M", GroupAssetsBy.none => throw ArgumentError( "GroupAssetsBy.none is not supported for date formatting", diff --git a/mobile/lib/presentation/widgets/timeline/fixed/segment_builder.dart b/mobile/lib/presentation/widgets/timeline/fixed/segment_builder.dart index 327e690267..6e3af3fd3d 100644 --- a/mobile/lib/presentation/widgets/timeline/fixed/segment_builder.dart +++ b/mobile/lib/presentation/widgets/timeline/fixed/segment_builder.dart @@ -35,7 +35,8 @@ class FixedSegmentBuilder extends SegmentBuilder { final timelineHeader = switch (groupBy) { GroupAssetsBy.month => HeaderType.month, - GroupAssetsBy.day => + GroupAssetsBy.day || + GroupAssetsBy.auto => bucket is TimeBucket && bucket.date.month != previousDate?.month ? HeaderType.monthAndDay : HeaderType.day,