Raymond Hill 7 years ago
parent
commit
aba697f2f0
No known key found for this signature in database GPG Key ID: 25E1490B761470C2
  1. 24
      src/js/hosts-files.js
  2. 48
      src/js/storage.js

24
src/js/hosts-files.js

@ -48,6 +48,9 @@ vAPI.messaging.addListener(function onMessage(msg) {
case 'loadHostsFilesCompleted':
renderHostsFiles();
break;
case 'loadRecipeFilesCompleted':
renderHostsFiles();
break;
default:
break;
}
@ -70,9 +73,7 @@ var renderHostsFiles = function(soft) {
// Assemble a pretty list name if possible
var listNameFromListKey = function(collection, listKey) {
let list = collection.get(listKey);
let listTitle = list ? list.title : '';
if ( listTitle === '' ) { return listKey; }
return listTitle;
return list && list.title || listKey;
};
var liFromListEntry = function(collection, listKey, li) {
@ -132,13 +133,22 @@ var renderHostsFiles = function(soft) {
return li;
};
var onRenderAssetFiles = function(collection, listSelector) {
// Incremental rendering: this will allow us to easily discard unused
// DOM list entries.
uDom(listSelector + ' .listEntry:not(.notAnAsset)').addClass('discard');
var assetKeys = Array.from(collection.keys());
// Sort works this way:
// - Send /^https?:/ items at the end (custom hosts file URL)
assetKeys.sort(function(a, b) {
var ta = collection.get(a).title || a,
tb = collection.get(b).title || b;
let ea = collection.get(a),
eb = collection.get(b);
if ( ea.submitter !== eb.submitter ) {
return ea.submitter !== 'user' ? -1 : 1;
}
let ta = ea.title || a,
tb = eb.title || b;
if ( reExternalHostFile.test(ta) === reExternalHostFile.test(tb) ) {
return ta.localeCompare(tb);
}
@ -178,10 +188,6 @@ var renderHostsFiles = function(soft) {
listDetails.contributor === true
);
// Incremental rendering: this will allow us to easily discard unused
// DOM list entries.
uDom('#hosts .listEntry:not(.notAnAsset)').addClass('discard');
onRenderAssetFiles(details.hosts, '#hosts');
onRenderAssetFiles(details.recipes, '#recipes');

48
src/js/storage.js

@ -273,33 +273,63 @@
}
let µm = this,
countdownCount = µm.userSettings.selectedRecipeFiles.length;
countdownCount = 0;
if ( reset ) {
µm.recipeManager.reset();
}
var onLoaded = function(details) {
let recipeMetadata;
let onDone = function() {
vAPI.messaging.broadcast({ what: 'loadRecipeFilesCompleted' });
µm.getBytesInUse();
callback();
};
let onLoaded = function(details) {
if ( details.content ) {
let entry = recipeMetadata.get(details.assetKey);
if ( entry.submitter === 'user' ) {
let match = /^! +Title: *(.+)$/im.exec(
details.content.slice(2048)
);
if ( match !== null && match[1] !== entry.title ) {
µm.assets.registerAssetSource(
details.assetKey,
{ title: match[1] }
);
}
}
µm.recipeManager.fromString(details.content);
}
countdownCount -= 1;
if ( countdownCount === 0 ) {
callback();
onDone();
}
};
for ( let assetKey of µm.userSettings.selectedRecipeFiles ) {
this.assets.get(assetKey, onLoaded);
let onMetadataReady = function(metadata) {
recipeMetadata = metadata;
for ( let entry of metadata ) {
let assetKey = entry[0];
let recipeFile = entry[1];
if ( recipeFile.selected !== true ) { continue; }
µm.assets.get(assetKey, onLoaded);
countdownCount += 1;
}
let userRecipes = µm.userSettings.userRecipes;
if ( userRecipes.enabled ) {
µm.recipeManager.fromString(
'! uMatrix: Ruleset recipes 1.0\n' + userRecipes.content
);
}
if ( countdownCount === 0 ) {
onDone();
}
};
this.getAvailableRecipeFiles(onMetadataReady);
};
/******************************************************************************/
@ -406,8 +436,7 @@
type: 'recipes',
contentURL: assetKey,
external: true,
submitter: 'user',
title: assetKey
submitter: 'user'
};
this.assets.registerAssetSource(assetKey, entry);
availableRecipeFiles.set(assetKey, entry);
@ -717,9 +746,6 @@
'externalRecipeFiles',
'userRecipes'
);
if ( recipesChanged ) {
µm.recipeManager.reset();
}
if ( typeof callback === 'function' ) {
callback({
hostsChanged: hostsChanged,

Loading…
Cancel
Save