diff --git a/lib/domain/rss_feed.dart b/lib/domain/rss_feed.dart index a2e66c2..ad54db0 100644 --- a/lib/domain/rss_feed.dart +++ b/lib/domain/rss_feed.dart @@ -7,6 +7,7 @@ import 'package:webfeed/domain/rss_cloud.dart'; import 'package:webfeed/domain/rss_image.dart'; import 'package:webfeed/domain/rss_item.dart'; import 'package:webfeed/domain/syndication/syndication.dart'; +import 'package:webfeed/util/datetime.dart'; import 'package:webfeed/util/xml.dart'; import 'package:xml/xml.dart'; @@ -22,7 +23,8 @@ class RssFeed { final List categories; final List skipDays; final List skipHours; - final String lastBuildDate; + final DateTime pubDate; + final DateTime lastBuildDate; final String language; final String generator; final String copyright; @@ -46,6 +48,7 @@ class RssFeed { this.categories, this.skipDays, this.skipHours, + this.pubDate, this.lastBuildDate, this.language, this.generator, @@ -97,7 +100,8 @@ class RssFeed { ?.map((e) => int.tryParse(e.text ?? '0')) ?.toList() ?? [], - lastBuildDate: findFirstElement(channelElement, 'lastBuildDate')?.text, + pubDate: parseDateTime(findFirstElement(channelElement, 'pubDate')?.text), + lastBuildDate: parseDateTime(findFirstElement(channelElement, 'lastBuildDate')?.text), language: findFirstElement(channelElement, 'language')?.text, generator: findFirstElement(channelElement, 'generator')?.text, copyright: findFirstElement(channelElement, 'copyright')?.text, diff --git a/lib/util/datetime.dart b/lib/util/datetime.dart index 050d869..4912e9b 100644 --- a/lib/util/datetime.dart +++ b/lib/util/datetime.dart @@ -2,9 +2,9 @@ import 'package:intl/intl.dart'; const rfc822DatePattern = 'EEE, dd MMM yyyy HH:mm:ss Z'; -DateTime parseDateTime(dateString) { +DateTime parseDateTime(String dateString) { if (dateString == null) return null; - return _parseRfc822DateTime(dateString) ?? _parseIso8601DateTime(dateString); + return _parseRfc822DateTime(dateString.trim()) ?? _parseIso8601DateTime(dateString.trim()); } DateTime _parseRfc822DateTime(String dateString) { @@ -18,7 +18,7 @@ DateTime _parseRfc822DateTime(String dateString) { } } -DateTime _parseIso8601DateTime(dateString) { +DateTime _parseIso8601DateTime(String dateString) { try { return DateTime.parse(dateString); } on FormatException { diff --git a/test/rss_test.dart b/test/rss_test.dart index 44eb9b2..a73b5ae 100644 --- a/test/rss_test.dart +++ b/test/rss_test.dart @@ -27,7 +27,8 @@ void main() { expect(feed.link, 'https://foo.bar.news/'); expect(feed.author, 'hello@world.net'); expect(feed.language, 'en-US'); - expect(feed.lastBuildDate, 'Mon, 26 Mar 2018 14:00:00 PDT'); + expect(feed.pubDate, DateTime(2018, 03, 26, 13, 30)); + expect(feed.lastBuildDate, DateTime(2018, 03, 26, 14)); expect(feed.generator, 'Custom'); expect(feed.copyright, 'Copyright 2018, Foo bar Inc.'); expect(feed.docs, 'https://foo.bar.news/docs'); diff --git a/test/xml/RSS.xml b/test/xml/RSS.xml index 07d80ae..a3657c9 100644 --- a/test/xml/RSS.xml +++ b/test/xml/RSS.xml @@ -17,6 +17,7 @@ Ipsum Lorem Ipsum en-US + Mon, 26 Mar 2018 13:30:00 PDT Mon, 26 Mar 2018 14:00:00 PDT Custom Copyright 2018, Foo bar Inc.