summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/storage/FeedSearcher.java
blob: e7aa93f8369b048c49b2195efe624b44bb92de1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package de.danoeh.antennapod.storage;

import android.content.Context;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.FeedItem;
import de.danoeh.antennapod.feed.SearchResult;
import de.danoeh.antennapod.util.comparator.SearchResultValueComparator;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Performs search on Feeds and FeedItems
 */
public class FeedSearcher {
    private static final String TAG = "FeedSearcher";


    /**
     * Performs a search in all feeds or one specific feed.
     */
    public static List<SearchResult> performSearch(final Context context,
                                                   final String query, final long selectedFeed) {
        final int values[] = {0, 0, 1, 2};
        final String[] subtitles = {context.getString(R.string.found_in_shownotes_label),
                context.getString(R.string.found_in_shownotes_label),
                context.getString(R.string.found_in_chapters_label),
                context.getString(R.string.found_in_title_label)};

        List<SearchResult> result = new ArrayList<SearchResult>();

        FutureTask<List<FeedItem>>[] tasks = new FutureTask[4];
        (tasks[0] = DBTasks.searchFeedItemContentEncoded(context, selectedFeed, query)).run();
        (tasks[1] = DBTasks.searchFeedItemDescription(context, selectedFeed, query)).run();
        (tasks[2] = DBTasks.searchFeedItemChapters(context, selectedFeed, query)).run();
        (tasks[3] = DBTasks.searchFeedItemTitle(context, selectedFeed, query)).run();
        try {
            for (int i = 0; i < tasks.length; i++) {
                FutureTask task = tasks[i];
                List<FeedItem> items = (List<FeedItem>) task.get();
                for (FeedItem item : items) {
                    result.add(new SearchResult(item, values[i], subtitles[i]));
                }

            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        Collections.sort(result, new SearchResultValueComparator());
        return result;
    }
}