From b13b66ec480c96d9c26db3ced992313eae3b25eb Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Mon, 27 Nov 2023 09:39:38 -0500 Subject: [PATCH] Update timeline "refresh" to reset the timeline, after prompting for confirmation. --- lib/controls/timeline/timeline_panel.dart | 22 +++++++++++----------- lib/models/timeline.dart | 11 +++++++---- lib/services/timeline_manager.dart | 5 ++--- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/lib/controls/timeline/timeline_panel.dart b/lib/controls/timeline/timeline_panel.dart index d8fe46e..2a6893f 100644 --- a/lib/controls/timeline/timeline_panel.dart +++ b/lib/controls/timeline/timeline_panel.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; +import 'package:relatica/globals.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import '../../models/TimelineIdentifiers.dart'; @@ -15,16 +16,15 @@ class TimelinePanel extends StatelessWidget { TimelinePanel({super.key, required this.timeline}); - Future update(TimelineManager manager) async { - await manager.updateTimeline( - timeline, - TimelineRefreshType.refresh, - ); - - await manager.updateTimeline( - timeline, - TimelineRefreshType.loadNewer, - ); + Future update(BuildContext context, TimelineManager manager) async { + final confirm = + await showYesNoDialog(context, 'Reload timeline from scratch?'); + if (confirm == true) { + await manager.updateTimeline( + timeline, + TimelineRefreshType.refresh, + ); + } } void scrollToTop() { @@ -41,7 +41,7 @@ class TimelinePanel extends StatelessWidget { final items = manager.getTimeline(timeline); return RefreshIndicator( onRefresh: () async { - update(manager); + update(context, manager); return; }, child: items.isEmpty diff --git a/lib/models/timeline.dart b/lib/models/timeline.dart index 2cd4def..768ccf1 100644 --- a/lib/models/timeline.dart +++ b/lib/models/timeline.dart @@ -1,12 +1,15 @@ import 'TimelineIdentifiers.dart'; import 'entry_tree_item.dart'; +const defaultLowestId = 9223372036854775807; +const defaultHighestId = 0; + class Timeline { final TimelineIdentifiers id; final List _posts = []; final Map _postsById = {}; - int _lowestStatusId = 9223372036854775807; - int _highestStatusId = 0; + int _lowestStatusId = defaultLowestId; + int _highestStatusId = defaultHighestId; int get highestStatusId => _highestStatusId; @@ -72,8 +75,8 @@ class Timeline { void clear() { _posts.clear(); _postsById.clear(); - _lowestStatusId = 0; - _highestStatusId = 0; + _lowestStatusId = defaultLowestId; + _highestStatusId = defaultHighestId; } @override diff --git a/lib/services/timeline_manager.dart b/lib/services/timeline_manager.dart index 85ac99f..407c101 100644 --- a/lib/services/timeline_manager.dart +++ b/lib/services/timeline_manager.dart @@ -192,9 +192,8 @@ class TimelineManager extends ChangeNotifier { late final int highestId; switch (refreshType) { case TimelineRefreshType.refresh: - lowestId = timeline.highestStatusId == 0 - ? timeline.highestStatusId - : timeline.highestStatusId + 1; + timeline.clear(); + lowestId = 0; highestId = 0; break; case TimelineRefreshType.loadOlder: