Skip to content

Commit

Permalink
Fixing Import Rules from UI issues
Browse files Browse the repository at this point in the history
  • Loading branch information
salarcode committed Mar 16, 2024
1 parent 8e42370 commit 441f844
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 50 deletions.
75 changes: 42 additions & 33 deletions src/lib/RuleImporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ export const RuleImporter = {
rulesConfig: IExternalRulesConfig,
text: string | ArrayBuffer,
file: any,
append: boolean,
noDuplicates: boolean,
currentRules: ProxyRule[],
success: Function,
fail?: Function
Expand Down Expand Up @@ -168,51 +168,60 @@ export const RuleImporter = {
}

// ----
if (append) {
if (rules.blackList && rules.blackList.length) {
if (!currentRules)
currentRules = [];
let importedRuleList = rules.blackList.map((rule) => {
return {
converted: rule.getProxyRule(),
rule: rule
}
});
if (noDuplicates) {
if (!currentRules)
currentRules = [];
rules.blackList = rules.blackList || [];
rules.whiteList = rules.whiteList || [];

function deduplicateRules(importedRules: ImportedProxyRule[], shouldBeWhiteList: boolean = false): ImportedProxyRule[] {
// make a copy
let appendableRuleList: ImportedProxyRule[] = [];
let uniqueRuleList: ImportedProxyRule[] = [];

for (let importedRule of importedRuleList) {
let ruleExists = currentRules.some((rule) => {
for (let importedRule of importedRules) {
let convertedRule = importedRule.getProxyRule();

let ruleExists = currentRules.some((rule) =>
// NOTE: the comparison is limited to these properties because `getProxyRule` only fills these
rule.ruleType == importedRule.converted.ruleType &&
rule.ruleSearch == importedRule.converted.ruleSearch &&
rule.ruleRegex == importedRule.converted.ruleRegex;
});
rule.ruleType == convertedRule.ruleType &&
rule.ruleSearch == convertedRule.ruleSearch &&
rule.ruleRegex == convertedRule.ruleRegex &&
(!shouldBeWhiteList || (shouldBeWhiteList && rule.whiteList))
);
if (ruleExists)
continue;

// append imported rule
appendableRuleList.push(importedRule.rule);
uniqueRuleList.push(importedRule);
}

// Total ${appendedRuleCount} out of ${parsedRuleList.length} rules are appended.<br>Don't forget to save the changes.
let message = api.i18n
.getMessage('importerImportSuccess')
.replace('{0}', appendableRuleList.length.toString())
.replace('{1}', importedRuleList.length.toString());
return uniqueRuleList;
}

rules.blackList = appendableRuleList;
let parsedRulesCount = rules.blackList.length + rules.whiteList.length;

if (success) {
// not need for any check, return straight away
success({
success: true,
message: message,
rules: rules,
});
}
// ----
rules.blackList = deduplicateRules(rules.blackList);
rules.whiteList = deduplicateRules(rules.whiteList, true);

// ----
let finalRulesCount = rules.blackList.length + rules.whiteList.length;

// Total ${appendedRuleCount} out of ${parsedRuleList.length} rules are appended.<br>Don't forget to save the changes.
let message = api.i18n
.getMessage('importerImportSuccess')
.replace('{0}', finalRulesCount.toString())
.replace('{1}', parsedRulesCount.toString());

if (success) {
// not need for any check, return straight away
success({
success: true,
message: message,
rules: rules,
});
}

} else {
// Total of {0} proxy rules and {1} white listed rules are returned.<br>Don't forget to save the changes.
let message = api.i18n
Expand Down
38 changes: 21 additions & 17 deletions src/ui/code/settingsPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ export class settingsPage {
modalContainer.find("#txtRuleUrlRegex").val(proxyRule.ruleRegex);
modalContainer.find("#txtRuleUrlExact").val(proxyRule.ruleExact);
modalContainer.find("#chkRuleEnabled").prop('checked', proxyRule.enabled);
modalContainer.find("#cmdRuleAction").val(proxyRule.whiteList ? "1" : "0");
cmdRuleAction.val(proxyRule.whiteList ? "1" : "0");

let proxyServerId = proxyRule.proxyServerId;
if (proxyRule.proxy)
Expand Down Expand Up @@ -2670,31 +2670,31 @@ export class settingsPage {
file,
append,
proxyRules,
(
success: boolean,
message: string,
(importResult: {
success: boolean;
message: string;
rules: {
whiteList: ImportedProxyRule[];
blackList: ImportedProxyRule[];
}
) => {
if (!rules) return;
};
}) => {
if (!importResult) return;

if (success) {
if (message)
messageBox.success(message);
if (importResult.success) {
if (importResult.message)
messageBox.success(importResult.message);

// empty the file input
selectFileElement.value = "";

doImport(rules);
doImport(importResult.rules);

// close the window
modalContainer.modal("hide");
}
else {
if (message)
messageBox.error(message);
if (importResult.message)
messageBox.error(importResult.message);
}
},
(error: Error) => {
Expand All @@ -2708,15 +2708,19 @@ export class settingsPage {
whiteList: ImportedProxyRule[];
blackList: ImportedProxyRule[];
}) {
debugger;
let finalRules: ProxyRule[];
let mappedRules = rules.blackList.map((rule) => rule.getProxyRule());
let mappedBlackRules = rules.blackList.map((rule) => rule.getProxyRule());
let mappedWhiteRules = rules.whiteList.map((rule) => {
let newRule = rule.getProxyRule();
newRule.whiteList = true;
return newRule;
});

if (append) {
finalRules = proxyRules.concat(mappedRules);
finalRules = proxyRules.concat(mappedBlackRules).concat(mappedWhiteRules);
}
else
finalRules = mappedRules;
finalRules = mappedBlackRules.concat(mappedWhiteRules);

settingsPage.loadRules(pageProfile, finalRules);
}
Expand Down

0 comments on commit 441f844

Please sign in to comment.