subrules sync time
This commit is contained in:
@@ -285,4 +285,5 @@ export const DEFAULT_SYNC = {
|
|||||||
rulesUpdateAt: 0,
|
rulesUpdateAt: 0,
|
||||||
rulesSyncAt: 0,
|
rulesSyncAt: 0,
|
||||||
subRulesSyncAt: 0, // 订阅规则同步时间
|
subRulesSyncAt: 0, // 订阅规则同步时间
|
||||||
|
dataCaches: {}, // 缓存同步时间
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export function useSubRules() {
|
|||||||
const addSub = useCallback(
|
const addSub = useCallback(
|
||||||
async (url) => {
|
async (url) => {
|
||||||
const subrulesList = [...list];
|
const subrulesList = [...list];
|
||||||
subrulesList.push({ url, selected: false, syncAt: Date.now() });
|
subrulesList.push({ url, selected: false });
|
||||||
await updateSetting({ subrulesList });
|
await updateSetting({ subrulesList });
|
||||||
},
|
},
|
||||||
[list, updateSetting]
|
[list, updateSetting]
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { useCallback } from "react";
|
||||||
import { STOKEY_SYNC, DEFAULT_SYNC } from "../config";
|
import { STOKEY_SYNC, DEFAULT_SYNC } from "../config";
|
||||||
import { useStorage } from "./Storage";
|
import { useStorage } from "./Storage";
|
||||||
|
|
||||||
@@ -9,3 +10,36 @@ export function useSync() {
|
|||||||
const { data, update } = useStorage(STOKEY_SYNC, DEFAULT_SYNC);
|
const { data, update } = useStorage(STOKEY_SYNC, DEFAULT_SYNC);
|
||||||
return { sync: data, updateSync: update };
|
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,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import { delSubRules, getSyncWithDefault } from "../../libs/storage";
|
|||||||
import OwSubRule from "./OwSubRule";
|
import OwSubRule from "./OwSubRule";
|
||||||
import ClearAllIcon from "@mui/icons-material/ClearAll";
|
import ClearAllIcon from "@mui/icons-material/ClearAll";
|
||||||
import HelpButton from "./HelpButton";
|
import HelpButton from "./HelpButton";
|
||||||
|
import { useSyncCaches } from "../../hooks/Sync";
|
||||||
|
|
||||||
function RuleFields({ rule, rules, setShow, setKeyword }) {
|
function RuleFields({ rule, rules, setShow, setKeyword }) {
|
||||||
const initFormValues = rule || {
|
const initFormValues = rule || {
|
||||||
@@ -624,8 +625,9 @@ function SubRulesItem({
|
|||||||
syncAt,
|
syncAt,
|
||||||
selectedUrl,
|
selectedUrl,
|
||||||
delSub,
|
delSub,
|
||||||
updateSub,
|
|
||||||
setSelectedRules,
|
setSelectedRules,
|
||||||
|
updateDataCache,
|
||||||
|
deleteDataCache,
|
||||||
}) {
|
}) {
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
@@ -633,6 +635,7 @@ function SubRulesItem({
|
|||||||
try {
|
try {
|
||||||
await delSub(url);
|
await delSub(url);
|
||||||
await delSubRules(url);
|
await delSubRules(url);
|
||||||
|
await deleteDataCache(url);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[del subrules]", err);
|
console.log("[del subrules]", err);
|
||||||
}
|
}
|
||||||
@@ -645,7 +648,7 @@ function SubRulesItem({
|
|||||||
if (rules.length > 0 && url === selectedUrl) {
|
if (rules.length > 0 && url === selectedUrl) {
|
||||||
setSelectedRules(rules);
|
setSelectedRules(rules);
|
||||||
}
|
}
|
||||||
await updateSub(url, { syncAt: Date.now() });
|
await updateDataCache(url);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[sync sub rules]", err);
|
console.log("[sync sub rules]", err);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -680,7 +683,7 @@ function SubRulesItem({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function SubRulesEdit({ subList, addSub }) {
|
function SubRulesEdit({ subList, addSub, updateDataCache }) {
|
||||||
const i18n = useI18n();
|
const i18n = useI18n();
|
||||||
const [inputText, setInputText] = useState("");
|
const [inputText, setInputText] = useState("");
|
||||||
const [inputError, setInputError] = useState("");
|
const [inputError, setInputError] = useState("");
|
||||||
@@ -715,6 +718,7 @@ function SubRulesEdit({ subList, addSub }) {
|
|||||||
throw new Error("empty rules");
|
throw new Error("empty rules");
|
||||||
}
|
}
|
||||||
await addSub(url);
|
await addSub(url);
|
||||||
|
await updateDataCache(url);
|
||||||
setShowInput(false);
|
setShowInput(false);
|
||||||
setInputText("");
|
setInputText("");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -787,7 +791,6 @@ function SubRules({ subRules }) {
|
|||||||
const {
|
const {
|
||||||
subList,
|
subList,
|
||||||
selectSub,
|
selectSub,
|
||||||
updateSub,
|
|
||||||
addSub,
|
addSub,
|
||||||
delSub,
|
delSub,
|
||||||
selectedUrl,
|
selectedUrl,
|
||||||
@@ -795,6 +798,8 @@ function SubRules({ subRules }) {
|
|||||||
setSelectedRules,
|
setSelectedRules,
|
||||||
loading,
|
loading,
|
||||||
} = subRules;
|
} = subRules;
|
||||||
|
const { dataCaches, updateDataCache, deleteDataCache } =
|
||||||
|
useSyncCaches();
|
||||||
|
|
||||||
const handleSelect = (e) => {
|
const handleSelect = (e) => {
|
||||||
const url = e.target.value;
|
const url = e.target.value;
|
||||||
@@ -803,19 +808,24 @@ function SubRules({ subRules }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing={3}>
|
<Stack spacing={3}>
|
||||||
<SubRulesEdit subList={subList} addSub={addSub} />
|
<SubRulesEdit
|
||||||
|
subList={subList}
|
||||||
|
addSub={addSub}
|
||||||
|
updateDataCache={updateDataCache}
|
||||||
|
/>
|
||||||
|
|
||||||
<RadioGroup value={selectedUrl} onChange={handleSelect}>
|
<RadioGroup value={selectedUrl} onChange={handleSelect}>
|
||||||
{subList.map((item, index) => (
|
{subList.map((item, index) => (
|
||||||
<SubRulesItem
|
<SubRulesItem
|
||||||
key={item.url}
|
key={item.url}
|
||||||
url={item.url}
|
url={item.url}
|
||||||
syncAt={item.syncAt}
|
syncAt={dataCaches[item.url]}
|
||||||
index={index}
|
index={index}
|
||||||
selectedUrl={selectedUrl}
|
selectedUrl={selectedUrl}
|
||||||
delSub={delSub}
|
delSub={delSub}
|
||||||
updateSub={updateSub}
|
|
||||||
setSelectedRules={setSelectedRules}
|
setSelectedRules={setSelectedRules}
|
||||||
|
updateDataCache={updateDataCache}
|
||||||
|
deleteDataCache={deleteDataCache}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</RadioGroup>
|
</RadioGroup>
|
||||||
|
|||||||
Reference in New Issue
Block a user