mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-04 03:36:29 +08:00
feat: enhance LivePlayer messages with localized text and improve M3U parsing logic
This commit is contained in:
@@ -15,23 +15,38 @@ export const parseM3U = (m3uText: string): Channel[] => {
|
||||
|
||||
for (const line of lines) {
|
||||
const trimmedLine = line.trim();
|
||||
currentChannelInfo = { id: '', name: '', url: '', logo: '', group: '' };
|
||||
if (trimmedLine.startsWith('#EXTINF:')) {
|
||||
const commaIndex = trimmedLine.indexOf(',');
|
||||
currentChannelInfo = {}; // Start a new channel
|
||||
const commaIndex = trimmedLine.lastIndexOf(',');
|
||||
if (commaIndex !== -1) {
|
||||
currentChannelInfo.name = trimmedLine.substring(commaIndex + 1).trim();
|
||||
const attributesPart = trimmedLine.substring(8, commaIndex);
|
||||
const logoMatch = attributesPart.match(/tvg-logo="([^"]*)"/i);
|
||||
if (logoMatch && logoMatch[1]) currentChannelInfo.logo = logoMatch[1];
|
||||
if (logoMatch && logoMatch[1]) {
|
||||
currentChannelInfo.logo = logoMatch[1];
|
||||
}
|
||||
const groupMatch = attributesPart.match(/group-title="([^"]*)"/i);
|
||||
if (groupMatch && groupMatch[1]) currentChannelInfo.group = groupMatch[1];
|
||||
if (groupMatch && groupMatch[1]) {
|
||||
currentChannelInfo.group = groupMatch[1];
|
||||
}
|
||||
} else {
|
||||
currentChannelInfo.name = trimmedLine.substring(8).trim();
|
||||
}
|
||||
} else if (currentChannelInfo && trimmedLine && !trimmedLine.startsWith('#') && trimmedLine.includes('://')) {
|
||||
currentChannelInfo.url = trimmedLine;
|
||||
currentChannelInfo.id = currentChannelInfo.url; // Use URL as ID
|
||||
parsedChannels.push(currentChannelInfo as Channel);
|
||||
|
||||
// Ensure all required fields are present, providing defaults if necessary
|
||||
const finalChannel: Channel = {
|
||||
id: currentChannelInfo.id,
|
||||
url: currentChannelInfo.url,
|
||||
name: currentChannelInfo.name || 'Unknown',
|
||||
logo: currentChannelInfo.logo || '',
|
||||
group: currentChannelInfo.group || 'Default',
|
||||
};
|
||||
|
||||
parsedChannels.push(finalChannel);
|
||||
currentChannelInfo = null; // Reset for the next channel
|
||||
}
|
||||
}
|
||||
return parsedChannels;
|
||||
@@ -56,14 +71,14 @@ export const getPlayableUrl = (originalUrl: string | null): string | null => {
|
||||
return null;
|
||||
}
|
||||
// In React Native, we use the proxy for all http streams to avoid potential issues.
|
||||
if (originalUrl.toLowerCase().startsWith('http://')) {
|
||||
// Use the baseURL from the existing api instance.
|
||||
if (!api.baseURL) {
|
||||
console.warn("API base URL is not set. Cannot create proxy URL.")
|
||||
return originalUrl; // Fallback to original URL
|
||||
}
|
||||
return `${api.baseURL}/proxy?url=${encodeURIComponent(originalUrl)}`;
|
||||
}
|
||||
// if (originalUrl.toLowerCase().startsWith('http://')) {
|
||||
// // Use the baseURL from the existing api instance.
|
||||
// if (!api.baseURL) {
|
||||
// console.warn("API base URL is not set. Cannot create proxy URL.")
|
||||
// return originalUrl; // Fallback to original URL
|
||||
// }
|
||||
// return `${api.baseURL}/proxy?url=${encodeURIComponent(originalUrl)}`;
|
||||
// }
|
||||
// HTTPS streams can be played directly.
|
||||
return originalUrl;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user