mirror of
https://git.luna-app.eu/50n50/sources
synced 2025-12-22 05:36:32 +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 = {
|
const final = {
|
||||||
streams,
|
streams,
|
||||||
subtitles: "None"
|
subtitles: streamResponse.subtitles || "None"
|
||||||
};
|
};
|
||||||
|
console.log(JSON.stringify(final));
|
||||||
return JSON.stringify(final);
|
return JSON.stringify(final);
|
||||||
} else if (ID.includes('tv')) {
|
} else if (ID.includes('tv')) {
|
||||||
const parts = ID.split('/');
|
const parts = ID.split('/');
|
||||||
|
|
@ -241,9 +241,9 @@ async function extractStreamUrl(ID) {
|
||||||
|
|
||||||
const final = {
|
const final = {
|
||||||
streams,
|
streams,
|
||||||
subtitles: "None"
|
subtitles: streamResponse.subtitles || "None"
|
||||||
};
|
};
|
||||||
|
console.log(JSON.stringify(final));
|
||||||
return 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';
|
const format = data.url.includes('.m3u8') ? 'm3u8' : data.url.includes('.mpd') ? 'mpd' : 'unknown';
|
||||||
|
|
||||||
if (preferredFormat === 'm3u8' && format === 'm3u8') {
|
const hasEnglishSubs = data.tracks && Array.isArray(data.tracks) &&
|
||||||
return { index, server, success: true, format, data, preferred: true };
|
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) {
|
} catch (error) {
|
||||||
throw new Error(`Server ${index} failed: ${error.message}`);
|
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') {
|
if (preferredFormat === 'm3u8') {
|
||||||
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
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;
|
||||||
|
|
||||||
console.log(`Found working server ${selectedServer.index} with format ${selectedServer.format}`);
|
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'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
selectedServer = await raceForSubtitles;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const serverPromises = serverList.map((serverObj, index) => testServer(serverObj, index));
|
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}`);
|
console.log(`Found working server ${selectedServer.index} with format ${selectedServer.format}`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('All servers failed:', error);
|
console.log('All servers failed:'+ error);
|
||||||
throw new Error('No working servers found');
|
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') {
|
if (preferredFormat === 'm3u8' && selectedServer.format === 'mpd') {
|
||||||
selectedServer.data.url = selectedServer.data.url.replace('.mpd', '.m3u8');
|
selectedServer.data.url = selectedServer.data.url.replace('.mpd', '.m3u8');
|
||||||
selectedServer.format = 'm3u8';
|
selectedServer.format = 'm3u8';
|
||||||
console.log('Converted MPD URL to M3U8');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let finalUrl = selectedServer.data.url;
|
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 {
|
return {
|
||||||
url: selectedServer.data.url,
|
url: selectedServer.data.url,
|
||||||
originalUrl: selectedServer.data.url,
|
originalUrl: selectedServer.data.url,
|
||||||
referer: "https://vidfast.pro/",
|
referer: "https://vidfast.pro/",
|
||||||
format: selectedServer.format,
|
format: selectedServer.format,
|
||||||
|
subtitles: englishSubtitles,
|
||||||
fullData: selectedServer.data,
|
fullData: selectedServer.data,
|
||||||
serverStats: {
|
serverStats: {
|
||||||
total: serverList.length,
|
total: serverList.length,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue