diff options
author | Tom Hennen <TomHennen@users.noreply.github.com> | 2015-11-27 10:02:23 -0500 |
---|---|---|
committer | Tom Hennen <TomHennen@users.noreply.github.com> | 2015-11-27 10:02:23 -0500 |
commit | f169a26488f29c51f30b763233d7bb8c8ca8eae6 (patch) | |
tree | 1aca0db076e94c2ddc4e69d1ea0af9d78a626bd8 /core/src/main | |
parent | 4bc0faf94993b01947728d6e902b83f9d3b8a53c (diff) | |
parent | 40eeb5477df061680ebb5311cea2e326e6514f2b (diff) | |
download | AntennaPod-f169a26488f29c51f30b763233d7bb8c8ca8eae6.zip |
Merge pull request #1394 from mfietz/issue/1393-feed-redirect
Update feed URL when redirected
Diffstat (limited to 'core/src/main')
4 files changed, 33 insertions, 18 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java index 6b93723a0..2acb7108d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java @@ -292,7 +292,8 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource { } public void updateFromOther(Feed other) { - super.updateFromOther(other); + // don't update feed's download_url, we do that manually if redirected + // see AntennapodHttpClient if (other.title != null) { title = other.title; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index 5deb5e501..0e79fbf7b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -5,10 +5,14 @@ import android.support.annotation.NonNull; import android.util.Log; import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; +import com.squareup.okhttp.internal.http.StatusLine; import java.io.IOException; import java.net.CookieManager; import java.net.CookiePolicy; +import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.Socket; import java.security.GeneralSecurityException; @@ -18,6 +22,8 @@ import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; +import de.danoeh.antennapod.core.storage.DBWriter; + /** * Provides access to a HttpClient singleton. */ @@ -58,6 +64,22 @@ public class AntennapodHttpClient { OkHttpClient client = new OkHttpClient(); + // detect 301 Moved permanently and 308 Permanent Redirect + client.networkInterceptors().add(chain -> { + Request request = chain.request(); + Response response = chain.proceed(request); + if(response.code() == HttpURLConnection.HTTP_MOVED_PERM || + response.code() == StatusLine.HTTP_PERM_REDIRECT) { + String location = response.header("Location"); + try { + DBWriter.updateFeedDownloadURL(request.urlString(), location).get(); + } catch (Exception e) { + Log.e(TAG, Log.getStackTraceString(e)); + } + } + return response; + }); + // set cookie handler CookieManager cm = new CookieManager(); cm.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index a8aee1961..157e6d28c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -6,7 +6,6 @@ import android.database.Cursor; import android.util.Log; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.Iterator; @@ -258,7 +257,7 @@ public final class DBTasks { */ public static void refreshFeed(Context context, Feed feed) throws DownloadRequestException { - Log.d(TAG, "id " + feed.getId()); + Log.d(TAG, "refreshFeed(feed.id: " + feed.getId() +")"); refreshFeed(context, feed, false); } @@ -431,7 +430,7 @@ public final class DBTasks { return queue.contains(feedItemId); } - private static Feed searchFeedByIdentifyingValueOrID(Context context, PodDBAdapter adapter, + private static Feed searchFeedByIdentifyingValueOrID(PodDBAdapter adapter, Feed feed) { if (feed.getId() != 0) { return DBReader.getFeed(feed.getId(), adapter); @@ -486,7 +485,7 @@ public final class DBTasks { final Feed newFeed = newFeeds[feedIdx]; // Look up feed in the feedslist - final Feed savedFeed = searchFeedByIdentifyingValueOrID(context, adapter, + final Feed savedFeed = searchFeedByIdentifyingValueOrID(adapter, newFeed); if (savedFeed == null) { Log.d(TAG, "Found no existing Feed with title " diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 49a62da8c..efc0c882a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -19,12 +19,10 @@ import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; import de.danoeh.antennapod.core.event.FavoritesEvent; @@ -382,7 +380,7 @@ public class DBWriter { events.add(QueueEvent.added(item, 0 + i)); } else { queue.add(item); - events.add(QueueEvent.added(item, queue.size()-1)); + events.add(QueueEvent.added(item, queue.size() - 1)); } queueModified = true; if (item.isNew()) { @@ -393,7 +391,7 @@ public class DBWriter { } if (queueModified) { adapter.setQueue(queue); - for(QueueEvent event : events) { + for (QueueEvent event : events) { EventBus.getDefault().post(event); } if (markAsUnplayedIds.size() > 0) { @@ -786,19 +784,14 @@ public class DBWriter { } /** - * Updates download URLs of feeds from a given Map. The key of the Map is the original URL of the feed - * and the value is the updated URL + * Updates download URL of a feed */ - public static Future<?> updateFeedDownloadURLs(final Map<String, String> urls) { + public static Future<?> updateFeedDownloadURL(final String original, final String updated) { + Log.d(TAG, "updateFeedDownloadURL(original: " + original + ", updated: " + updated +")"); return dbExec.submit(() -> { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - for (String key : urls.keySet()) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Replacing URL " + key + " with url " + urls.get(key)); - - adapter.setFeedDownloadUrl(key, urls.get(key)); - } + adapter.setFeedDownloadUrl(original, updated); adapter.close(); }); } |