subrules sync time

This commit is contained in:
Gabe Yuan
2023-09-11 17:56:31 +08:00
parent 2bf79dbc51
commit 79612f8a1b
4 changed files with 53 additions and 8 deletions

View File

@@ -285,4 +285,5 @@ export const DEFAULT_SYNC = {
rulesUpdateAt: 0,
rulesSyncAt: 0,
subRulesSyncAt: 0, // 订阅规则同步时间
dataCaches: {}, // 缓存同步时间
};

View File

@@ -48,7 +48,7 @@ export function useSubRules() {
const addSub = useCallback(
async (url) => {
const subrulesList = [...list];
subrulesList.push({ url, selected: false, syncAt: Date.now() });
subrulesList.push({ url, selected: false });
await updateSetting({ subrulesList });
},
[list, updateSetting]

View File

@@ -1,3 +1,4 @@
import { useCallback } from "react";
import { STOKEY_SYNC, DEFAULT_SYNC } from "../config";
import { useStorage } from "./Storage";
@@ -9,3 +10,36 @@ export function useSync() {
const { data, update } = useStorage(STOKEY_SYNC, DEFAULT_SYNC);
return { sync: data, updateSync: update };
}
/**
* caches sync hook
* @param {*} url
* @returns
*/
export function useSyncCaches() {
const { sync, updateSync } = useSync();
const updateDataCache = useCallback(
async (url) => {
const dataCaches = sync.dataCaches || {};
dataCaches[url] = Date.now();
await updateSync({ dataCaches });
},
[sync, updateSync]
);
const deleteDataCache = useCallback(
async (url) => {
const dataCaches = sync.dataCaches || {};
delete dataCaches[url];
await updateSync({ dataCaches });
},
[sync, updateSync]
);
return {
dataCaches: sync.dataCaches || {},
updateDataCache,
deleteDataCache,
};
}

View File

@@ -48,6 +48,7 @@ import { delSubRules, getSyncWithDefault } from "../../libs/storage";
import OwSubRule from "./OwSubRule";
import ClearAllIcon from "@mui/icons-material/ClearAll";
import HelpButton from "./HelpButton";
import { useSyncCaches } from "../../hooks/Sync";
function RuleFields({ rule, rules, setShow, setKeyword }) {
const initFormValues = rule || {
@@ -624,8 +625,9 @@ function SubRulesItem({
syncAt,
selectedUrl,
delSub,
updateSub,
setSelectedRules,
updateDataCache,
deleteDataCache,
}) {
const [loading, setLoading] = useState(false);
@@ -633,6 +635,7 @@ function SubRulesItem({
try {
await delSub(url);
await delSubRules(url);
await deleteDataCache(url);
} catch (err) {
console.log("[del subrules]", err);
}
@@ -645,7 +648,7 @@ function SubRulesItem({
if (rules.length > 0 && url === selectedUrl) {
setSelectedRules(rules);
}
await updateSub(url, { syncAt: Date.now() });
await updateDataCache(url);
} catch (err) {
console.log("[sync sub rules]", err);
} finally {
@@ -680,7 +683,7 @@ function SubRulesItem({
);
}
function SubRulesEdit({ subList, addSub }) {
function SubRulesEdit({ subList, addSub, updateDataCache }) {
const i18n = useI18n();
const [inputText, setInputText] = useState("");
const [inputError, setInputError] = useState("");
@@ -715,6 +718,7 @@ function SubRulesEdit({ subList, addSub }) {
throw new Error("empty rules");
}
await addSub(url);
await updateDataCache(url);
setShowInput(false);
setInputText("");
} catch (err) {
@@ -787,7 +791,6 @@ function SubRules({ subRules }) {
const {
subList,
selectSub,
updateSub,
addSub,
delSub,
selectedUrl,
@@ -795,6 +798,8 @@ function SubRules({ subRules }) {
setSelectedRules,
loading,
} = subRules;
const { dataCaches, updateDataCache, deleteDataCache } =
useSyncCaches();
const handleSelect = (e) => {
const url = e.target.value;
@@ -803,19 +808,24 @@ function SubRules({ subRules }) {
return (
<Stack spacing={3}>
<SubRulesEdit subList={subList} addSub={addSub} />
<SubRulesEdit
subList={subList}
addSub={addSub}
updateDataCache={updateDataCache}
/>
<RadioGroup value={selectedUrl} onChange={handleSelect}>
{subList.map((item, index) => (
<SubRulesItem
key={item.url}
url={item.url}
syncAt={item.syncAt}
syncAt={dataCaches[item.url]}
index={index}
selectedUrl={selectedUrl}
delSub={delSub}
updateSub={updateSub}
setSelectedRules={setSelectedRules}
updateDataCache={updateDataCache}
deleteDataCache={deleteDataCache}
/>
))}
</RadioGroup>