AntennaPod/model/src/main/java/de/danoeh/antennapod/model/feed/SubscriptionsFilter.java

123 lines
3.9 KiB
Java

package de.danoeh.antennapod.model.feed;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class SubscriptionsFilter {
private static final String divider = ",";
private final String[] properties;
private boolean showIfCounterGreaterZero = false;
private boolean hideNonSubscribedFeeds = true;
private boolean showAutoDownloadEnabled = false;
private boolean showAutoDownloadDisabled = false;
private boolean showUpdatedEnabled = false;
private boolean showUpdatedDisabled = false;
private boolean showEpisodeNotificationEnabled = false;
private boolean showEpisodeNotificationDisabled = false;
public SubscriptionsFilter(String properties) {
this(TextUtils.split(properties, divider));
}
public SubscriptionsFilter(String[] properties) {
this.properties = properties;
for (String property : properties) {
// see R.arrays.feed_filter_values
switch (property) {
case "counter_greater_zero":
showIfCounterGreaterZero = true;
break;
case "enabled_auto_download":
showAutoDownloadEnabled = true;
break;
case "disabled_auto_download":
showAutoDownloadDisabled = true;
break;
case "enabled_updates":
showUpdatedEnabled = true;
break;
case "disabled_updates":
showUpdatedDisabled = true;
break;
case "episode_notification_enabled":
showEpisodeNotificationEnabled = true;
break;
case "episode_notification_disabled":
showEpisodeNotificationDisabled = true;
break;
default:
break;
}
}
}
public boolean isEnabled() {
return properties.length > 0;
}
/**
* Run a list of feed items through the filter.
*/
public List<Feed> filter(List<Feed> items, Map<Long, Integer> feedCounters) {
List<Feed> result = new ArrayList<>();
for (Feed item : items) {
FeedPreferences itemPreferences = item.getPreferences();
// If the item does not meet a requirement, skip it.
if (showAutoDownloadEnabled && !itemPreferences.getAutoDownload()) {
continue;
} else if (showAutoDownloadDisabled && itemPreferences.getAutoDownload()) {
continue;
}
if (showUpdatedEnabled && !itemPreferences.getKeepUpdated()) {
continue;
} else if (showUpdatedDisabled && itemPreferences.getKeepUpdated()) {
continue;
}
if (showEpisodeNotificationEnabled && !itemPreferences.getShowEpisodeNotification()) {
continue;
} else if (showEpisodeNotificationDisabled && itemPreferences.getShowEpisodeNotification()) {
continue;
}
if (hideNonSubscribedFeeds && item.getState() != Feed.STATE_SUBSCRIBED) {
continue;
}
// If the item reaches here, it meets all criteria (except counter > 0)
result.add(item);
}
if (showIfCounterGreaterZero) {
for (int i = result.size() - 1; i >= 0; i--) {
if (!feedCounters.containsKey(result.get(i).getId())
|| feedCounters.get(result.get(i).getId()) <= 0) {
result.remove(i);
}
}
}
return result;
}
public String[] getValues() {
return properties.clone();
}
public String serialize() {
return TextUtils.join(divider, getValues());
}
}