feat: user control fluid search

This commit is contained in:
shinya
2025-08-17 17:32:42 +08:00
parent 714c4e0e9c
commit 98835391b5
20 changed files with 312 additions and 246 deletions

View File

@@ -5,7 +5,6 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { db } from '@/lib/db';
import { IStorage } from '@/lib/types';
export const runtime = 'edge';

View File

@@ -5,9 +5,9 @@ import { promisify } from 'util';
import { gunzip } from 'zlib';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { configSelfCheck, setCachedConfig } from '@/lib/config';
import { SimpleCrypto } from '@/lib/crypto';
import { db } from '@/lib/db';
import { configSelfCheck, setCachedConfig } from '@/lib/config';
const gunzipAsync = promisify(gunzip);

View File

@@ -38,6 +38,7 @@ export async function POST(request: NextRequest) {
DoubanImageProxyType,
DoubanImageProxy,
DisableYellowFilter,
FluidSearch,
} = body as {
SiteName: string;
Announcement: string;
@@ -48,6 +49,7 @@ export async function POST(request: NextRequest) {
DoubanImageProxyType: string;
DoubanImageProxy: string;
DisableYellowFilter: boolean;
FluidSearch: boolean;
};
// 参数校验
@@ -60,7 +62,8 @@ export async function POST(request: NextRequest) {
typeof DoubanProxy !== 'string' ||
typeof DoubanImageProxyType !== 'string' ||
typeof DoubanImageProxy !== 'string' ||
typeof DisableYellowFilter !== 'boolean'
typeof DisableYellowFilter !== 'boolean' ||
typeof FluidSearch !== 'boolean'
) {
return NextResponse.json({ error: '参数格式错误' }, { status: 400 });
}
@@ -89,6 +92,7 @@ export async function POST(request: NextRequest) {
DoubanImageProxyType,
DoubanImageProxy,
DisableYellowFilter,
FluidSearch,
};
// 写入数据库

View File

@@ -5,7 +5,6 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { db } from '@/lib/db';
import { IStorage } from '@/lib/types';
export const runtime = 'edge';

View File

@@ -4,7 +4,6 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { db } from '@/lib/db';
import { IStorage } from '@/lib/types';
export const runtime = 'edge';

View File

@@ -35,7 +35,7 @@ export async function GET(request: Request) {
Promise.race([
searchFromApi(site, query),
new Promise((_, reject) =>
setTimeout(() => reject(new Error(`${site.name} timeout`)), 20000)
setTimeout(() => reject(new Error(`${site.name} timeout`)), 10000)
),
]).catch((err) => {
console.warn(`搜索失败 ${site.name}:`, err.message);

View File

@@ -66,10 +66,10 @@ export async function GET(request: NextRequest) {
// 记录已完成的源数量
let completedSources = 0;
let allResults: any[] = [];
const allResults: any[] = [];
// 为每个源创建搜索 Promise
const searchPromises = apiSites.map(async (site, index) => {
const searchPromises = apiSites.map(async (site) => {
try {
// 添加超时控制
const searchPromise = Promise.race([