mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-23 02:35:14 +00:00
132 lines
3.7 KiB
JavaScript
132 lines
3.7 KiB
JavaScript
import API from '../../api.js';
|
|
import {
|
|
format,
|
|
getNow,
|
|
initializeTime,
|
|
subtract,
|
|
toFriendlyDuration,
|
|
} from '../dateTimeUtils.js';
|
|
|
|
// Parse proxy settings to get buffering_speed
|
|
export const getBufferingSpeedThreshold = (proxySetting) => {
|
|
try {
|
|
if (proxySetting?.value) {
|
|
const proxySettings = JSON.parse(proxySetting.value);
|
|
return parseFloat(proxySettings.buffering_speed) || 1.0;
|
|
}
|
|
} catch (error) {
|
|
console.error('Error parsing proxy settings:', error);
|
|
}
|
|
return 1.0; // Default fallback
|
|
};
|
|
|
|
export const getStartDate = (uptime) => {
|
|
// Get the current date and time
|
|
const currentDate = new Date();
|
|
// Calculate the start date by subtracting uptime (in milliseconds)
|
|
const startDate = new Date(currentDate.getTime() - uptime * 1000);
|
|
// Format the date as a string (you can adjust the format as needed)
|
|
return startDate.toLocaleString({
|
|
weekday: 'short', // optional, adds day of the week
|
|
year: 'numeric',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
second: '2-digit',
|
|
hour12: true, // 12-hour format with AM/PM
|
|
});
|
|
};
|
|
|
|
export const getM3uAccountsMap = (m3uAccounts) => {
|
|
const map = {};
|
|
if (m3uAccounts && Array.isArray(m3uAccounts)) {
|
|
m3uAccounts.forEach((account) => {
|
|
if (account.id) {
|
|
map[account.id] = account.name;
|
|
}
|
|
});
|
|
}
|
|
return map;
|
|
};
|
|
|
|
export const getChannelStreams = async (channelId) => {
|
|
return await API.getChannelStreams(channelId);
|
|
};
|
|
|
|
export const getMatchingStreamByUrl = (streamData, channelUrl) => {
|
|
return streamData.find(
|
|
(stream) =>
|
|
channelUrl.includes(stream.url) || stream.url.includes(channelUrl)
|
|
);
|
|
};
|
|
|
|
export const getSelectedStream = (availableStreams, streamId) => {
|
|
return availableStreams.find((s) => s.id.toString() === streamId);
|
|
};
|
|
|
|
export const switchStream = (channel, streamId) => {
|
|
return API.switchStream(channel.channel_id, streamId);
|
|
};
|
|
|
|
export const connectedAccessor = (dateFormat) => {
|
|
return (row) => {
|
|
// Check for connected_since (which is seconds since connection)
|
|
if (row.connected_since) {
|
|
// Calculate the actual connection time by subtracting the seconds from current time
|
|
const connectedTime = subtract(getNow(), row.connected_since, 'second');
|
|
return format(connectedTime, `${dateFormat} HH:mm:ss`);
|
|
}
|
|
|
|
// Fallback to connected_at if it exists
|
|
if (row.connected_at) {
|
|
const connectedTime = initializeTime(row.connected_at * 1000);
|
|
return format(connectedTime, `${dateFormat} HH:mm:ss`);
|
|
}
|
|
|
|
return 'Unknown';
|
|
};
|
|
};
|
|
|
|
export const durationAccessor = () => {
|
|
return (row) => {
|
|
if (row.connected_since) {
|
|
return toFriendlyDuration(row.connected_since, 'seconds');
|
|
}
|
|
|
|
if (row.connection_duration) {
|
|
return toFriendlyDuration(row.connection_duration, 'seconds');
|
|
}
|
|
|
|
return '-';
|
|
};
|
|
};
|
|
|
|
export const getLogoUrl = (logoId, logos, previewedStream) => {
|
|
return (
|
|
(logoId && logos && logos[logoId] ? logos[logoId].cache_url : null) ||
|
|
previewedStream?.logo_url ||
|
|
null
|
|
);
|
|
};
|
|
|
|
export const getStreamsByIds = (streamId) => {
|
|
return API.getStreamsByIds([streamId]);
|
|
};
|
|
|
|
export const getStreamOptions = (availableStreams, m3uAccountsMap) => {
|
|
return availableStreams.map((stream) => {
|
|
// Get account name from our mapping if it exists
|
|
const accountName =
|
|
stream.m3u_account && m3uAccountsMap[stream.m3u_account]
|
|
? m3uAccountsMap[stream.m3u_account]
|
|
: stream.m3u_account
|
|
? `M3U #${stream.m3u_account}`
|
|
: 'Unknown M3U';
|
|
|
|
return {
|
|
value: stream.id.toString(),
|
|
label: `${stream.name || `Stream #${stream.id}`} [${accountName}]`,
|
|
};
|
|
});
|
|
};
|