diff options
author | ByteHamster <info@bytehamster.com> | 2020-02-05 09:51:29 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-02-05 09:51:32 +0100 |
commit | f4cfe7bdcafad57ec2c6f92d8fe93e8b45474049 (patch) | |
tree | 24b2bbcc564aa01ac6c96617cab1c69a405b863b /core/src/main/java | |
parent | 8d23571bbaf45062af5bd253281132935a68c0a1 (diff) | |
download | AntennaPod-f4cfe7bdcafad57ec2c6f92d8fe93e8b45474049.zip |
Do not search in chapters
This speeds up searching a LOT. I hope that most podcasts use good descriptions
and we do not need to search for chapters. Podcasts outside of Germany use chapters
only very infrequently.
Diffstat (limited to 'core/src/main/java')
6 files changed, 21 insertions, 118 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java b/core/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java deleted file mode 100644 index 062a6abac..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.danoeh.antennapod.core.feed; - -import de.danoeh.antennapod.core.storage.SearchLocation; - -public class SearchResult { - private final FeedComponent component; - private SearchLocation location; - - public SearchResult(FeedComponent component, SearchLocation location) { - super(); - this.component = component; - this.location = location; - } - - public FeedComponent getComponent() { - return component; - } - - public SearchLocation getLocation() { - return location; - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 37deb6dc0..01e84d732 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -54,10 +54,10 @@ import de.danoeh.antennapod.core.event.settings.SpeedPresetChangedEvent; import de.danoeh.antennapod.core.event.settings.VolumeAdaptionChangedEvent; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedComponent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; -import de.danoeh.antennapod.core.feed.SearchResult; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.SleepTimerPreferences; @@ -1634,16 +1634,17 @@ public class PlaybackService extends MediaBrowserServiceCompat { public void onPlayFromSearch(String query, Bundle extras) { Log.d(TAG, "onPlayFromSearch query=" + query + " extras=" + extras.toString()); - List<SearchResult> results = FeedSearcher.performSearch(getBaseContext(), query, 0); - for (SearchResult result : results) { - try { - FeedMedia p = ((FeedItem) (result.getComponent())).getMedia(); - mediaPlayer.playMediaObject(p, !p.localFileAvailable(), true, true); - return; - } catch (Exception e) { - Log.d(TAG, e.getMessage()); - e.printStackTrace(); - continue; + List<FeedComponent> results = FeedSearcher.performSearch(getBaseContext(), query, 0); + for (FeedComponent result : results) { + if (result instanceof FeedItem) { + try { + FeedMedia media = ((FeedItem) result).getMedia(); + mediaPlayer.playMediaObject(media, !media.localFileAvailable(), true, true); + return; + } catch (Exception e) { + Log.d(TAG, e.getMessage()); + e.printStackTrace(); + } } } onPlay(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java index 100d0e910..bbe8b26f1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java @@ -2,10 +2,9 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; import androidx.annotation.NonNull; -import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedComponent; import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.SearchResult; import java.util.ArrayList; import java.util.List; @@ -32,50 +31,19 @@ public class FeedSearcher { * @return list of episodes containing the query */ @NonNull - public static List<SearchResult> performSearch(final Context context, final String query, final long selectedFeed) { - final List<SearchResult> result = new ArrayList<>(); + public static List<FeedComponent> performSearch(final Context context, final String query, final long selectedFeed) { + final List<FeedComponent> result = new ArrayList<>(); try { FutureTask<List<FeedItem>> itemSearchTask = DBTasks.searchFeedItems(context, selectedFeed, query); FutureTask<List<Feed>> feedSearchTask = DBTasks.searchFeeds(context, query); itemSearchTask.run(); feedSearchTask.run(); - final List<Feed> feeds = feedSearchTask.get(); - for (Feed item : feeds) { - result.add(new SearchResult(item, null)); - } - - final List<FeedItem> items = itemSearchTask.get(); - for (FeedItem item : items) { - SearchLocation location; - if (safeContains(item.getTitle(), query)) { - location = SearchLocation.TITLE; - } else if (safeContains(item.getChapters(), query)) { - location = SearchLocation.CHAPTERS; - } else { - location = SearchLocation.SHOWNOTES; - } - result.add(new SearchResult(item, location)); - } + result.addAll(feedSearchTask.get()); + result.addAll(itemSearchTask.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } return result; } - - private static boolean safeContains(String haystack, String needle) { - return haystack != null && haystack.contains(needle); - } - - private static boolean safeContains(List<Chapter> haystack, String needle) { - if (haystack == null) { - return false; - } - for (Chapter chapter : haystack) { - if (safeContains(chapter.getTitle(), needle)) { - return true; - } - } - return false; - } } 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 749597840..10daebedc 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 @@ -1276,15 +1276,11 @@ public class PodDBAdapter { queryFeedId = "1 = 1"; } - String query = "SELECT DISTINCT " + SEL_FI_SMALL_STR + " FROM " + TABLE_NAME_FEED_ITEMS - + " LEFT JOIN " + TABLE_NAME_SIMPLECHAPTERS - + " ON " + TABLE_NAME_SIMPLECHAPTERS + "." + KEY_FEEDITEM - + "=" + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + String query = "SELECT " + SEL_FI_SMALL_STR + " FROM " + TABLE_NAME_FEED_ITEMS + " WHERE " + queryFeedId + " AND (" - + TABLE_NAME_FEED_ITEMS + "." + KEY_DESCRIPTION + " LIKE '%" + preparedQuery + "%' OR " - + TABLE_NAME_FEED_ITEMS + "." + KEY_CONTENT_ENCODED + " LIKE '%" + preparedQuery + "%' OR " - + TABLE_NAME_FEED_ITEMS + "." + KEY_TITLE + " LIKE '%" + preparedQuery + "%' OR " - + TABLE_NAME_SIMPLECHAPTERS + "." + KEY_TITLE + " LIKE '%" + preparedQuery + "%'" + + KEY_DESCRIPTION + " LIKE '%" + preparedQuery + "%' OR " + + KEY_CONTENT_ENCODED + " LIKE '%" + preparedQuery + "%' OR " + + KEY_TITLE + " LIKE '%" + preparedQuery + "%'" + ") ORDER BY " + KEY_PUBDATE + " DESC " + "LIMIT 300"; return db.rawQuery(query, null); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/SearchLocation.java b/core/src/main/java/de/danoeh/antennapod/core/storage/SearchLocation.java deleted file mode 100644 index 078797bda..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/SearchLocation.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.danoeh.antennapod.core.storage; - -import androidx.annotation.StringRes; -import de.danoeh.antennapod.core.R; - -public enum SearchLocation { - TITLE(R.string.found_in_title_label), - CHAPTERS(R.string.found_in_chapters_label), - SHOWNOTES(R.string.found_in_shownotes_label); - - private int description; - SearchLocation(@StringRes int description) { - this.description = description; - } - - public @StringRes int getDescription() { - return description; - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/comparator/InReverseChronologicalOrder.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/InReverseChronologicalOrder.java deleted file mode 100644 index 80246af8f..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/util/comparator/InReverseChronologicalOrder.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.danoeh.antennapod.core.util.comparator; - -import java.util.Comparator; - -import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.SearchResult; - -public class InReverseChronologicalOrder implements Comparator<SearchResult> { - /** - * Compare items and sort it on chronological order. - */ - @Override - public int compare(SearchResult o1, SearchResult o2) { - if ((o1.getComponent() instanceof FeedItem) && (o2.getComponent() instanceof FeedItem)) { - FeedItem item1 = (FeedItem) o1.getComponent(); - FeedItem item2 = (FeedItem) o2.getComponent(); - return item2.getPubDate().compareTo(item1.getPubDate()); - } - return 0; - } -} |