58 lines
2.2 KiB
Dart
58 lines
2.2 KiB
Dart
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<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),
|
|
'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),
|
|
};
|
|
}
|
|
}
|