From 1774f681be66ca6e71f7277f540ae49ce2f173f0 Mon Sep 17 00:00:00 2001 From: wisecolt Date: Tue, 3 Feb 2026 16:39:49 +0300 Subject: [PATCH] =?UTF-8?q?fix(server):=20youtube=20m=C3=BCzik=20videolar?= =?UTF-8?q?=C4=B1n=C4=B1n=20stream=20etme=20sorununu=20=C3=A7=C3=B6z?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Küçük resim ve video akışı için dosya yolları çözülürken `resolveStoragePath` fonksiyonu kullanılmaya başlandı. Bu sayede dosyalar standart indirme dizininde veya rclone ile yönetilen bir konumda olsa bile doğru şekilde erişilebilir. --- server/server.js | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/server/server.js b/server/server.js index aaf7807..f4df7a1 100644 --- a/server/server.js +++ b/server/server.js @@ -10369,9 +10369,14 @@ function collectMusicEntries() { const infoHash = info.infoHash || folder; const title = info.name || metadata?.title || path.basename(targetPath) || folder; - const thumbnail = - metadata?.thumbnail || - (metadata ? `/yt-data/${folder}/thumbnail.jpg` : null); + // Thumbnail kontrolü - metadata varsa fiziksel dosya varlığını kontrol et + let thumbnail = metadata?.thumbnail; + if (!thumbnail && metadata) { + const thumbPath = path.join(YT_DATA_ROOT, folder, "thumbnail.jpg"); + if (fs.existsSync(thumbPath)) { + thumbnail = `/yt-data/${folder}/thumbnail.jpg`; + } + } entries.push({ id: `${folder}:${targetPath}`, @@ -10658,7 +10663,12 @@ app.get("/stream/:hash", requireAuth, (req, res) => { const index = job.selectedIndex || 0; const fileEntry = job.files[index] || job.files[0]; if (!fileEntry) return res.status(404).end(); - const absPath = path.join(job.savePath, fileEntry.name); + const folderId = job.folderId || path.basename(job.savePath || ""); + const relPath = folderId ? path.join(folderId, fileEntry.name) : fileEntry.name; + const absPath = + resolveStoragePath(relPath) || + (job.savePath ? path.join(job.savePath, fileEntry.name) : null); + if (!absPath) return res.status(404).end(); return streamLocalFile(absPath, range, res); } @@ -10668,12 +10678,10 @@ app.get("/stream/:hash", requireAuth, (req, res) => { if (fileKeys.length) { const idx = Number(req.query.index) || 0; const targetKey = fileKeys[idx] || fileKeys[0]; - const absPath = path.join( - DOWNLOAD_DIR, - req.params.hash, - targetKey.replace(/\\/g, "/") - ); - if (fs.existsSync(absPath)) { + // Rclone ile taşınmış dosyalar için resolveStoragePath kullan + const relPath = path.join(req.params.hash, targetKey.replace(/\\/g, "/")); + const absPath = resolveStoragePath(relPath); + if (absPath) { return streamLocalFile(absPath, range, res); } }