diff options
author | ByteHamster <info@bytehamster.com> | 2021-05-06 21:31:02 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2021-05-06 21:31:05 +0200 |
commit | 27d86cfb267f4e70b1075b837b46630f65735200 (patch) | |
tree | 703d4df7e757cb9d1fa145d16f39d1425b1139d1 | |
parent | d08a9c423ef7122dfbcd55d5f7bcedccc2aea21c (diff) | |
download | AntennaPod-27d86cfb267f4e70b1075b837b46630f65735200.zip |
Refuse to show future dates
Some shows start to specify dates from the future to appear on top
of episode lists. If we find one of those episodes, just ignore that
it is there. We then use the date when we first found the item.
4 files changed, 20 insertions, 4 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSDublinCore.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSDublinCore.java index 14286d850..0394b754a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSDublinCore.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSDublinCore.java @@ -29,7 +29,7 @@ public class NSDublinCore extends Namespace { String second = state.getSecondTag().getName(); if (DATE.equals(top) && ITEM.equals(second)) { String content = state.getContentBuf().toString(); - currentItem.setPubDate(DateUtils.parse(content)); + currentItem.setPubDate(DateUtils.parseOrNullIfFuture(content)); } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java index 87423b6b1..50c2dc118 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java @@ -124,7 +124,7 @@ public class NSRSS20 extends Namespace { state.getCurrentItem().setLink(content); } } else if (PUBDATE.equals(top) && ITEM.equals(second) && state.getCurrentItem() != null) { - state.getCurrentItem().setPubDate(DateUtils.parse(content)); + state.getCurrentItem().setPubDate(DateUtils.parseOrNullIfFuture(content)); } else if (URL.equals(top) && IMAGE.equals(second) && CHANNEL.equals(third)) { // prefer itunes:image if (state.getFeed() != null && state.getFeed().getImageUrl() == null) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java index 7c5ed2d30..6d459075a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java @@ -205,9 +205,9 @@ public class NSAtom extends Namespace { state.getCurrentItem().setDescriptionIfLonger(textElement.getProcessedContent()); } else if (UPDATED.equals(top) && ENTRY.equals(second) && state.getCurrentItem() != null && state.getCurrentItem().getPubDate() == null) { - state.getCurrentItem().setPubDate(DateUtils.parse(content)); + state.getCurrentItem().setPubDate(DateUtils.parseOrNullIfFuture(content)); } else if (PUBLISHED.equals(top) && ENTRY.equals(second) && state.getCurrentItem() != null) { - state.getCurrentItem().setPubDate(DateUtils.parse(content)); + state.getCurrentItem().setPubDate(DateUtils.parseOrNullIfFuture(content)); } else if (IMAGE_LOGO.equals(top) && state.getFeed() != null && state.getFeed().getImageUrl() == null) { state.getFeed().setImageUrl(content); } else if (IMAGE_ICON.equals(top) && state.getFeed() != null) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java index 196583bcd..a0b9fbef9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.core.util; import android.content.Context; import android.util.Log; +import androidx.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import java.text.DateFormat; @@ -122,6 +123,21 @@ public class DateUtils { return null; } + /** + * Parses the date but if the date is in the future, returns null. + */ + @Nullable + public static Date parseOrNullIfFuture(final String input) { + Date date = parse(input); + if (date == null) { + return null; + } + Date now = new Date(); + if (date.after(now)) { + return null; + } + return date; + } /** * Takes a string of the form [HH:]MM:SS[.mmm] and converts it to |