Update vidfast/vidfast.js

This commit is contained in:
aka paul 2025-10-23 13:43:25 +00:00
parent 4ba2715e12
commit 9503b662df

View file

@ -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,