dev......
This commit is contained in:
@@ -13,7 +13,7 @@ export function useDarkMode() {
|
||||
|
||||
const toggleDarkMode = useCallback(async () => {
|
||||
await updateSetting({ darkMode: !darkMode });
|
||||
}, [darkMode]);
|
||||
}, [darkMode, updateSetting]);
|
||||
|
||||
return { darkMode, toggleDarkMode };
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export function useRules() {
|
||||
await updateSync({ rulesUpdateAt: updateAt });
|
||||
trySyncRules();
|
||||
},
|
||||
[rulesUpdateAt]
|
||||
[rulesUpdateAt, save, updateSync]
|
||||
);
|
||||
|
||||
const add = useCallback(
|
||||
@@ -87,39 +87,3 @@ export function useRules() {
|
||||
|
||||
return { list, add, del, put, merge };
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 订阅规则
|
||||
// * @returns
|
||||
// */
|
||||
// export function useSubrules() {
|
||||
// const setting = useSetting();
|
||||
// const updateSetting = useSettingUpdate();
|
||||
// const list = setting?.subrulesList || DEFAULT_SUBRULES_LIST;
|
||||
|
||||
// const select = async (url) => {
|
||||
// const subrulesList = [...list];
|
||||
// subrulesList.forEach((item) => {
|
||||
// if (item.url === url) {
|
||||
// item.selected = true;
|
||||
// } else {
|
||||
// item.selected = false;
|
||||
// }
|
||||
// });
|
||||
// await updateSetting({ subrulesList });
|
||||
// };
|
||||
|
||||
// const add = async (url) => {
|
||||
// const subrulesList = [...list];
|
||||
// subrulesList.push({ url });
|
||||
// await updateSetting({ subrulesList });
|
||||
// };
|
||||
|
||||
// const del = async (url) => {
|
||||
// let subrulesList = [...list];
|
||||
// subrulesList = subrulesList.filter((item) => item.url !== url);
|
||||
// await updateSetting({ subrulesList });
|
||||
// };
|
||||
|
||||
// return { list, select, add, del };
|
||||
// }
|
||||
|
||||
@@ -23,7 +23,7 @@ export function SettingProvider({ children }) {
|
||||
await updateSync({ settingUpdateAt: updateAt });
|
||||
trySyncSetting();
|
||||
},
|
||||
[settingUpdateAt]
|
||||
[settingUpdateAt, update, updateSync]
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -45,35 +45,3 @@ export function SettingProvider({ children }) {
|
||||
export function useSetting() {
|
||||
return useContext(SettingContext);
|
||||
}
|
||||
|
||||
// export function useSetting() {
|
||||
// const [setting,setSeting]= useState(null);
|
||||
// useEffect(()=>{
|
||||
// (async ()=>{
|
||||
// const
|
||||
// })()
|
||||
// },[])
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 设置hook
|
||||
// * @returns
|
||||
// */
|
||||
// export function useSetting() {
|
||||
// const storages = useStorages();
|
||||
// return storages?.[STOKEY_SETTING];
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 更新设置
|
||||
// * @returns
|
||||
// */
|
||||
// export function useSettingUpdate() {
|
||||
// const sync = useSync();
|
||||
// return async (obj) => {
|
||||
// const updateAt = sync.opt?.settingUpdateAt ? Date.now() : 0;
|
||||
// await storage.putObj(STOKEY_SETTING, obj);
|
||||
// await sync.update({ settingUpdateAt: updateAt });
|
||||
// trySyncSetting();
|
||||
// };
|
||||
// }
|
||||
|
||||
@@ -33,83 +33,3 @@ export function useStorage(key, defaultVal = null) {
|
||||
|
||||
return { data, save, update, remove };
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 默认配置
|
||||
// */
|
||||
// export const defaultStorage = {
|
||||
// [STOKEY_SETTING]: DEFAULT_SETTING,
|
||||
// [STOKEY_RULES]: DEFAULT_RULES,
|
||||
// [STOKEY_SYNC]: DEFAULT_SYNC,
|
||||
// };
|
||||
|
||||
// const activeKeys = Object.keys(defaultStorage);
|
||||
|
||||
// const StoragesContext = createContext(null);
|
||||
|
||||
// export function StoragesProvider({ children }) {
|
||||
// const [storages, setStorages] = useState(null);
|
||||
|
||||
// const handleChanged = (changes) => {
|
||||
// if (isWeb || isGm) {
|
||||
// const { key, oldValue, newValue } = changes;
|
||||
// changes = {
|
||||
// [key]: {
|
||||
// oldValue,
|
||||
// newValue,
|
||||
// },
|
||||
// };
|
||||
// }
|
||||
// const newStorages = {};
|
||||
// Object.entries(changes)
|
||||
// .filter(
|
||||
// ([key, { oldValue, newValue }]) =>
|
||||
// activeKeys.includes(key) && oldValue !== newValue
|
||||
// )
|
||||
// .forEach(([key, { newValue }]) => {
|
||||
// newStorages[key] = JSON.parse(newValue);
|
||||
// });
|
||||
// if (Object.keys(newStorages).length !== 0) {
|
||||
// setStorages((pre) => ({ ...pre, ...newStorages }));
|
||||
// }
|
||||
// };
|
||||
|
||||
// useEffect(() => {
|
||||
// // 首次从storage同步配置到内存
|
||||
// (async () => {
|
||||
// const curStorages = {};
|
||||
// for (const key of activeKeys) {
|
||||
// const val = await storage.get(key);
|
||||
// if (val) {
|
||||
// curStorages[key] = JSON.parse(val);
|
||||
// } else {
|
||||
// await storage.setObj(key, defaultStorage[key]);
|
||||
// curStorages[key] = defaultStorage[key];
|
||||
// }
|
||||
// }
|
||||
// setStorages(curStorages);
|
||||
// })();
|
||||
|
||||
// // 监听storage,并同步到内存中
|
||||
// storage.onChanged(handleChanged);
|
||||
|
||||
// // 解除监听
|
||||
// return () => {
|
||||
// if (isExt) {
|
||||
// browser.storage.onChanged.removeListener(handleChanged);
|
||||
// } else {
|
||||
// window.removeEventListener("storage", handleChanged);
|
||||
// }
|
||||
// };
|
||||
// }, []);
|
||||
|
||||
// return (
|
||||
// <StoragesContext.Provider value={storages}>
|
||||
// {children}
|
||||
// </StoragesContext.Provider>
|
||||
// );
|
||||
// }
|
||||
|
||||
// export function useStorages() {
|
||||
// return useContext(StoragesContext);
|
||||
// }
|
||||
|
||||
@@ -1,47 +1,81 @@
|
||||
import { DEFAULT_SUBRULES_LIST } from "../config";
|
||||
import { useSetting } from "./Setting";
|
||||
import { useCallback } from "react";
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
import { loadOrFetchSubRules } from "../libs/subRules";
|
||||
import { delSubRules } from "../libs/storage";
|
||||
|
||||
/**
|
||||
* 订阅规则
|
||||
* @returns
|
||||
*/
|
||||
export function useSubRules() {
|
||||
const { data: setting, update: updateSetting } = useSetting();
|
||||
const list = setting?.subRulesList || DEFAULT_SUBRULES_LIST;
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [selectedRules, setSelectedRules] = useState([]);
|
||||
const { setting, updateSetting } = useSetting();
|
||||
const list = setting?.subrulesList || DEFAULT_SUBRULES_LIST;
|
||||
|
||||
const select = useCallback(
|
||||
const selectedSub = useMemo(() => list.find((item) => item.selected), [list]);
|
||||
const selectedUrl = selectedSub.url;
|
||||
|
||||
const selectSub = useCallback(
|
||||
async (url) => {
|
||||
const subRulesList = [...list];
|
||||
subRulesList.forEach((item) => {
|
||||
const subrulesList = [...list];
|
||||
subrulesList.forEach((item) => {
|
||||
if (item.url === url) {
|
||||
item.selected = true;
|
||||
} else {
|
||||
item.selected = false;
|
||||
}
|
||||
});
|
||||
await updateSetting({ subRulesList });
|
||||
await updateSetting({ subrulesList });
|
||||
},
|
||||
[list]
|
||||
[list, updateSetting]
|
||||
);
|
||||
|
||||
const add = useCallback(
|
||||
const addSub = useCallback(
|
||||
async (url) => {
|
||||
const subRulesList = [...list];
|
||||
subRulesList.push({ url, selected: false });
|
||||
await updateSetting({ subRulesList });
|
||||
const subrulesList = [...list];
|
||||
subrulesList.push({ url, selected: false });
|
||||
await updateSetting({ subrulesList });
|
||||
},
|
||||
[list]
|
||||
[list, updateSetting]
|
||||
);
|
||||
|
||||
const del = useCallback(
|
||||
const delSub = useCallback(
|
||||
async (url) => {
|
||||
let subRulesList = [...list];
|
||||
subRulesList = subRulesList.filter((item) => item.url !== url);
|
||||
await updateSetting({ subRulesList });
|
||||
let subrulesList = [...list];
|
||||
subrulesList = subrulesList.filter((item) => item.url !== url);
|
||||
await updateSetting({ subrulesList });
|
||||
await delSubRules(url);
|
||||
},
|
||||
[list]
|
||||
[list, updateSetting]
|
||||
);
|
||||
|
||||
return { list, select, add, del };
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
if (selectedUrl) {
|
||||
try {
|
||||
setLoading(true);
|
||||
const rules = await loadOrFetchSubRules(selectedUrl);
|
||||
setSelectedRules(rules);
|
||||
} catch (err) {
|
||||
console.log("[loadOrFetchSubRules]", err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
})();
|
||||
}, [selectedUrl]);
|
||||
|
||||
return {
|
||||
subList: list,
|
||||
selectSub,
|
||||
addSub,
|
||||
delSub,
|
||||
selectedSub,
|
||||
selectedUrl,
|
||||
selectedRules,
|
||||
setSelectedRules,
|
||||
loading,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,14 +9,3 @@ export function useSync() {
|
||||
const { data, update } = useStorage(STOKEY_SYNC, DEFAULT_SYNC);
|
||||
return { sync: data, updateSync: update };
|
||||
}
|
||||
// export function useSync() {
|
||||
// const storages = useStorages();
|
||||
// const opt = storages?.[STOKEY_SYNC];
|
||||
// const update = useCallback(async (obj) => {
|
||||
// await storage.putObj(STOKEY_SYNC, obj);
|
||||
// }, []);
|
||||
// return {
|
||||
// opt,
|
||||
// update,
|
||||
// };
|
||||
// }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useEffect } from "react";
|
||||
import { useState } from "react";
|
||||
import { detectLang } from "../libs/browser";
|
||||
import { detectLang } from "../libs";
|
||||
import { apiTranslate } from "../apis";
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user