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();
if (pluginListCache && (now - cacheTimestamp) < CACHE_TTL) {
if (!forceRefresh && pluginListCache && (now - cacheTimestamp) < CACHE_TTL) {
//console.log('Using cached plugin list');
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 {
const data = await fetchPluginList();
// 支持 forceRefresh 查询参数强制刷新缓存
const forceRefresh = req.query['forceRefresh'] === 'true';
const data = await fetchPluginList(forceRefresh);
return sendSuccess(res, data);
} catch (e: any) {
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> {
const { data } = await serverRequest.get<ServerResponse<PluginStoreList>>('/Plugin/Store/List');
public static async getPluginStoreList (forceRefresh: boolean = false): Promise<PluginStoreList> {
const params = forceRefresh ? { forceRefresh: 'true' } : {};
const { data } = await serverRequest.get<ServerResponse<PluginStoreList>>('/Plugin/Store/List', { params });
return data.data;
}

View File

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