On resume, check if the feeds should be (automatically) refreshed.
This commit is contained in:
parent
b7dfea13b0
commit
9f86308690
@ -46,6 +46,7 @@ import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
|||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
import de.danoeh.antennapod.core.storage.DBReader;
|
import de.danoeh.antennapod.core.storage.DBReader;
|
||||||
|
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||||
import de.danoeh.antennapod.core.util.FeedItemUtil;
|
import de.danoeh.antennapod.core.util.FeedItemUtil;
|
||||||
import de.danoeh.antennapod.core.util.Flavors;
|
import de.danoeh.antennapod.core.util.Flavors;
|
||||||
@ -467,6 +468,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi
|
|||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
StorageUtils.checkStorageAvailability(this);
|
StorageUtils.checkStorageAvailability(this);
|
||||||
|
DBTasks.checkShouldRefreshFeeds(getApplicationContext());
|
||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
if (intent.hasExtra(EXTRA_FEED_ID) ||
|
if (intent.hasExtra(EXTRA_FEED_ID) ||
|
||||||
|
@ -43,6 +43,7 @@ import de.danoeh.antennapod.core.preferences.UserPreferences;
|
|||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||||
import de.danoeh.antennapod.core.storage.DBReader;
|
import de.danoeh.antennapod.core.storage.DBReader;
|
||||||
|
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
||||||
@ -168,6 +169,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
|
|||||||
pagerAdapter.onMediaChanged(media);
|
pagerAdapter.onMediaChanged(media);
|
||||||
pagerAdapter.setController(controller);
|
pagerAdapter.setController(controller);
|
||||||
}
|
}
|
||||||
|
DBTasks.checkShouldRefreshFeeds(getApplicationContext());
|
||||||
|
|
||||||
EventDistributor.getInstance().register(contentUpdate);
|
EventDistributor.getInstance().register(contentUpdate);
|
||||||
loadData();
|
loadData();
|
||||||
|
@ -331,7 +331,10 @@ public class UserPreferences {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns update interval in milliseconds; value 0 means that auto update is disabled
|
||||||
|
* or feeds are updated at a certain time of day
|
||||||
|
*/
|
||||||
public static long getUpdateInterval() {
|
public static long getUpdateInterval() {
|
||||||
String updateInterval = prefs.getString(PREF_UPDATE_INTERVAL, "0");
|
String updateInterval = prefs.getString(PREF_UPDATE_INTERVAL, "0");
|
||||||
if(!updateInterval.contains(":")) {
|
if(!updateInterval.contains(":")) {
|
||||||
@ -743,12 +746,12 @@ public class UserPreferences {
|
|||||||
if (timeOfDay.length == 2) {
|
if (timeOfDay.length == 2) {
|
||||||
restartUpdateTimeOfDayAlarm(timeOfDay[0], timeOfDay[1]);
|
restartUpdateTimeOfDayAlarm(timeOfDay[0], timeOfDay[1]);
|
||||||
} else {
|
} else {
|
||||||
long hours = getUpdateInterval();
|
long milliseconds = getUpdateInterval();
|
||||||
long startTrigger = hours;
|
long startTrigger = milliseconds;
|
||||||
if (now) {
|
if (now) {
|
||||||
startTrigger = TimeUnit.SECONDS.toMillis(10);
|
startTrigger = TimeUnit.SECONDS.toMillis(10);
|
||||||
}
|
}
|
||||||
restartUpdateIntervalAlarm(startTrigger, hours);
|
restartUpdateIntervalAlarm(startTrigger, milliseconds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package de.danoeh.antennapod.core.storage;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ import java.util.concurrent.ExecutorService;
|
|||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.FutureTask;
|
import java.util.concurrent.FutureTask;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.ClientConfig;
|
import de.danoeh.antennapod.core.ClientConfig;
|
||||||
@ -27,21 +28,29 @@ import de.danoeh.antennapod.core.feed.Feed;
|
|||||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||||
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.core.service.GpodnetSyncService;
|
import de.danoeh.antennapod.core.service.GpodnetSyncService;
|
||||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
|
import de.danoeh.antennapod.core.util.Converter;
|
||||||
import de.danoeh.antennapod.core.util.DownloadError;
|
import de.danoeh.antennapod.core.util.DownloadError;
|
||||||
import de.danoeh.antennapod.core.util.LongList;
|
import de.danoeh.antennapod.core.util.LongList;
|
||||||
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
||||||
import de.danoeh.antennapod.core.util.exception.MediaFileNotFoundException;
|
import de.danoeh.antennapod.core.util.exception.MediaFileNotFoundException;
|
||||||
import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
|
import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
|
||||||
|
|
||||||
|
import static android.content.Context.MODE_PRIVATE;
|
||||||
|
import static android.provider.Contacts.SettingsColumns.KEY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides methods for doing common tasks that use DBReader and DBWriter.
|
* Provides methods for doing common tasks that use DBReader and DBWriter.
|
||||||
*/
|
*/
|
||||||
public final class DBTasks {
|
public final class DBTasks {
|
||||||
private static final String TAG = "DBTasks";
|
private static final String TAG = "DBTasks";
|
||||||
|
|
||||||
|
public static final String PREF_NAME = "dbtasks";
|
||||||
|
private static final String PREF_LAST_REFRESH = "last_refresh";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executor service used by the autodownloadUndownloadedEpisodes method.
|
* Executor service used by the autodownloadUndownloadedEpisodes method.
|
||||||
*/
|
*/
|
||||||
@ -162,6 +171,9 @@ public final class DBTasks {
|
|||||||
}
|
}
|
||||||
isRefreshing.set(false);
|
isRefreshing.set(false);
|
||||||
|
|
||||||
|
SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
|
||||||
|
prefs.edit().putLong(PREF_LAST_REFRESH, System.currentTimeMillis()).apply();
|
||||||
|
|
||||||
if (FlattrUtils.hasToken()) {
|
if (FlattrUtils.hasToken()) {
|
||||||
Log.d(TAG, "Flattring all pending things.");
|
Log.d(TAG, "Flattring all pending things.");
|
||||||
new FlattrClickWorker(context).executeAsync(); // flattr pending things
|
new FlattrClickWorker(context).executeAsync(); // flattr pending things
|
||||||
@ -313,6 +325,31 @@ public final class DBTasks {
|
|||||||
DownloadRequester.getInstance().downloadFeed(context, f, loadAllPages, force);
|
DownloadRequester.getInstance().downloadFeed(context, f, loadAllPages, force);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks if the app should refresh all feeds, i.e. if the last auto refresh failed.
|
||||||
|
*
|
||||||
|
* The feeds are only refreshed if an update interval or time of day is set and the last
|
||||||
|
* (successful) refresh was before the last interval or more than a day ago, respectively.
|
||||||
|
*/
|
||||||
|
public static void checkShouldRefreshFeeds(Context context) {
|
||||||
|
long interval = 0;
|
||||||
|
if(UserPreferences.getUpdateInterval() > 0) {
|
||||||
|
interval = UserPreferences.getUpdateInterval();
|
||||||
|
} else if(UserPreferences.getUpdateTimeOfDay().length > 0){
|
||||||
|
interval = TimeUnit.DAYS.toMillis(1);
|
||||||
|
}
|
||||||
|
if(interval == 0) { // auto refresh is disabled
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
|
||||||
|
long lastRefresh = prefs.getLong(PREF_LAST_REFRESH, 0);
|
||||||
|
Log.d(TAG, "last refresh: " + Converter.getDurationStringLocalized(context,
|
||||||
|
System.currentTimeMillis() - lastRefresh) + " ago");
|
||||||
|
if(lastRefresh <= System.currentTimeMillis() - interval) {
|
||||||
|
DBTasks.refreshAllFeeds(context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notifies the database about a missing FeedMedia file. This method will correct the FeedMedia object's values in the
|
* Notifies the database about a missing FeedMedia file. This method will correct the FeedMedia object's values in the
|
||||||
* DB and send a FeedUpdateBroadcast.
|
* DB and send a FeedUpdateBroadcast.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user