diff --git a/lib/globals.dart b/lib/globals.dart index 0d23ed7..c07e547 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -40,6 +40,7 @@ Config? _prefs; EHApi? _api; PersistCookieJar? _jar; ImageCaches? _imageCaches; +String? queryBaseUrl; Future prepareJar() async { final jar = PersistCookieJar(storage: FileStorage(await getJarPath())); @@ -97,6 +98,14 @@ bool tryInitApi(BuildContext context) { clearAllStates(context); return true; } + if (queryBaseUrl != null) { + if (_api != null && _api!.baseUrl == queryBaseUrl) { + return true; + } + initApi(queryBaseUrl!); + clearAllStates(context); + return true; + } String? baseUrl = prefs.getString("baseUrl"); if (baseUrl == null) { SchedulerBinding.instance.addPostFrameCallback((_) { diff --git a/lib/main.dart b/lib/main.dart index 273a958..ad89bbb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -35,6 +35,24 @@ import 'viewer/single.dart'; final _routerLog = Logger("Router"); +bool _isFirst = true; + +class _NavigatorObserver extends NavigatorObserver { + @override + void didPush(Route route, Route? previousRoute) { + if (_isFirst) { + try { + final args = route.settings.arguments as Map?; + queryBaseUrl = args?["base"]; + } catch (e) { + _routerLog.warning("Failed to get arguments.", e); + } + _isFirst = false; + } + super.didPush(route, previousRoute); + } +} + final _router = GoRouter( routes: [ GoRoute( @@ -289,6 +307,9 @@ final _router = GoRouter( }); }), ], + observers: [ + _NavigatorObserver(), + ], ); void defaultLogger(LogRecord record) {