forked from I2P_Developers/i2p.i2p
* Update:
- Thread news fetcher so it doesn't clog the scheduler
This commit is contained in:
@ -22,6 +22,7 @@ import static net.i2p.update.UpdateType.*;
|
|||||||
import net.i2p.util.EepGet;
|
import net.i2p.util.EepGet;
|
||||||
import net.i2p.util.EepHead;
|
import net.i2p.util.EepHead;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
import net.i2p.util.SimpleScheduler;
|
import net.i2p.util.SimpleScheduler;
|
||||||
import net.i2p.util.SimpleTimer;
|
import net.i2p.util.SimpleTimer;
|
||||||
@ -39,7 +40,7 @@ class NewsTimerTask implements SimpleTimer.TimedEvent {
|
|||||||
private final RouterContext _context;
|
private final RouterContext _context;
|
||||||
private final Log _log;
|
private final Log _log;
|
||||||
private final ConsoleUpdateManager _mgr;
|
private final ConsoleUpdateManager _mgr;
|
||||||
private boolean _firstRun = true;
|
private volatile boolean _firstRun = true;
|
||||||
|
|
||||||
private static final long INITIAL_DELAY = 5*60*1000;
|
private static final long INITIAL_DELAY = 5*60*1000;
|
||||||
private static final long RUN_DELAY = 10*60*1000;
|
private static final long RUN_DELAY = 10*60*1000;
|
||||||
@ -56,15 +57,8 @@ class NewsTimerTask implements SimpleTimer.TimedEvent {
|
|||||||
|
|
||||||
public void timeReached() {
|
public void timeReached() {
|
||||||
if (shouldFetchNews()) {
|
if (shouldFetchNews()) {
|
||||||
// blocking
|
Thread t = new Fetcher();
|
||||||
fetchNews();
|
t.start();
|
||||||
if (shouldFetchUnsigned()) {
|
|
||||||
// give it a sec for the download to kick in, if it's going to
|
|
||||||
try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
|
|
||||||
if (!_mgr.isCheckInProgress() && !_mgr.isUpdateInProgress())
|
|
||||||
// nonblocking
|
|
||||||
fetchUnsignedHead();
|
|
||||||
}
|
|
||||||
} else if (_firstRun) {
|
} else if (_firstRun) {
|
||||||
// This covers the case where we got a new news but then shut down before it
|
// This covers the case where we got a new news but then shut down before it
|
||||||
// was successfully downloaded, and then restarted within the 36 hour delay
|
// was successfully downloaded, and then restarted within the 36 hour delay
|
||||||
@ -76,6 +70,7 @@ class NewsTimerTask implements SimpleTimer.TimedEvent {
|
|||||||
// TODO unsigned too?
|
// TODO unsigned too?
|
||||||
if (_mgr.shouldInstall() &&
|
if (_mgr.shouldInstall() &&
|
||||||
!_mgr.isCheckInProgress() && !_mgr.isUpdateInProgress())
|
!_mgr.isCheckInProgress() && !_mgr.isUpdateInProgress())
|
||||||
|
// non-blocking
|
||||||
_mgr.update(ROUTER_SIGNED);
|
_mgr.update(ROUTER_SIGNED);
|
||||||
}
|
}
|
||||||
_firstRun = false;
|
_firstRun = false;
|
||||||
@ -129,4 +124,28 @@ class NewsTimerTask implements SimpleTimer.TimedEvent {
|
|||||||
private void fetchUnsignedHead() {
|
private void fetchUnsignedHead() {
|
||||||
_mgr.check(ROUTER_UNSIGNED);
|
_mgr.check(ROUTER_UNSIGNED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't clog the scheduler when fetching the news
|
||||||
|
*
|
||||||
|
* @since 0.9.9
|
||||||
|
*/
|
||||||
|
private class Fetcher extends I2PAppThread {
|
||||||
|
public Fetcher() {
|
||||||
|
super("News Fetcher");
|
||||||
|
setDaemon(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
// blocking
|
||||||
|
fetchNews();
|
||||||
|
if (shouldFetchUnsigned()) {
|
||||||
|
// give it a sec for the download to kick in, if it's going to
|
||||||
|
try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
|
||||||
|
if (!_mgr.isCheckInProgress() && !_mgr.isUpdateInProgress())
|
||||||
|
// nonblocking
|
||||||
|
fetchUnsignedHead();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user