Skip to content

Commit f7f776f

Browse files
committed
Aggressively update assets when at least one is very obsolete
Related issue: - uBlockOrigin/uBlock-issues#1165
1 parent a8a46c4 commit f7f776f

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

src/js/storage.js

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,10 +1463,11 @@ self.addEventListener('hiddenSettingsChanged', ( ) => {
14631463

14641464
/******************************************************************************/
14651465

1466-
µb.scheduleAssetUpdater = (( ) => {
1466+
{
14671467
let timer, next = 0;
14681468

1469-
return function(updateDelay) {
1469+
µb.scheduleAssetUpdater = async function(updateDelay) {
1470+
14701471
if ( timer ) {
14711472
clearTimeout(timer);
14721473
timer = undefined;
@@ -1475,24 +1476,45 @@ self.addEventListener('hiddenSettingsChanged', ( ) => {
14751476
next = 0;
14761477
return;
14771478
}
1479+
1480+
const assetDict = await io.metadata();
14781481
const now = Date.now();
1482+
1483+
let needEmergencyUpdate = false;
1484+
for ( const asset of Object.values(assetDict) ) {
1485+
if ( asset.hasRemoteURL !== true ) { continue; }
1486+
if ( asset.content === 'filters' && asset.off === true ) { continue; }
1487+
if ( asset.obsolete !== true ) { continue; }
1488+
const lastUpdateInDays = (now - asset.writeTime) / 86400000;
1489+
const daysSinceVeryObsolete = lastUpdateInDays - 2 * asset.updateAfter;
1490+
if ( daysSinceVeryObsolete < 0 ) { continue; }
1491+
needEmergencyUpdate = true;
1492+
break;
1493+
}
1494+
14791495
// Use the new schedule if and only if it is earlier than the previous
14801496
// one.
14811497
if ( next !== 0 ) {
14821498
updateDelay = Math.min(updateDelay, Math.max(next - now, 0));
14831499
}
1500+
1501+
if ( needEmergencyUpdate ) {
1502+
updateDelay = Math.min(updateDelay, 15000);
1503+
}
1504+
14841505
next = now + updateDelay;
1506+
1507+
const fetchDelay = needEmergencyUpdate
1508+
? 2000
1509+
: this.hiddenSettings.autoUpdateAssetFetchPeriod * 1000 || 60000;
1510+
14851511
timer = vAPI.setTimeout(( ) => {
14861512
timer = undefined;
14871513
next = 0;
1488-
io.updateStart({
1489-
delay: this.hiddenSettings.autoUpdateAssetFetchPeriod * 1000 ||
1490-
120000,
1491-
auto: true,
1492-
});
1514+
io.updateStart({ delay: fetchDelay, auto: true });
14931515
}, updateDelay);
14941516
};
1495-
})();
1517+
}
14961518

14971519
/******************************************************************************/
14981520

0 commit comments

Comments
 (0)