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 infoHash = info.infoHash || folder;
|
||||||
const title =
|
const title =
|
||||||
info.name || metadata?.title || path.basename(targetPath) || folder;
|
info.name || metadata?.title || path.basename(targetPath) || folder;
|
||||||
const thumbnail =
|
// Thumbnail kontrolü - metadata varsa fiziksel dosya varlığını kontrol et
|
||||||
metadata?.thumbnail ||
|
let thumbnail = metadata?.thumbnail;
|
||||||
(metadata ? `/yt-data/${folder}/thumbnail.jpg` : null);
|
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({
|
entries.push({
|
||||||
id: `${folder}:${targetPath}`,
|
id: `${folder}:${targetPath}`,
|
||||||
@@ -10658,7 +10663,12 @@ app.get("/stream/:hash", requireAuth, (req, res) => {
|
|||||||
const index = job.selectedIndex || 0;
|
const index = job.selectedIndex || 0;
|
||||||
const fileEntry = job.files[index] || job.files[0];
|
const fileEntry = job.files[index] || job.files[0];
|
||||||
if (!fileEntry) return res.status(404).end();
|
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);
|
return streamLocalFile(absPath, range, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10668,12 +10678,10 @@ app.get("/stream/:hash", requireAuth, (req, res) => {
|
|||||||
if (fileKeys.length) {
|
if (fileKeys.length) {
|
||||||
const idx = Number(req.query.index) || 0;
|
const idx = Number(req.query.index) || 0;
|
||||||
const targetKey = fileKeys[idx] || fileKeys[0];
|
const targetKey = fileKeys[idx] || fileKeys[0];
|
||||||
const absPath = path.join(
|
// Rclone ile taşınmış dosyalar için resolveStoragePath kullan
|
||||||
DOWNLOAD_DIR,
|
const relPath = path.join(req.params.hash, targetKey.replace(/\\/g, "/"));
|
||||||
req.params.hash,
|
const absPath = resolveStoragePath(relPath);
|
||||||
targetKey.replace(/\\/g, "/")
|
if (absPath) {
|
||||||
);
|
|
||||||
if (fs.existsSync(absPath)) {
|
|
||||||
return streamLocalFile(absPath, range, res);
|
return streamLocalFile(absPath, range, res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user