Do not start download service if there is nothing to download

This commit is contained in:
ByteHamster 2019-11-26 20:54:26 +01:00
parent 66c91f9962
commit bbb7cfe7ed
2 changed files with 19 additions and 18 deletions

View File

@ -53,19 +53,19 @@ public class APDownloadAlgorithm implements AutomaticDownloadAlgorithm {
final List<FeedItem> newItems = DBReader.getNewItemsList(); final List<FeedItem> newItems = DBReader.getNewItemsList();
candidates = new ArrayList<>(queue.size() + newItems.size()); candidates = new ArrayList<>(queue.size() + newItems.size());
candidates.addAll(queue); candidates.addAll(queue);
for(FeedItem newItem : newItems) { for (FeedItem newItem : newItems) {
FeedPreferences feedPrefs = newItem.getFeed().getPreferences(); FeedPreferences feedPrefs = newItem.getFeed().getPreferences();
FeedFilter feedFilter = feedPrefs.getFilter(); FeedFilter feedFilter = feedPrefs.getFilter();
if(!candidates.contains(newItem) && feedFilter.shouldAutoDownload(newItem)) { if (!candidates.contains(newItem) && feedFilter.shouldAutoDownload(newItem)) {
candidates.add(newItem); candidates.add(newItem);
} }
} }
// filter items that are not auto downloadable // filter items that are not auto downloadable
Iterator<FeedItem> it = candidates.iterator(); Iterator<FeedItem> it = candidates.iterator();
while(it.hasNext()) { while (it.hasNext()) {
FeedItem item = it.next(); FeedItem item = it.next();
if(!item.isAutoDownloadable()) { if (!item.isAutoDownloadable()) {
it.remove(); it.remove();
} }
} }
@ -74,13 +74,12 @@ public class APDownloadAlgorithm implements AutomaticDownloadAlgorithm {
int downloadedEpisodes = DBReader.getNumberOfDownloadedEpisodes(); int downloadedEpisodes = DBReader.getNumberOfDownloadedEpisodes();
int deletedEpisodes = UserPreferences.getEpisodeCleanupAlgorithm() int deletedEpisodes = UserPreferences.getEpisodeCleanupAlgorithm()
.makeRoomForEpisodes(context, autoDownloadableEpisodes); .makeRoomForEpisodes(context, autoDownloadableEpisodes);
boolean cacheIsUnlimited = UserPreferences.getEpisodeCacheSize() == UserPreferences boolean cacheIsUnlimited =
.getEpisodeCacheSizeUnlimited(); UserPreferences.getEpisodeCacheSize() == UserPreferences.getEpisodeCacheSizeUnlimited();
int episodeCacheSize = UserPreferences.getEpisodeCacheSize(); int episodeCacheSize = UserPreferences.getEpisodeCacheSize();
int episodeSpaceLeft; int episodeSpaceLeft;
if (cacheIsUnlimited || if (cacheIsUnlimited || episodeCacheSize >= downloadedEpisodes + autoDownloadableEpisodes) {
episodeCacheSize >= downloadedEpisodes + autoDownloadableEpisodes) {
episodeSpaceLeft = autoDownloadableEpisodes; episodeSpaceLeft = autoDownloadableEpisodes;
} else { } else {
episodeSpaceLeft = episodeCacheSize - (downloadedEpisodes - deletedEpisodes); episodeSpaceLeft = episodeCacheSize - (downloadedEpisodes - deletedEpisodes);
@ -89,14 +88,15 @@ public class APDownloadAlgorithm implements AutomaticDownloadAlgorithm {
FeedItem[] itemsToDownload = candidates.subList(0, episodeSpaceLeft) FeedItem[] itemsToDownload = candidates.subList(0, episodeSpaceLeft)
.toArray(new FeedItem[episodeSpaceLeft]); .toArray(new FeedItem[episodeSpaceLeft]);
Log.d(TAG, "Enqueueing " + itemsToDownload.length + " items for download"); if (itemsToDownload.length > 0) {
Log.d(TAG, "Enqueueing " + itemsToDownload.length + " items for download");
try { try {
DownloadRequester.getInstance().downloadMedia(false, context, itemsToDownload); DownloadRequester.getInstance().downloadMedia(false, context, itemsToDownload);
} catch (DownloadRequestException e) { } catch (DownloadRequestException e) {
e.printStackTrace(); e.printStackTrace();
}
} }
} }
}; };
} }

View File

@ -80,13 +80,14 @@ public class DownloadRequester implements DownloadStateProvider {
* with the same source URL is already stored, this one will be skipped. * with the same source URL is already stored, this one will be skipped.
* @return True if any of the download request was accepted, false otherwise. * @return True if any of the download request was accepted, false otherwise.
*/ */
public synchronized boolean download(@NonNull Context context, public synchronized boolean download(@NonNull Context context, DownloadRequest... requests) {
DownloadRequest... requests) {
return download(context, false, requests); return download(context, false, requests);
} }
private boolean download(@NonNull Context context, boolean cleanupMedia, private boolean download(@NonNull Context context, boolean cleanupMedia, DownloadRequest... requests) {
DownloadRequest... requests) { if (requests.length <= 0) {
return false;
}
boolean result = false; boolean result = false;
ArrayList<DownloadRequest> requestsToSend = new ArrayList<>(requests.length); ArrayList<DownloadRequest> requestsToSend = new ArrayList<>(requests.length);