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;
}
}
|