mirror of
https://git.luna-app.eu/50n50/sources
synced 2025-12-21 21:26:19 +01:00
Update vidfast/vidfast.js
This commit is contained in:
parent
4ba2715e12
commit
9503b662df
1 changed files with 76 additions and 11 deletions
|
|
@ -208,9 +208,9 @@ async function extractStreamUrl(ID) {
|
|||
|
||||
const final = {
|
||||
streams,
|
||||
subtitles: "None"
|
||||
subtitles: streamResponse.subtitles || "None"
|
||||
};
|
||||
|
||||
console.log(JSON.stringify(final));
|
||||
return JSON.stringify(final);
|
||||
} else if (ID.includes('tv')) {
|
||||
const parts = ID.split('/');
|
||||
|
|
@ -241,9 +241,9 @@ async function extractStreamUrl(ID) {
|
|||
|
||||
const final = {
|
||||
streams,
|
||||
subtitles: "None"
|
||||
subtitles: streamResponse.subtitles || "None"
|
||||
};
|
||||
|
||||
console.log(JSON.stringify(final));
|
||||
return JSON.stringify(final);
|
||||
}
|
||||
}
|
||||
|
|
@ -401,11 +401,19 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
|
|||
|
||||
const format = data.url.includes('.m3u8') ? 'm3u8' : data.url.includes('.mpd') ? 'mpd' : 'unknown';
|
||||
|
||||
if (preferredFormat === 'm3u8' && format === 'm3u8') {
|
||||
return { index, server, success: true, format, data, preferred: true };
|
||||
const hasEnglishSubs = data.tracks && Array.isArray(data.tracks) &&
|
||||
data.tracks.some(track => track.label && track.label.toLowerCase().includes('english') && track.file);
|
||||
|
||||
|
||||
if (preferredFormat === 'm3u8' && format === 'm3u8' && hasEnglishSubs) {
|
||||
return { index, server, success: true, format, data, preferred: true, hasSubtitles: true };
|
||||
}
|
||||
|
||||
return { index, server, success: true, format, data, preferred: false };
|
||||
if (preferredFormat === 'm3u8' && format === 'm3u8') {
|
||||
return { index, server, success: true, format, data, preferred: true, hasSubtitles: false };
|
||||
}
|
||||
|
||||
return { index, server, success: true, format, data, preferred: false, hasSubtitles: hasEnglishSubs };
|
||||
|
||||
} catch (error) {
|
||||
throw new Error(`Server ${index} failed: ${error.message}`);
|
||||
|
|
@ -418,9 +426,48 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
|
|||
if (preferredFormat === 'm3u8') {
|
||||
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
||||
|
||||
selectedServer = await Promise.any(serverPromises);
|
||||
const raceForSubtitles = new Promise((resolve, reject) => {
|
||||
let completedCount = 0;
|
||||
let firstWorkingServer = null;
|
||||
|
||||
serverPromises.forEach(promise => {
|
||||
promise.then(result => {
|
||||
completedCount++;
|
||||
|
||||
if (result.hasSubtitles) {
|
||||
console.log(`Found server ${result.index} with subtitles, stopping other requests`);
|
||||
resolve(result);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!firstWorkingServer && result.format === 'm3u8') {
|
||||
firstWorkingServer = result;
|
||||
}
|
||||
|
||||
if (completedCount === serverPromises.length) {
|
||||
if (firstWorkingServer) {
|
||||
console.log(`No servers with subtitles found, using fallback server ${firstWorkingServer.index}`);
|
||||
resolve(firstWorkingServer);
|
||||
} else {
|
||||
reject(new Error('No working m3u8 servers found'));
|
||||
}
|
||||
}
|
||||
}).catch(() => {
|
||||
completedCount++;
|
||||
|
||||
if (completedCount === serverPromises.length) {
|
||||
if (firstWorkingServer) {
|
||||
console.log(`No servers with subtitles found, using fallback server ${firstWorkingServer.index}`);
|
||||
resolve(firstWorkingServer);
|
||||
} else {
|
||||
reject(new Error('No working m3u8 servers found'));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
console.log(`Found working server ${selectedServer.index} with format ${selectedServer.format}`);
|
||||
selectedServer = await raceForSubtitles;
|
||||
|
||||
} else {
|
||||
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
||||
|
|
@ -429,7 +476,7 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
|
|||
console.log(`Found working server ${selectedServer.index} with format ${selectedServer.format}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('All servers failed:', error);
|
||||
console.log('All servers failed:'+ error);
|
||||
throw new Error('No working servers found');
|
||||
}
|
||||
|
||||
|
|
@ -438,16 +485,34 @@ async function ilovefeet(imdbId, isSeries = false, season = null, episode = null
|
|||
if (preferredFormat === 'm3u8' && selectedServer.format === 'mpd') {
|
||||
selectedServer.data.url = selectedServer.data.url.replace('.mpd', '.m3u8');
|
||||
selectedServer.format = 'm3u8';
|
||||
console.log('Converted MPD URL to M3U8');
|
||||
}
|
||||
|
||||
let finalUrl = selectedServer.data.url;
|
||||
|
||||
let englishSubtitles = null;
|
||||
try {
|
||||
if (selectedServer.data.tracks && Array.isArray(selectedServer.data.tracks)) {
|
||||
const englishTrack = selectedServer.data.tracks.find(track =>
|
||||
track.label && track.label.toLowerCase().includes('english') && track.file
|
||||
);
|
||||
if (englishTrack) {
|
||||
englishSubtitles = englishTrack.file;
|
||||
} else {
|
||||
console.log('No English subtitle track found in tracks array');
|
||||
}
|
||||
} else {
|
||||
console.log('No tracks array found in server response');
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('Error extracting subtitles:'+ error);
|
||||
}
|
||||
|
||||
return {
|
||||
url: selectedServer.data.url,
|
||||
originalUrl: selectedServer.data.url,
|
||||
referer: "https://vidfast.pro/",
|
||||
format: selectedServer.format,
|
||||
subtitles: englishSubtitles,
|
||||
fullData: selectedServer.data,
|
||||
serverStats: {
|
||||
total: serverList.length,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue