修复夸克直链播放重复转存相同文件
This commit is contained in:
@@ -3936,7 +3936,7 @@ const NetDiskConfigComponent = ({
|
||||
const [enabled, setEnabled] = useState(false);
|
||||
const [cookie, setCookie] = useState('');
|
||||
const [savePath, setSavePath] = useState('/');
|
||||
const [quarkPlayMode, setQuarkPlayMode] = useState<'direct_first' | 'transcode_first'>('direct_first');
|
||||
const [quarkPlayMode, setQuarkPlayMode] = useState<'direct_first' | 'transcode_first'>('transcode_first');
|
||||
const [mobileEnabled, setMobileEnabled] = useState(false);
|
||||
const [mobileAuthorization, setMobileAuthorization] = useState('');
|
||||
const [baiduEnabled, setBaiduEnabled] = useState(false);
|
||||
@@ -3960,7 +3960,7 @@ const NetDiskConfigComponent = ({
|
||||
setEnabled(quark?.Enabled || false);
|
||||
setCookie(quark?.Cookie || '');
|
||||
setSavePath(quark?.SavePath || '/');
|
||||
setQuarkPlayMode(quark?.PlayMode === 'transcode_first' ? 'transcode_first' : 'direct_first');
|
||||
setQuarkPlayMode(quark?.PlayMode === 'direct_first' ? 'direct_first' : 'transcode_first');
|
||||
setMobileEnabled(mobile?.Enabled || false);
|
||||
setMobileAuthorization(mobile?.Authorization || '');
|
||||
setBaiduEnabled(config?.NetDiskConfig?.Baidu?.Enabled || false);
|
||||
|
||||
@@ -79,7 +79,7 @@ export async function POST(request: NextRequest) {
|
||||
Enabled: Boolean(Quark?.Enabled),
|
||||
Cookie: normalizedCookie,
|
||||
SavePath: Quark?.SavePath || '/',
|
||||
PlayMode: Quark?.PlayMode === 'transcode_first' ? 'transcode_first' : 'direct_first',
|
||||
PlayMode: Quark?.PlayMode === 'direct_first' ? 'direct_first' : 'transcode_first',
|
||||
};
|
||||
adminConfig.NetDiskConfig.Mobile = {
|
||||
Enabled: Boolean(Mobile?.Enabled),
|
||||
|
||||
@@ -45,6 +45,8 @@ export async function GET(request: NextRequest) {
|
||||
shareId: session.shareId,
|
||||
shareToken: session.shareToken,
|
||||
fileId: file.fid,
|
||||
fileName: file.name,
|
||||
size: file.size,
|
||||
shareFileToken: file.shareFidToken,
|
||||
playFolderFid: session.playFolderFid,
|
||||
});
|
||||
|
||||
+3
-3
@@ -724,7 +724,7 @@ export function configSelfCheck(adminConfig: AdminConfig): AdminConfig {
|
||||
Enabled: false,
|
||||
Cookie: '',
|
||||
SavePath: '/',
|
||||
PlayMode: 'direct_first',
|
||||
PlayMode: 'transcode_first',
|
||||
},
|
||||
Mobile: {
|
||||
Enabled: false,
|
||||
@@ -762,11 +762,11 @@ export function configSelfCheck(adminConfig: AdminConfig): AdminConfig {
|
||||
Enabled: false,
|
||||
Cookie: '',
|
||||
SavePath: '/',
|
||||
PlayMode: 'direct_first',
|
||||
PlayMode: 'transcode_first',
|
||||
};
|
||||
}
|
||||
if (!adminConfig.NetDiskConfig.Quark.PlayMode) {
|
||||
adminConfig.NetDiskConfig.Quark.PlayMode = 'direct_first';
|
||||
adminConfig.NetDiskConfig.Quark.PlayMode = 'transcode_first';
|
||||
}
|
||||
|
||||
if (!adminConfig.NetDiskConfig.Mobile) {
|
||||
|
||||
@@ -34,7 +34,7 @@ export async function resolveQuarkSession(id: string) {
|
||||
throw new Error('夸克网盘播放信息恢复失败');
|
||||
}
|
||||
|
||||
const playMode: QuarkPlayMode = quarkConfig.PlayMode === 'transcode_first' ? 'transcode_first' : 'direct_first';
|
||||
const playMode: QuarkPlayMode = quarkConfig.PlayMode === 'direct_first' ? 'direct_first' : 'transcode_first';
|
||||
|
||||
return {
|
||||
session,
|
||||
|
||||
@@ -298,6 +298,27 @@ async function findDirectoryByName(
|
||||
) || null;
|
||||
}
|
||||
|
||||
async function findDriveFileInFolder(
|
||||
cookie: string,
|
||||
parentFid: string,
|
||||
input: { fileName?: string; size?: number }
|
||||
): Promise<any | null> {
|
||||
const fileName = input.fileName?.trim();
|
||||
if (!fileName) return null;
|
||||
|
||||
const items = await fetchAllDriveFolderItems(cookie, parentFid);
|
||||
return items.find((item: any) => {
|
||||
const isDir = Boolean(item.dir || item.is_dir || item.file_type === 0);
|
||||
if (isDir) return false;
|
||||
const itemName = String(item.file_name || item.name || '');
|
||||
if (itemName !== fileName) return false;
|
||||
if (input.size && Number(item.size || 0) > 0) {
|
||||
return Number(item.size || 0) === input.size;
|
||||
}
|
||||
return true;
|
||||
}) || null;
|
||||
}
|
||||
|
||||
export async function validateQuarkCookieReadable(cookie: string): Promise<void> {
|
||||
const safeCookie = assertQuarkCookieHeaderSafe(cookie);
|
||||
await fetchDriveFolderItems(safeCookie, '0');
|
||||
@@ -626,11 +647,22 @@ export async function saveQuarkShareFile(
|
||||
shareId: string;
|
||||
shareToken: string;
|
||||
fileId: string;
|
||||
fileName?: string;
|
||||
size?: number;
|
||||
shareFileToken?: string;
|
||||
playFolderFid: string;
|
||||
}
|
||||
): Promise<string> {
|
||||
const safeCookie = assertQuarkCookieHeaderSafe(cookie);
|
||||
|
||||
const existedFile = await findDriveFileInFolder(safeCookie, input.playFolderFid, {
|
||||
fileName: input.fileName,
|
||||
size: input.size,
|
||||
});
|
||||
if (existedFile) {
|
||||
return String(existedFile.fid || existedFile.file_id);
|
||||
}
|
||||
|
||||
const taskId = await submitSaveTask(
|
||||
safeCookie,
|
||||
{ pwdId: input.shareId, passcode: '' },
|
||||
@@ -639,8 +671,9 @@ export async function saveQuarkShareFile(
|
||||
[
|
||||
{
|
||||
fid: input.fileId,
|
||||
fileName: '',
|
||||
fileName: input.fileName || '',
|
||||
dir: false,
|
||||
size: input.size,
|
||||
shareFidToken: input.shareFileToken,
|
||||
},
|
||||
]
|
||||
@@ -668,6 +701,14 @@ export async function saveQuarkShareFile(
|
||||
return String(saveAsTopFids[0]);
|
||||
}
|
||||
|
||||
const savedFile = await findDriveFileInFolder(safeCookie, input.playFolderFid, {
|
||||
fileName: input.fileName,
|
||||
size: input.size,
|
||||
});
|
||||
if (savedFile) {
|
||||
return String(savedFile.fid || savedFile.file_id);
|
||||
}
|
||||
|
||||
const status = data?.data?.status;
|
||||
if (status === -1 || status === 'failed' || data?.data?.err_code) {
|
||||
throw new Error(data?.data?.message || data?.data?.err_msg || '夸克任务执行失败');
|
||||
@@ -686,7 +727,7 @@ export async function saveQuarkShareFile(
|
||||
export async function getQuarkPlayUrls(
|
||||
cookie: string,
|
||||
savedFileId: string,
|
||||
playMode: QuarkPlayMode = 'direct_first'
|
||||
playMode: QuarkPlayMode = 'transcode_first'
|
||||
): Promise<Array<{ name: string; url: string; priority: number }>> {
|
||||
const safeCookie = assertQuarkCookieHeaderSafe(cookie);
|
||||
const headers = getHeaders(safeCookie);
|
||||
|
||||
Reference in New Issue
Block a user