Refresh local feeds even if there is no internet (#6633)
This commit is contained in:
parent
1e7c347cd2
commit
b933c0eb71
|
@ -34,7 +34,6 @@ import de.danoeh.antennapod.model.download.DownloadResult;
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest;
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -57,15 +56,10 @@ public class FeedUpdateWorker extends Worker {
|
||||||
ClientConfigurator.initialize(getApplicationContext());
|
ClientConfigurator.initialize(getApplicationContext());
|
||||||
newEpisodesNotification.loadCountersBeforeRefresh();
|
newEpisodesNotification.loadCountersBeforeRefresh();
|
||||||
|
|
||||||
if (!getInputData().getBoolean(FeedUpdateManager.EXTRA_EVEN_ON_MOBILE, false)) {
|
|
||||||
if (!NetworkUtils.networkAvailable() || !NetworkUtils.isFeedRefreshAllowed()) {
|
|
||||||
Log.d(TAG, "Blocking automatic update: no wifi available / no mobile updates allowed");
|
|
||||||
return Result.retry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Feed> toUpdate;
|
List<Feed> toUpdate;
|
||||||
long feedId = getInputData().getLong(FeedUpdateManager.EXTRA_FEED_ID, -1);
|
long feedId = getInputData().getLong(FeedUpdateManager.EXTRA_FEED_ID, -1);
|
||||||
|
boolean allAreLocal = true;
|
||||||
|
boolean force = false;
|
||||||
if (feedId == -1) { // Update all
|
if (feedId == -1) { // Update all
|
||||||
toUpdate = DBReader.getFeedList();
|
toUpdate = DBReader.getFeedList();
|
||||||
Iterator<Feed> itr = toUpdate.iterator();
|
Iterator<Feed> itr = toUpdate.iterator();
|
||||||
|
@ -74,18 +68,31 @@ public class FeedUpdateWorker extends Worker {
|
||||||
if (!feed.getPreferences().getKeepUpdated()) {
|
if (!feed.getPreferences().getKeepUpdated()) {
|
||||||
itr.remove();
|
itr.remove();
|
||||||
}
|
}
|
||||||
|
if (!feed.isLocalFeed()) {
|
||||||
|
allAreLocal = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Collections.shuffle(toUpdate); // If the worker gets cancelled early, every feed has a chance to be updated
|
Collections.shuffle(toUpdate); // If the worker gets cancelled early, every feed has a chance to be updated
|
||||||
refreshFeeds(toUpdate, false);
|
|
||||||
} else {
|
} else {
|
||||||
toUpdate = new ArrayList<>();
|
|
||||||
Feed feed = DBReader.getFeed(feedId);
|
Feed feed = DBReader.getFeed(feedId);
|
||||||
if (feed == null) {
|
if (feed == null) {
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
toUpdate.add(feed);
|
if (!feed.isLocalFeed()) {
|
||||||
refreshFeeds(toUpdate, true);
|
allAreLocal = false;
|
||||||
|
}
|
||||||
|
toUpdate = Collections.singletonList(feed);
|
||||||
|
force = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!getInputData().getBoolean(FeedUpdateManager.EXTRA_EVEN_ON_MOBILE, false) && !allAreLocal) {
|
||||||
|
if (!NetworkUtils.networkAvailable() || !NetworkUtils.isFeedRefreshAllowed()) {
|
||||||
|
Log.d(TAG, "Blocking automatic update");
|
||||||
|
return Result.retry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
refreshFeeds(toUpdate, force);
|
||||||
|
|
||||||
notificationManager.cancel(R.id.notification_updating_feeds);
|
notificationManager.cancel(R.id.notification_updating_feeds);
|
||||||
DBTasks.autodownloadUndownloadedItems(getApplicationContext());
|
DBTasks.autodownloadUndownloadedItems(getApplicationContext());
|
||||||
return Result.success();
|
return Result.success();
|
||||||
|
|
|
@ -47,7 +47,9 @@ public class FeedUpdateManager {
|
||||||
} else {
|
} else {
|
||||||
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
|
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
|
||||||
FeedUpdateWorker.class, UserPreferences.getUpdateInterval(), TimeUnit.HOURS)
|
FeedUpdateWorker.class, UserPreferences.getUpdateInterval(), TimeUnit.HOURS)
|
||||||
.setConstraints(getConstraints())
|
.setConstraints(new Constraints.Builder()
|
||||||
|
.setRequiredNetworkType(UserPreferences.isAllowMobileFeedRefresh()
|
||||||
|
? NetworkType.CONNECTED : NetworkType.UNMETERED).build())
|
||||||
.build();
|
.build();
|
||||||
WorkManager.getInstance(context).enqueueUniquePeriodicWork(WORK_ID_FEED_UPDATE,
|
WorkManager.getInstance(context).enqueueUniquePeriodicWork(WORK_ID_FEED_UPDATE,
|
||||||
replace ? ExistingPeriodicWorkPolicy.REPLACE : ExistingPeriodicWorkPolicy.KEEP, workRequest);
|
replace ? ExistingPeriodicWorkPolicy.REPLACE : ExistingPeriodicWorkPolicy.KEEP, workRequest);
|
||||||
|
@ -66,9 +68,11 @@ public class FeedUpdateManager {
|
||||||
OneTimeWorkRequest.Builder workRequest = new OneTimeWorkRequest.Builder(FeedUpdateWorker.class)
|
OneTimeWorkRequest.Builder workRequest = new OneTimeWorkRequest.Builder(FeedUpdateWorker.class)
|
||||||
.setInitialDelay(0L, TimeUnit.MILLISECONDS)
|
.setInitialDelay(0L, TimeUnit.MILLISECONDS)
|
||||||
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
|
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
|
||||||
.addTag(WORK_TAG_FEED_UPDATE)
|
.addTag(WORK_TAG_FEED_UPDATE);
|
||||||
.setConstraints(new Constraints.Builder()
|
if (feed == null || !feed.isLocalFeed()) {
|
||||||
|
workRequest.setConstraints(new Constraints.Builder()
|
||||||
.setRequiredNetworkType(NetworkType.CONNECTED).build());
|
.setRequiredNetworkType(NetworkType.CONNECTED).build());
|
||||||
|
}
|
||||||
Data.Builder builder = new Data.Builder();
|
Data.Builder builder = new Data.Builder();
|
||||||
builder.putBoolean(EXTRA_EVEN_ON_MOBILE, true);
|
builder.putBoolean(EXTRA_EVEN_ON_MOBILE, true);
|
||||||
if (feed != null) {
|
if (feed != null) {
|
||||||
|
@ -86,7 +90,9 @@ public class FeedUpdateManager {
|
||||||
|
|
||||||
public static void runOnceOrAsk(@NonNull Context context, @Nullable Feed feed) {
|
public static void runOnceOrAsk(@NonNull Context context, @Nullable Feed feed) {
|
||||||
Log.d(TAG, "Run auto update immediately in background.");
|
Log.d(TAG, "Run auto update immediately in background.");
|
||||||
if (!NetworkUtils.networkAvailable()) {
|
if (feed != null && feed.isLocalFeed()) {
|
||||||
|
runOnce(context, feed);
|
||||||
|
} else if (!NetworkUtils.networkAvailable()) {
|
||||||
EventBus.getDefault().post(new MessageEvent(context.getString(R.string.download_error_no_connection)));
|
EventBus.getDefault().post(new MessageEvent(context.getString(R.string.download_error_no_connection)));
|
||||||
} else if (NetworkUtils.isFeedRefreshAllowed()) {
|
} else if (NetworkUtils.isFeedRefreshAllowed()) {
|
||||||
runOnce(context, feed);
|
runOnce(context, feed);
|
||||||
|
@ -112,16 +118,4 @@ public class FeedUpdateManager {
|
||||||
}
|
}
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Constraints getConstraints() {
|
|
||||||
Constraints.Builder constraints = new Constraints.Builder();
|
|
||||||
|
|
||||||
if (UserPreferences.isAllowMobileFeedRefresh()) {
|
|
||||||
constraints.setRequiredNetworkType(NetworkType.CONNECTED);
|
|
||||||
} else {
|
|
||||||
constraints.setRequiredNetworkType(NetworkType.UNMETERED);
|
|
||||||
}
|
|
||||||
return constraints.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue