This commit is contained in:
手瓜一十雪 2026-02-01 10:33:58 +08:00
parent 7c65b1eaf1
commit cc8891b6a1
3 changed files with 16 additions and 12 deletions

View File

@ -34,12 +34,12 @@ const CACHE_TTL = 10 * 60 * 1000; // 10分钟缓存
/** /**
* 使 * 使
* 10 * 10
*/ */
async function fetchPluginList (): Promise<PluginStoreList> { async function fetchPluginList (forceRefresh: boolean = false): Promise<PluginStoreList> {
// 检查缓存 // 检查缓存(如果不是强制刷新)
const now = Date.now(); const now = Date.now();
if (pluginListCache && (now - cacheTimestamp) < CACHE_TTL) { if (!forceRefresh && pluginListCache && (now - cacheTimestamp) < CACHE_TTL) {
//console.log('Using cached plugin list'); //console.log('Using cached plugin list');
return pluginListCache; return pluginListCache;
} }
@ -192,9 +192,11 @@ async function extractPlugin (zipPath: string, pluginId: string): Promise<void>
/** /**
* *
*/ */
export const GetPluginStoreListHandler: RequestHandler = async (_req, res) => { export const GetPluginStoreListHandler: RequestHandler = async (req, res) => {
try { try {
const data = await fetchPluginList(); // 支持 forceRefresh 查询参数强制刷新缓存
const forceRefresh = req.query['forceRefresh'] === 'true';
const data = await fetchPluginList(forceRefresh);
return sendSuccess(res, data); return sendSuccess(res, data);
} catch (e: any) { } catch (e: any) {
return sendError(res, 'Failed to fetch plugin store list: ' + e.message); return sendError(res, 'Failed to fetch plugin store list: ' + e.message);

View File

@ -140,9 +140,11 @@ export default class PluginManager {
/** /**
* *
* @param forceRefresh
*/ */
public static async getPluginStoreList (): Promise<PluginStoreList> { public static async getPluginStoreList (forceRefresh: boolean = false): Promise<PluginStoreList> {
const { data } = await serverRequest.get<ServerResponse<PluginStoreList>>('/Plugin/Store/List'); const params = forceRefresh ? { forceRefresh: 'true' } : {};
const { data } = await serverRequest.get<ServerResponse<PluginStoreList>>('/Plugin/Store/List', { params });
return data.data; return data.data;
} }

View File

@ -51,10 +51,10 @@ export default function PluginStorePage () {
const [pendingInstallPlugin, setPendingInstallPlugin] = useState<PluginStoreItem | null>(null); const [pendingInstallPlugin, setPendingInstallPlugin] = useState<PluginStoreItem | null>(null);
const [selectedDownloadMirror, setSelectedDownloadMirror] = useState<string | undefined>(undefined); const [selectedDownloadMirror, setSelectedDownloadMirror] = useState<string | undefined>(undefined);
const loadPlugins = async () => { const loadPlugins = async (forceRefresh: boolean = false) => {
setLoading(true); setLoading(true);
try { try {
const data = await PluginManager.getPluginStoreList(); const data = await PluginManager.getPluginStoreList(forceRefresh);
setPlugins(data.plugins); setPlugins(data.plugins);
// 检查插件管理器是否已加载 // 检查插件管理器是否已加载
@ -238,7 +238,7 @@ export default function PluginStorePage () {
isIconOnly isIconOnly
className="bg-default-100/50 hover:bg-default-200/50 text-default-700 backdrop-blur-md" className="bg-default-100/50 hover:bg-default-200/50 text-default-700 backdrop-blur-md"
radius="full" radius="full"
onPress={loadPlugins} onPress={() => loadPlugins(true)}
isLoading={loading} isLoading={loading}
> >
<IoMdRefresh size={24} /> <IoMdRefresh size={24} />