From b77b7de2584f83f485ce14b30c79cd6224132af6 Mon Sep 17 00:00:00 2001 From: Martin Jablecnik Date: Wed, 9 Dec 2020 16:45:21 +0100 Subject: [PATCH 1/4] change lastBuildDate from String to DateTime in RssFeed --- lib/domain/rss_feed.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/domain/rss_feed.dart b/lib/domain/rss_feed.dart index a2e66c2..22b7455 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,7 @@ class RssFeed { final List categories; final List skipDays; final List skipHours; - final String lastBuildDate; + final DateTime lastBuildDate; final String language; final String generator; final String copyright; @@ -97,7 +98,7 @@ class RssFeed { ?.map((e) => int.tryParse(e.text ?? '0')) ?.toList() ?? [], - lastBuildDate: findFirstElement(channelElement, 'lastBuildDate')?.text, + lastBuildDate: parseDateTime(findFirstElement(channelElement, 'lastBuildDate')?.text), language: findFirstElement(channelElement, 'language')?.text, generator: findFirstElement(channelElement, 'generator')?.text, copyright: findFirstElement(channelElement, 'copyright')?.text, From b247f10b5134eb2b9a626b933b3dae287de2fdaa Mon Sep 17 00:00:00 2001 From: Martin Jablecnik Date: Wed, 9 Dec 2020 16:50:48 +0100 Subject: [PATCH 2/4] add pubDate field into RssFeed --- lib/domain/rss_feed.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/domain/rss_feed.dart b/lib/domain/rss_feed.dart index 22b7455..ad54db0 100644 --- a/lib/domain/rss_feed.dart +++ b/lib/domain/rss_feed.dart @@ -23,6 +23,7 @@ class RssFeed { final List categories; final List skipDays; final List skipHours; + final DateTime pubDate; final DateTime lastBuildDate; final String language; final String generator; @@ -47,6 +48,7 @@ class RssFeed { this.categories, this.skipDays, this.skipHours, + this.pubDate, this.lastBuildDate, this.language, this.generator, @@ -98,6 +100,7 @@ class RssFeed { ?.map((e) => int.tryParse(e.text ?? '0')) ?.toList() ?? [], + pubDate: parseDateTime(findFirstElement(channelElement, 'pubDate')?.text), lastBuildDate: parseDateTime(findFirstElement(channelElement, 'lastBuildDate')?.text), language: findFirstElement(channelElement, 'language')?.text, generator: findFirstElement(channelElement, 'generator')?.text, From e4bca7c18fb7791639f78f7635897e62693ab81e Mon Sep 17 00:00:00 2001 From: Martin Jablecnik Date: Wed, 9 Dec 2020 17:33:14 +0100 Subject: [PATCH 3/4] fix test for lastBuildDate and pubDate --- test/rss_test.dart | 3 ++- test/xml/RSS.xml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) 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. From 3e84c993265234da05a838273ad6b86cc38a758c Mon Sep 17 00:00:00 2001 From: Martin Jablecnik Date: Wed, 23 Dec 2020 16:18:32 +0100 Subject: [PATCH 4/4] trim datetime string before parsing --- lib/util/datetime.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 {