diff options
Diffstat (limited to 'core')
10 files changed, 72 insertions, 32 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/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 591451e17..abb5f1f99 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -525,7 +525,7 @@ public class UserPreferences { * @return The data folder that has been requested or null if the folder * could not be created. */ - public static File getDataFolder(Context context, String type) { + public static File getDataFolder(String type) { String strDir = prefs.getString(PREF_DATA_FOLDER, null); if (strDir == null) { Log.d(TAG, "Using default data folder"); @@ -547,7 +547,7 @@ public class UserPreferences { for (int i = 0; i < dirs.length; i++) { if (dirs.length > 0) { if (i < dirs.length - 1) { - dataDir = getDataFolder(context, dirs[i]); + dataDir = getDataFolder(dirs[i]); if (dataDir == null) { return null; } @@ -598,7 +598,7 @@ public class UserPreferences { * available */ private static void createImportDirectory() { - File importDir = getDataFolder(context, IMPORT_DIR); + File importDir = getDataFolder(IMPORT_DIR); if (importDir != null) { if (importDir.exists()) { Log.d(TAG, "Import directory already exists"); 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(); }); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index 318060abc..ee079c068 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -334,7 +334,7 @@ public class DownloadRequester { private File getExternalFilesDirOrThrowException(Context context, String type) throws DownloadRequestException { - File result = UserPreferences.getDataFolder(context, type); + File result = UserPreferences.getDataFolder(type); if (result == null) { throw new DownloadRequestException( "Failed to access external storage"); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index c67fb956a..bf324c9d1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -264,6 +264,20 @@ public class PodDBAdapter { }; /** + * All the tables in the database + */ + private static final String[] ALL_TABLES = { + TABLE_NAME_FEEDS, + TABLE_NAME_FEED_ITEMS, + TABLE_NAME_FEED_IMAGES, + TABLE_NAME_FEED_MEDIA, + TABLE_NAME_DOWNLOAD_LOG, + TABLE_NAME_QUEUE, + TABLE_NAME_SIMPLECHAPTERS, + TABLE_NAME_FAVORITES + }; + + /** * Contains FEEDITEM_SEL_FI_SMALL as comma-separated list. Useful for raw queries. */ private static final String SEL_FI_SMALL_STR; @@ -325,15 +339,13 @@ public class PodDBAdapter { } public static boolean deleteDatabase() { - if(dbHelper != null) { - dbHelper.close(); - dbHelper = null; - } - if(context != null) { // may not have been initialized - return context.deleteDatabase(PodDBAdapter.DATABASE_NAME); - } else { - return false; + PodDBAdapter adapter = getInstance(); + adapter.open(); + for (String tableName : ALL_TABLES) { + db.delete(tableName, "1", null); } + adapter.close(); + return true; } /** diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java index dea380937..248f2bf32 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java @@ -19,7 +19,7 @@ public class StorageUtils { private static final String TAG = "StorageUtils"; public static boolean storageAvailable(Context context) { - File dir = UserPreferences.getDataFolder(context, null); + File dir = UserPreferences.getDataFolder(null); if (dir != null) { return dir.exists() && dir.canRead() && dir.canWrite(); } else { @@ -52,7 +52,7 @@ public class StorageUtils { */ public static long getFreeSpaceAvailable() { StatFs stat = new StatFs(UserPreferences.getDataFolder( - ClientConfig.applicationCallbacks.getApplicationInstance(), null).getAbsolutePath()); + null).getAbsolutePath()); long availableBlocks; long blockSize; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { diff --git a/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml index 72897ed07..ff061be4c 100644 --- a/core/src/main/res/values/colors.xml +++ b/core/src/main/res/values/colors.xml @@ -28,5 +28,7 @@ <!-- Theme colors --> <color name="primary_light">#FFFFFF</color> + <color name="highlight_light">#DDDDDD</color> + <color name="highlight_dark">#414141</color> </resources> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 5bf33c90c..ed818e09a 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -366,6 +366,9 @@ <string name="pref_smart_mark_as_played_disabled">Disabled</string> <string name="pref_image_cache_size_title">Image Cache Size</string> <string name="pref_image_cache_size_sum">Size of the disk cache for images.</string> + <string name="crash_report_title">Crash Report</string> + <string name="crash_report_sum">Send the latest crash report via e-mail</string> + <string name="send_email">Send e-mail</string> <string name="experimental_pref">Experimental</string> <string name="pref_sonic_title">Sonic media player</string> <string name="pref_sonic_message">Use built-in sonic media player as a replacement for Prestissimo</string> @@ -544,4 +547,12 @@ <string name="sort_date_old_new">Date (Old \u2192 New)</string> <string name="sort_duration_short_long">Duration (Short \u2192 Long)</string> <string name="sort_duration_long_short">Duration (Long \u2192 Short)</string> + + <!-- Rating dialog --> + <string name="rating_title">Like AntennaPod?</string> + <string name="rating_message">We would appreciate it if you take the time to rate AntennaPod.</string> + <string name="rating_never_label">Leave me alone</string> + <string name="rating_later_label">Remind me later</string> + <string name="rating_now_label">Sure, let\'s do this!</string> + </resources> |