This commit is contained in:
Raymond Hill 2024-12-05 08:08:52 -05:00
parent db2225fee7
commit 756eee032e
No known key found for this signature in database
GPG key ID: 25E1490B761470C2
3 changed files with 50 additions and 15 deletions

View file

@ -50,6 +50,7 @@ import {
excludeFromStrictBlock, excludeFromStrictBlock,
getEnabledRulesetsDetails, getEnabledRulesetsDetails,
getRulesetDetails, getRulesetDetails,
patchDefaultRulesets,
setStrictBlockMode, setStrictBlockMode,
updateDynamicRules, updateDynamicRules,
} from './ruleset-manager.js'; } from './ruleset-manager.js';
@ -377,22 +378,24 @@ function onMessage(request, sender, callback) {
async function start() { async function start() {
await loadRulesetConfig(); await loadRulesetConfig();
// Potentially enable new default rulesets const currentVersion = getCurrentVersion();
const isNewVersion = currentVersion !== rulesetConfig.version;
// The default rulesets may have changed, find out new ruleset to enable,
// obsolete ruleset to remove.
if ( isNewVersion ) {
ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
rulesetConfig.version = currentVersion;
await patchDefaultRulesets();
saveRulesetConfig();
}
const rulesetsUpdated = process.wakeupRun === false && const rulesetsUpdated = process.wakeupRun === false &&
await enableRulesets(rulesetConfig.enabledRulesets); await enableRulesets(rulesetConfig.enabledRulesets);
// We need to update the regex rules only when ruleset version changes. // We need to update the regex rules only when ruleset version changes.
if ( process.wakeupRun === false ) { if ( isNewVersion && rulesetsUpdated === false ) {
const currentVersion = getCurrentVersion(); updateDynamicRules();
if ( currentVersion !== rulesetConfig.version ) {
ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
rulesetConfig.version = currentVersion;
saveRulesetConfig();
if ( rulesetsUpdated === false ) {
updateDynamicRules();
}
}
} }
// Permissions may have been removed while the extension was disabled // Permissions may have been removed while the extension was disabled

View file

@ -24,13 +24,11 @@ import {
sessionRead, sessionWrite, sessionRead, sessionWrite,
} from './ext.js'; } from './ext.js';
import { defaultRulesetsFromLanguage } from './ruleset-manager.js';
/******************************************************************************/ /******************************************************************************/
export const rulesetConfig = { export const rulesetConfig = {
version: '', version: '',
enabledRulesets: [ 'default' ], enabledRulesets: [],
autoReload: true, autoReload: true,
showBlockedCount: true, showBlockedCount: true,
strictBlockMode: true, strictBlockMode: true,
@ -67,7 +65,6 @@ export async function loadRulesetConfig() {
sessionWrite('rulesetConfig', rulesetConfig); sessionWrite('rulesetConfig', rulesetConfig);
return; return;
} }
rulesetConfig.enabledRulesets = await defaultRulesetsFromLanguage();
sessionWrite('rulesetConfig', rulesetConfig); sessionWrite('rulesetConfig', rulesetConfig);
localWrite('rulesetConfig', rulesetConfig); localWrite('rulesetConfig', rulesetConfig);
process.firstRun = true; process.firstRun = true;

View file

@ -593,6 +593,40 @@ async function defaultRulesetsFromLanguage() {
/******************************************************************************/ /******************************************************************************/
async function patchDefaultRulesets() {
const [
oldDefaultIds = [],
newDefaultIds,
newIds,
] = await Promise.all([
localRead('defaultRulesetIds'),
defaultRulesetsFromLanguage(),
getRulesetDetails(),
]);
const toAdd = [];
const toRemove = [];
for ( const id of newDefaultIds ) {
if ( oldDefaultIds.includes(id) ) { continue; }
toAdd.push(id);
}
for ( const id of oldDefaultIds ) {
if ( newDefaultIds.includes(id) ) { continue; }
toRemove.push(id);
}
for ( const id of rulesetConfig.enabledRulesets ) {
if ( newIds.has(id) ) { continue; }
toRemove.push(id);
}
localWrite('defaultRulesetIds', newDefaultIds);
if ( toAdd.length === 0 && toRemove.length === 0 ) { return; }
const enabledRulesets = new Set(rulesetConfig.enabledRulesets);
toAdd.forEach(id => enabledRulesets.add(id));
toRemove.forEach(id => enabledRulesets.delete(id));
rulesetConfig.enabledRulesets = Array.from(enabledRulesets);
}
/******************************************************************************/
async function enableRulesets(ids) { async function enableRulesets(ids) {
const afterIds = new Set(ids); const afterIds = new Set(ids);
const [ beforeIds, adminIds, rulesetDetails ] = await Promise.all([ const [ beforeIds, adminIds, rulesetDetails ] = await Promise.all([
@ -681,6 +715,7 @@ export {
filteringModesToDNR, filteringModesToDNR,
getRulesetDetails, getRulesetDetails,
getEnabledRulesetsDetails, getEnabledRulesetsDetails,
patchDefaultRulesets,
setStrictBlockMode, setStrictBlockMode,
updateDynamicRules, updateDynamicRules,
}; };