the-mews/app/lib/application/internal_pages.dart

65 lines
2.4 KiB
Dart
Raw Permalink Normal View History

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/certificates_page.dart';
import 'pages/history_page.dart';
import 'pages/hub_page.dart';
import 'pages/mews_urls.dart';
import 'pages/posts_page.dart';
import 'pages/quotations_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<MewsPage?> 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),
'quotations' =>
buildQuotationsPage(uri, db: _db, strings: _strings),
'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),
'certificates' =>
buildCertificatesPage(uri, db: _db, strings: _strings),
_ => Future.value(null),
};
}
}