fix(server): youtube müzik videolarının stream etme sorununu çöz
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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user