From 663b08fc4478bceb1a80581a9c0875bde35f430b Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 12 Jul 2020 09:55:28 +0200 Subject: Install provider in any case --- .../core/service/ProviderInstallerInterceptor.java | 18 ++++++++++++++++++ .../antennapod/core/service/UserAgentInterceptor.java | 4 ---- .../core/service/download/AntennapodHttpClient.java | 2 ++ .../core/service/download/DownloadService.java | 5 +---- 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java new file mode 100644 index 000000000..4fa1fc3d7 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java @@ -0,0 +1,18 @@ +package de.danoeh.antennapod.core.service; + +import androidx.annotation.NonNull; +import okhttp3.Interceptor; +import okhttp3.Response; + +import java.io.IOException; + +public class ProviderInstallerInterceptor implements Interceptor { + public static Runnable installer = () -> { }; + + @Override + @NonNull + public Response intercept(Chain chain) throws IOException { + installer.run(); + return chain.proceed(chain.request()); + } +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java index 5fcf8317d..3676347f7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java @@ -7,10 +7,6 @@ import okhttp3.Response; import java.io.IOException; public class UserAgentInterceptor implements Interceptor { - - public UserAgentInterceptor() { - } - @Override public Response intercept(Chain chain) throws IOException { return chain.proceed(chain.request().newBuilder() 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 e0c23bdac..d0484f2a2 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 @@ -32,6 +32,7 @@ import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.ProviderInstallerInterceptor; import de.danoeh.antennapod.core.service.UserAgentInterceptor; import de.danoeh.antennapod.core.storage.DBWriter; import okhttp3.Cache; @@ -116,6 +117,7 @@ public class AntennapodHttpClient { } return response; }); + builder.interceptors().add(new ProviderInstallerInterceptor()); builder.interceptors().add(new BasicAuthorizationInterceptor()); builder.networkInterceptors().add(new UserAgentInterceptor()); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index ba7019fd9..e44aa716a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -479,12 +479,9 @@ public class DownloadService extends Service { } handler.post(() -> { downloads.add(downloader); + downloadExecutor.submit(downloader); postDownloaders(); }); - // Needs to be done after postDownloaders() because otherwise, - // it might take long before the progress bar circle starts spinning - ClientConfig.installSslProvider(this); - handler.post(() -> downloadExecutor.submit(downloader)); } handler.post(this::queryDownloads); } -- cgit v1.2.3 From 9d23279f475cacc1da4a9eec183ddb8a68fbd8b6 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 20 Jul 2020 00:12:30 +0200 Subject: Accept more malformed subscribtion URIs --- core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java index e1dffef97..ac7f4848c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java @@ -41,7 +41,7 @@ public final class URLChecker { String lowerCaseUrl = url.toLowerCase(); // protocol names are case insensitive if (lowerCaseUrl.startsWith("feed://")) { if (BuildConfig.DEBUG) Log.d(TAG, "Replacing feed:// with http://"); - return url.replaceFirst("feed://", "http://"); + return prepareURL(url.substring("feed://".length())); } else if (lowerCaseUrl.startsWith("pcast://")) { if (BuildConfig.DEBUG) Log.d(TAG, "Removing pcast://"); return prepareURL(url.substring("pcast://".length())); @@ -50,7 +50,7 @@ public final class URLChecker { return prepareURL(url.substring("pcast:".length())); } else if (lowerCaseUrl.startsWith("itpc")) { if (BuildConfig.DEBUG) Log.d(TAG, "Replacing itpc:// with http://"); - return url.replaceFirst("itpc://", "http://"); + return prepareURL(url.substring("itpc://".length())); } else if (lowerCaseUrl.startsWith(AP_SUBSCRIBE)) { if (BuildConfig.DEBUG) Log.d(TAG, "Removing antennapod-subscribe://"); return prepareURL(url.substring(AP_SUBSCRIBE.length())); -- cgit v1.2.3 From ecbcafd209a4aff987dc39b5dd60121cf55b2403 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 21 Jul 2020 11:31:13 +0200 Subject: Reformatted NSMedia --- .../core/syndication/namespace/NSMedia.java | 217 ++++++++++----------- 1 file changed, 108 insertions(+), 109 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java index 638383223..825d2bc96 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java @@ -14,114 +14,113 @@ import de.danoeh.antennapod.core.syndication.util.SyndTypeUtils; /** Processes tags from the http://search.yahoo.com/mrss/ namespace. */ public class NSMedia extends Namespace { - private static final String TAG = "NSMedia"; - - public static final String NSTAG = "media"; - public static final String NSURI = "http://search.yahoo.com/mrss/"; - - private static final String CONTENT = "content"; - private static final String DOWNLOAD_URL = "url"; - private static final String SIZE = "fileSize"; - private static final String MIME_TYPE = "type"; - private static final String DURATION = "duration"; - private static final String DEFAULT = "isDefault"; - private static final String MEDIUM = "medium"; - - private static final String MEDIUM_IMAGE = "image"; - private static final String MEDIUM_AUDIO = "audio"; - private static final String MEDIUM_VIDEO = "video"; - - private static final String IMAGE = "thumbnail"; - private static final String IMAGE_URL = "url"; - - private static final String DESCRIPTION = "description"; - private static final String DESCRIPTION_TYPE = "type"; - - @Override - public SyndElement handleElementStart(String localName, HandlerState state, - Attributes attributes) { - if (CONTENT.equals(localName)) { - String url = attributes.getValue(DOWNLOAD_URL); - String type = attributes.getValue(MIME_TYPE); - String defaultStr = attributes.getValue(DEFAULT); - String medium = attributes.getValue(MEDIUM); - boolean validTypeMedia = false; - boolean validTypeImage = false; - - boolean isDefault = "true".equals(defaultStr); - - if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) { - validTypeMedia = true; - } else if (MEDIUM_IMAGE.equals(medium)) { - validTypeImage = true; - } else { - if (type == null) { - type = SyndTypeUtils.getMimeTypeFromUrl(url); - } - - if (SyndTypeUtils.enclosureTypeValid(type)) { - validTypeMedia = true; - } else if (SyndTypeUtils.imageTypeValid(type)) { - validTypeImage = true; - } - } - - if (state.getCurrentItem() != null && - (state.getCurrentItem().getMedia() == null || isDefault) && - url != null && validTypeMedia) { - long size = 0; - String sizeStr = attributes.getValue(SIZE); - try { - size = Long.parseLong(sizeStr); - } catch (NumberFormatException e) { - Log.e(TAG, "Size \"" + sizeStr + "\" could not be parsed."); - } - - int durationMs = 0; - String durationStr = attributes.getValue(DURATION); - if (!TextUtils.isEmpty(durationStr)) { - try { - long duration = Long.parseLong(durationStr); - durationMs = (int) TimeUnit.MILLISECONDS.convert(duration, TimeUnit.SECONDS); - } catch (NumberFormatException e) { - Log.e(TAG, "Duration \"" + durationStr + "\" could not be parsed"); - } - } - FeedMedia media = new FeedMedia(state.getCurrentItem(), url, size, type); - if (durationMs > 0) { - media.setDuration(durationMs); - } - state.getCurrentItem().setMedia(media); - } else if (state.getCurrentItem() != null && url != null && validTypeImage) { - state.getCurrentItem().setImageUrl(url); - } - } else if (IMAGE.equals(localName)) { - String url = attributes.getValue(IMAGE_URL); - if (url != null) { - if (state.getCurrentItem() != null) { - state.getCurrentItem().setImageUrl(url); - } else { - if (state.getFeed().getImageUrl() == null) { - state.getFeed().setImageUrl(url); - } - } - } - } else if (DESCRIPTION.equals(localName)) { - String type = attributes.getValue(DESCRIPTION_TYPE); - return new AtomText(localName, this, type); - } - return new SyndElement(localName, this); - } - - @Override - public void handleElementEnd(String localName, HandlerState state) { - if (DESCRIPTION.equals(localName)) { - String content = state.getContentBuf().toString(); - if (state.getCurrentItem() != null && content != null && - state.getCurrentItem().getDescription() == null) { - state.getCurrentItem().setDescription(content); - } - } - } + private static final String TAG = "NSMedia"; + + public static final String NSTAG = "media"; + public static final String NSURI = "http://search.yahoo.com/mrss/"; + + private static final String CONTENT = "content"; + private static final String DOWNLOAD_URL = "url"; + private static final String SIZE = "fileSize"; + private static final String MIME_TYPE = "type"; + private static final String DURATION = "duration"; + private static final String DEFAULT = "isDefault"; + private static final String MEDIUM = "medium"; + + private static final String MEDIUM_IMAGE = "image"; + private static final String MEDIUM_AUDIO = "audio"; + private static final String MEDIUM_VIDEO = "video"; + + private static final String IMAGE = "thumbnail"; + private static final String IMAGE_URL = "url"; + + private static final String DESCRIPTION = "description"; + private static final String DESCRIPTION_TYPE = "type"; + + @Override + public SyndElement handleElementStart(String localName, HandlerState state, + Attributes attributes) { + if (CONTENT.equals(localName)) { + String url = attributes.getValue(DOWNLOAD_URL); + String type = attributes.getValue(MIME_TYPE); + String defaultStr = attributes.getValue(DEFAULT); + String medium = attributes.getValue(MEDIUM); + boolean validTypeMedia = false; + boolean validTypeImage = false; + + boolean isDefault = "true".equals(defaultStr); + + if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) { + validTypeMedia = true; + } else if (MEDIUM_IMAGE.equals(medium)) { + validTypeImage = true; + } else { + if (type == null) { + type = SyndTypeUtils.getMimeTypeFromUrl(url); + } + + if (SyndTypeUtils.enclosureTypeValid(type)) { + validTypeMedia = true; + } else if (SyndTypeUtils.imageTypeValid(type)) { + validTypeImage = true; + } + } + + if (state.getCurrentItem() != null && (state.getCurrentItem().getMedia() == null || isDefault) + && url != null && validTypeMedia) { + long size = 0; + String sizeStr = attributes.getValue(SIZE); + try { + size = Long.parseLong(sizeStr); + } catch (NumberFormatException e) { + Log.e(TAG, "Size \"" + sizeStr + "\" could not be parsed."); + } + + int durationMs = 0; + String durationStr = attributes.getValue(DURATION); + if (!TextUtils.isEmpty(durationStr)) { + try { + long duration = Long.parseLong(durationStr); + durationMs = (int) TimeUnit.MILLISECONDS.convert(duration, TimeUnit.SECONDS); + } catch (NumberFormatException e) { + Log.e(TAG, "Duration \"" + durationStr + "\" could not be parsed"); + } + } + FeedMedia media = new FeedMedia(state.getCurrentItem(), url, size, type); + if (durationMs > 0) { + media.setDuration(durationMs); + } + state.getCurrentItem().setMedia(media); + } else if (state.getCurrentItem() != null && url != null && validTypeImage) { + state.getCurrentItem().setImageUrl(url); + } + } else if (IMAGE.equals(localName)) { + String url = attributes.getValue(IMAGE_URL); + if (url != null) { + if (state.getCurrentItem() != null) { + state.getCurrentItem().setImageUrl(url); + } else { + if (state.getFeed().getImageUrl() == null) { + state.getFeed().setImageUrl(url); + } + } + } + } else if (DESCRIPTION.equals(localName)) { + String type = attributes.getValue(DESCRIPTION_TYPE); + return new AtomText(localName, this, type); + } + return new SyndElement(localName, this); + } + + @Override + public void handleElementEnd(String localName, HandlerState state) { + if (DESCRIPTION.equals(localName)) { + String content = state.getContentBuf().toString(); + if (state.getCurrentItem() != null && content != null + && state.getCurrentItem().getDescription() == null) { + state.getCurrentItem().setDescription(content); + } + } + } } -- cgit v1.2.3 From 51bbf1a5f9275e1d1bb526c43b0703ae13b349b9 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 21 Jul 2020 11:55:44 +0200 Subject: Fixed mime type of media:content tags --- .../de/danoeh/antennapod/core/syndication/namespace/NSMedia.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java index 825d2bc96..30b01f0bc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java @@ -50,10 +50,15 @@ public class NSMedia extends Namespace { boolean isDefault = "true".equals(defaultStr); - if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) { + if (MEDIUM_AUDIO.equals(medium)) { validTypeMedia = true; + type = "audio/*"; + } else if (MEDIUM_VIDEO.equals(medium)) { + validTypeMedia = true; + type = "video/*"; } else if (MEDIUM_IMAGE.equals(medium)) { validTypeImage = true; + type = "image/*"; } else { if (type == null) { type = SyndTypeUtils.getMimeTypeFromUrl(url); -- cgit v1.2.3 From dd5b3cac0e9f70d54d5028cced42101c2f6499bd Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 3 Aug 2020 13:10:08 +0200 Subject: Be more verbose about invalid type errors --- .../core/syndication/handler/UnsupportedFeedtypeException.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java index c9f9f19c8..11588967a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java @@ -36,6 +36,9 @@ public class UnsupportedFeedtypeException extends Exception { if (message != null) { return message; } else if (type == TypeGetter.Type.INVALID) { + if ("html".equals(rootElement)) { + return "The server returned a website, not a podcast feed"; + } return "Invalid type"; } else { return "Type " + type + " not supported"; -- cgit v1.2.3