import '../database/database.dart'; import '../l10n/strings.dart'; import '../mews/document.dart'; import 'controllers/reader_settings_controller.dart' show ReaderSettingsController; import 'controllers/subscriptions_controller.dart'; import 'pages/bookmarks_page.dart'; import 'pages/history_page.dart'; import 'pages/hub_page.dart'; import 'pages/mews_urls.dart'; import 'pages/posts_page.dart'; import 'pages/settings_page.dart'; import 'pages/tags_page.dart'; import 'pages/subscriptions_page.dart'; /// Builds the client's own pages as real [MewsPage]s: they render like any /// other page and take part in the walk history, so swiping and back/forward /// treat them like visited pages. class InternalPages { InternalPages({ required MewsDatabase db, required ReaderSettingsController settings, required SubscriptionsController subscriptions, required Strings strings, }) : _db = db, _settings = settings, _subscriptions = subscriptions, _strings = strings; final MewsDatabase _db; final ReaderSettingsController _settings; final SubscriptionsController _subscriptions; final Strings _strings; /// Whether [url] is one of the internal pages. bool handles(String url) => MewsUrls.isInternal(url); /// The internal page for [url], or null when the name is unknown. Future pageFor(String url) { // Internal addresses are opaque, so the page name is the path, not a host. final uri = Uri.parse(MewsUrls.canonical(url)); return switch (uri.path) { 'hub' => buildHubPage(uri, db: _db, subscriptions: _subscriptions, strings: _strings), 'posts' => buildPostsPage(uri, db: _db, strings: _strings, refreshing: _subscriptions.refreshing.value), 'bookmarks' => buildBookmarksPage(uri, db: _db, strings: _strings), 'subscriptions' => buildSubscriptionsPage(uri, db: _db, strings: _strings), 'history' => buildHistoryPage(uri, db: _db, strings: _strings), 'tags' => buildTagsPage(uri, db: _db, strings: _strings), 'settings' => buildSettingsPage(uri, settings: _settings, strings: _strings), _ => Future.value(null), }; } }