From 419a4fce9744de753fd38623df5054d0aca8f2a6 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Mon, 21 Apr 2025 22:04:05 +0530 Subject: [PATCH] [client] Move recent marking from router delegate to explorer controller --- client/lib/ui/app/app.dart | 40 +--------------- client/lib/ui/app/router.dart | 47 +++++++++++++++---- .../destination_picker.dart | 2 +- .../lib/ui/explorer/explorer_controller.dart | 5 +- client/lib/ui/explorer/page.dart | 12 ++--- 5 files changed, 49 insertions(+), 57 deletions(-) diff --git a/client/lib/ui/app/app.dart b/client/lib/ui/app/app.dart index 0a0b7eba..84d2a6e0 100644 --- a/client/lib/ui/app/app.dart +++ b/client/lib/ui/app/app.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_state_notifier/flutter_state_notifier.dart'; import 'package:offtheline/offtheline.dart'; @@ -9,7 +8,6 @@ import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/libphylum/phylum_api_types.dart'; import 'package:phylum/ui/app/action_queue_status_notifier.dart'; import 'package:phylum/ui/logout/logout_app.dart'; -import 'package:phylum/ui/explorer/page.dart'; import 'package:provider/provider.dart'; class PhylumApp extends StatefulWidget { @@ -37,7 +35,7 @@ class _PhylumAppState extends State { @override void initState() { super.initState(); - _routerDelegate = PhylumRouterDelegate(account: context.read()); + _routerDelegate = PhylumRouterDelegate(); _listener = AppLifecycleListener(onResume: () { final account = context.read(); account.userRepository.refresh(); @@ -79,39 +77,3 @@ class _PhylumAppState extends State { return const LogoutApp(); } } - -class PhylumRouteInformationParser extends RouteInformationParser { - const PhylumRouteInformationParser(); - - @override - Future parseRouteInformation(RouteInformation routeInformation) { - final uri = routeInformation.uri; - final segments = uri.pathSegments; - - if (segments.isEmpty) { - return SynchronousFuture(const ExplorerPageHome()); - } - if (segments.length == 1) { - if (segments[0] == 'home') { - return SynchronousFuture(const ExplorerPageHome()); - } - if (segments[0] == 'recents') { - return SynchronousFuture(const ExplorerPageRecents()); - } - if (segments[0] == 'shared') { - return SynchronousFuture(const ExplorerPageShared()); - } - if (segments[0] == 'trash') { - return SynchronousFuture(const ExplorerPageTrash()); - } - } else if (segments.length == 2 && segments[0] == 'folder') { - return SynchronousFuture(ExplorerPageFolder(folderId: segments[1])); - } - return SynchronousFuture(ExplorerPageFolder(folderId: 'unknown')); - } - - @override - RouteInformation? restoreRouteInformation(ExplorerPage configuration) { - return RouteInformation(uri: configuration.uri); - } -} diff --git a/client/lib/ui/app/router.dart b/client/lib/ui/app/router.dart index 6fb4a2d6..d8663486 100644 --- a/client/lib/ui/app/router.dart +++ b/client/lib/ui/app/router.dart @@ -1,7 +1,5 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:phylum/libphylum/db/resource_helpers.dart'; -import 'package:phylum/libphylum/phylum_account.dart'; import 'package:phylum/ui/app/app_layout.dart'; import 'package:provider/provider.dart'; @@ -10,8 +8,6 @@ import '../explorer/page.dart'; class PhylumRouterDelegate extends RouterDelegate with ChangeNotifier, PopNavigatorRouterDelegateMixin { @override final navigatorKey = GlobalKey(); - - final PhylumAccount? _account; ExplorerPage? _current; List _back = const []; List _forward = const []; @@ -21,9 +17,7 @@ class PhylumRouterDelegate extends RouterDelegate with ChangeNotif @override ExplorerPage? get currentConfiguration => _current; - PhylumRouterDelegate({required PhylumAccount? account, ExplorerPage? page}) - : _account = account, - _current = page; + PhylumRouterDelegate({ExplorerPage? page}) : _current = page; void go(ExplorerPage page) { if (_current != page) { @@ -31,9 +25,6 @@ class PhylumRouterDelegate extends RouterDelegate with ChangeNotif _forward = const []; _current = page; notifyListeners(); - if (page is ExplorerPageFolder && _account != null && page.folderId != _account.userHome) { - _account.db.markResourceAccess(page.folderId); - } } } @@ -80,3 +71,39 @@ class PhylumRouterDelegate extends RouterDelegate with ChangeNotif return SynchronousFuture(null); } } + +class PhylumRouteInformationParser extends RouteInformationParser { + const PhylumRouteInformationParser(); + + @override + Future parseRouteInformation(RouteInformation routeInformation) { + final uri = routeInformation.uri; + final segments = uri.pathSegments; + + if (segments.isEmpty) { + return SynchronousFuture(const ExplorerPageHome()); + } + if (segments.length == 1) { + if (segments[0] == 'home') { + return SynchronousFuture(const ExplorerPageHome()); + } + if (segments[0] == 'recents') { + return SynchronousFuture(const ExplorerPageRecents()); + } + if (segments[0] == 'shared') { + return SynchronousFuture(const ExplorerPageShared()); + } + if (segments[0] == 'trash') { + return SynchronousFuture(const ExplorerPageTrash()); + } + } else if (segments.length == 2 && segments[0] == 'folder') { + return SynchronousFuture(ExplorerPageFolder(folderId: segments[1])); + } + return SynchronousFuture(ExplorerPageFolder(folderId: 'unknown')); + } + + @override + RouteInformation? restoreRouteInformation(ExplorerPage configuration) { + return RouteInformation(uri: configuration.uri); + } +} diff --git a/client/lib/ui/destination_picker/destination_picker.dart b/client/lib/ui/destination_picker/destination_picker.dart index 6682c539..d0df4008 100644 --- a/client/lib/ui/destination_picker/destination_picker.dart +++ b/client/lib/ui/destination_picker/destination_picker.dart @@ -23,7 +23,7 @@ class DestinationPicker extends StatefulWidget { return showDialog( context: context, builder: (context) => ChangeNotifierProvider( - create: (context) => PhylumRouterDelegate(account: null, page: ExplorerPageFolder(folderId: initialFolderId)), + create: (context) => PhylumRouterDelegate(page: ExplorerPageFolder(folderId: initialFolderId)), builder: (context, child) { final page = context.watch().current!; return StateNotifierProvider( diff --git a/client/lib/ui/explorer/explorer_controller.dart b/client/lib/ui/explorer/explorer_controller.dart index ae5aedaa..ae7b06bd 100644 --- a/client/lib/ui/explorer/explorer_controller.dart +++ b/client/lib/ui/explorer/explorer_controller.dart @@ -94,11 +94,14 @@ class ExplorerController extends StateNotifier { _folderSubscription?.cancel(); if (page is ExplorerPageFolder) { _folderSubscription = _account.db.watchResource(page.folderId).listen((e) => state = state.copyWith(folder: e)); + if (page.folderId != _account.userHome) { + _account.db.markResourceAccess(page.folderId); + } } else { _folderSubscription = null; } _childrenSubscription?.cancel(); - _childrenSubscription = page.watchItems(_account).listen((e) => _updateResourceList(e)); + _childrenSubscription = page.items(_account).listen((e) => _updateResourceList(e)); state = ExplorerState(page: page); refresh(); } diff --git a/client/lib/ui/explorer/page.dart b/client/lib/ui/explorer/page.dart index 60446cbe..1fbfae74 100644 --- a/client/lib/ui/explorer/page.dart +++ b/client/lib/ui/explorer/page.dart @@ -12,7 +12,7 @@ sealed class ExplorerPage { Future refresh(PhylumAccount account); - Stream> watchItems(PhylumAccount account); + Stream> items(PhylumAccount account); } class ExplorerPageHome extends ExplorerPage { @@ -29,7 +29,7 @@ class ExplorerPageHome extends ExplorerPage { account.resourceRepository.requestResource(account.userHome).then((result) => result is ApiSuccessResponse); @override - Stream> watchItems(PhylumAccount account) => account.db.watchChildren(account.userHome); + Stream> items(PhylumAccount account) => account.db.watchChildren(account.userHome); } class ExplorerPageFolder extends ExplorerPage { @@ -48,7 +48,7 @@ class ExplorerPageFolder extends ExplorerPage { account.resourceRepository.requestResource(folderId).then((result) => result is ApiSuccessResponse); @override - Stream> watchItems(PhylumAccount account) => account.db.watchChildren(folderId); + Stream> items(PhylumAccount account) => account.db.watchChildren(folderId); } class ExplorerPageRecents extends ExplorerPage { @@ -66,7 +66,7 @@ class ExplorerPageRecents extends ExplorerPage { } @override - Stream> watchItems(PhylumAccount account) { + Stream> items(PhylumAccount account) { return account.db.selectRecents().watch(); } } @@ -86,7 +86,7 @@ class ExplorerPageTrash extends ExplorerPage { } @override - Stream> watchItems(PhylumAccount account) { + Stream> items(PhylumAccount account) { return account.db.selectTrash().watch(); } } @@ -106,7 +106,7 @@ class ExplorerPageShared extends ExplorerPage { } @override - Stream> watchItems(PhylumAccount account) { + Stream> items(PhylumAccount account) { return account.db.selectShared().watch(); } }