summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java b/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java
new file mode 100644
index 000000000..32fa96d5d
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java
@@ -0,0 +1,52 @@
+package de.danoeh.antennapod.discovery;
+
+
+import io.reactivex.Single;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PodcastSearcherRegistry {
+ private static List<SearcherInfo> searchProviders;
+
+ private PodcastSearcherRegistry() {
+ }
+
+ public static List<SearcherInfo> getSearchProviders() {
+ if (searchProviders == null) {
+ searchProviders = new ArrayList<>();
+ searchProviders.add(new SearcherInfo(new FyydPodcastSearcher(), 1.f));
+ searchProviders.add(new SearcherInfo(new ItunesPodcastSearcher(), 1.f));
+ searchProviders.add(new SearcherInfo(new GpodnetPodcastSearcher(), 0.0f));
+ }
+ return searchProviders;
+ }
+
+ public static Single<String> lookupUrl(String url) {
+ for (PodcastSearcherRegistry.SearcherInfo searchProviderInfo : getSearchProviders()) {
+ if (searchProviderInfo.searcher.urlNeedsLookup(url)) {
+ return searchProviderInfo.searcher.lookupUrl(url);
+ }
+ }
+ return Single.just(url);
+ }
+
+ public static boolean urlNeedsLookup(String url) {
+ for (PodcastSearcherRegistry.SearcherInfo searchProviderInfo : getSearchProviders()) {
+ if (searchProviderInfo.searcher.urlNeedsLookup(url)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static class SearcherInfo {
+ final PodcastSearcher searcher;
+ final float weight;
+
+ public SearcherInfo(PodcastSearcher searcher, float weight) {
+ this.searcher = searcher;
+ this.weight = weight;
+ }
+ }
+}