diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java index 4c198fa4..f1c2bfa4 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java @@ -12,6 +12,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import com.codahale.metrics.MetricRegistry; import com.commafeed.backend.HttpGetter.NotModifiedException; @@ -86,17 +88,21 @@ public class FeedRefreshWorker { int refreshInterval = applicationSettingsService.get().getRefreshIntervalMinutes(); Date disabledUntil = DateUtils.addMinutes(new Date(), refreshInterval); try { - FetchedFeed fetchedFeed = fetcher.fetch(feed.getUrl(), false, feed.getLastModifiedHeader(), feed.getEtagHeader(), + String url = ObjectUtils.firstNonNull(feed.getUrlAfterRedirect(), feed.getUrl()); + FetchedFeed fetchedFeed = fetcher.fetch(url, false, feed.getLastModifiedHeader(), feed.getEtagHeader(), feed.getLastPublishedDate(), feed.getLastContentHash()); - // stops here if NotModifiedException or any other exception is - // thrown + // stops here if NotModifiedException or any other exception is thrown List entries = fetchedFeed.getEntries(); if (applicationSettingsService.get().isHeavyLoad()) { disabledUntil = FeedUtils.buildDisabledUntil(fetchedFeed.getFeed().getLastEntryDate(), fetchedFeed.getFeed() .getAverageEntryInterval(), disabledUntil); } - + String urlAfterRedirect = fetchedFeed.getUrlAfterRedirect(); + if (StringUtils.equals(url, urlAfterRedirect)) { + urlAfterRedirect = null; + } + feed.setUrlAfterRedirect(urlAfterRedirect); feed.setLink(fetchedFeed.getFeed().getLink()); feed.setLastModifiedHeader(fetchedFeed.getFeed().getLastModifiedHeader()); feed.setEtagHeader(fetchedFeed.getFeed().getEtagHeader()); diff --git a/src/main/java/com/commafeed/backend/model/Feed.java b/src/main/java/com/commafeed/backend/model/Feed.java index ac057981..51771b7c 100644 --- a/src/main/java/com/commafeed/backend/model/Feed.java +++ b/src/main/java/com/commafeed/backend/model/Feed.java @@ -33,6 +33,12 @@ public class Feed extends AbstractModel { @Column(length = 2048, nullable = false) private String url; + /** + * cache the url after potential http 30x redirects + */ + @Column(name = "url_after_redirect", length = 2048, nullable = false) + private String urlAfterRedirect; + @Column(length = 2048, nullable = false) private String normalizedUrl; @@ -130,11 +136,4 @@ public class Feed extends AbstractModel { @Temporal(TemporalType.TIMESTAMP) private Date pushLastPing; - public Feed() { - - } - - public Feed(String url) { - this.url = url; - } } diff --git a/src/main/resources/changelogs/db.changelog-1.3.xml b/src/main/resources/changelogs/db.changelog-1.3.xml new file mode 100644 index 00000000..65e576fd --- /dev/null +++ b/src/main/resources/changelogs/db.changelog-1.3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/src/main/resources/changelogs/db.changelog-master.xml b/src/main/resources/changelogs/db.changelog-master.xml index 3fb6e8e1..c6b5d944 100644 --- a/src/main/resources/changelogs/db.changelog-master.xml +++ b/src/main/resources/changelogs/db.changelog-master.xml @@ -6,5 +6,6 @@ + \ No newline at end of file