Files
kiss-translator/src/libs/subRules.js

74 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-08-31 00:18:57 +08:00
import { GLOBAL_KEY } from "../config";
import {
getSyncWithDefault,
updateSync,
setSubRules,
getSubRules,
} from "./storage";
2023-08-30 18:05:37 +08:00
import { apiFetchRules } from "../apis";
2023-08-31 00:18:57 +08:00
import { checkRules } from "./rules";
2023-09-07 10:20:08 +08:00
import { isAllchar } from "./utils";
2023-08-30 18:05:37 +08:00
/**
* 同步订阅规则
* @param {*} url
* @returns
*/
export const syncSubRules = async (url, isBg = false) => {
2023-08-31 00:18:57 +08:00
const res = await apiFetchRules(url, isBg);
const rules = checkRules(res).filter(
2023-09-07 10:20:08 +08:00
({ pattern }) => !isAllchar(pattern, GLOBAL_KEY)
2023-08-31 00:18:57 +08:00
);
2023-08-30 18:05:37 +08:00
if (rules.length > 0) {
2023-08-31 00:18:57 +08:00
await setSubRules(url, rules);
2023-08-30 18:05:37 +08:00
}
return rules;
};
/**
* 同步所有订阅规则
* @param {*} url
* @returns
*/
export const syncAllSubRules = async (subrulesList, isBg = false) => {
for (let subrules of subrulesList) {
try {
await syncSubRules(subrules.url, isBg);
} catch (err) {
console.log(`[sync subrule error]: ${subrules.url}`, err);
}
}
};
/**
* 根据时间同步所有订阅规则
* @param {*} url
* @returns
*/
export const trySyncAllSubRules = async ({ subrulesList }, isBg = false) => {
try {
const { subRulesSyncAt } = await getSyncWithDefault();
const now = Date.now();
const interval = 24 * 60 * 60 * 1000; // 间隔一天
if (now - subRulesSyncAt > interval) {
await syncAllSubRules(subrulesList, isBg);
await updateSync({ subRulesSyncAt: now });
}
} catch (err) {
console.log("[try sync all subrules]", err);
}
};
/**
* 从缓存或远程加载订阅规则
* @param {*} url
* @returns
*/
export const loadOrFetchSubRules = async (url) => {
2023-08-31 00:18:57 +08:00
const rules = await getSubRules(url);
2023-08-30 18:05:37 +08:00
if (rules?.length) {
return rules;
}
2023-08-31 13:38:06 +08:00
return syncSubRules(url);
2023-08-30 18:05:37 +08:00
};