feat: read subscriptions from an Atom feed when a page lists no dated links
This commit is contained in:
parent
b0b86ef5b1
commit
fa51d5793d
9 changed files with 411 additions and 4 deletions
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:actors/actors.dart';
|
||||
|
||||
import 'package:mews/application/actors/fetch_actor.dart';
|
||||
import 'package:mews/mews/atom.dart';
|
||||
import 'package:mews/mews/parser.dart';
|
||||
|
||||
/// Serves pages from an in-memory map without network or isolates, so
|
||||
|
|
@ -9,10 +10,13 @@ import 'package:mews/mews/parser.dart';
|
|||
/// what a site publishes between two fetches. An address with no source is
|
||||
/// unreachable, and the cached copy stands in for it if there is one.
|
||||
class FakeFetch implements Actor<FetchCommand, FetchResult> {
|
||||
FakeFetch(this.sources);
|
||||
FakeFetch(this.sources, {this.feeds = const {}});
|
||||
|
||||
final Map<String, String> sources;
|
||||
|
||||
/// Atom feeds by address, for sites that publish through one.
|
||||
final Map<String, String> feeds;
|
||||
|
||||
@override
|
||||
Future<FetchResult> send(FetchCommand message) async {
|
||||
return switch (message) {
|
||||
|
|
@ -25,6 +29,11 @@ class FakeFetch implements Actor<FetchCommand, FetchResult> {
|
|||
(null, final String cached) => _parse(url, cached),
|
||||
_ => const FetchNetworkError(),
|
||||
},
|
||||
FetchFeed(:final url) => switch (feeds[url]) {
|
||||
final String source =>
|
||||
FetchFeedOk(url: url, entries: parseAtomEntries(source: source, feedUrl: url)),
|
||||
null => const FetchNetworkError(),
|
||||
},
|
||||
_ => const FetchNetworkError(),
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue