// Copyright (C) 2022 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
import 'package:html/parser.dart';
import 'package:webfeed/webfeed.dart';
import 'package:wyatt_medium_feeds/src/reading_time.dart';
class MediumArticle {
final RssItem? _item;
RssItem get item {
if (_item == null) {
throw StateError('Feed has not been parsed yet.');
}
return _item!;
}
MediumArticle(this._item);
String get title => item.title ?? '';
String get link => item.link ?? '';
String get guid => item.guid ?? '';
String get author => item.dc?.creator ?? '';
DateTime? get publishDate => item.pubDate;
String get content => item.content?.value ?? '';
List get images {
final images = [];
for (final i in item.content?.images ?? []) {
images.add(i);
}
return images;
}
String get decoded {
final document = parse(content);
return document.firstChild?.text ?? '';
}
String get summary {
final regex = RegExp(r'^.*?[\.!\?](?:\s|$)');
final match = regex.firstMatch(decoded);
return match?.group(0) ?? '';
}
Duration get readingTime {
return decoded.readingTime();
}
}