feat: backend integration of playlist m3u text
This commit is contained in:
@@ -30,11 +30,10 @@ class ChannelService {
|
||||
}
|
||||
|
||||
addChannel({ name, url, avatar, mode, headersJson, group = null, playlist = null, playlistName = null }) {
|
||||
const existing = this.channels.find(channel => channel.url === url);
|
||||
|
||||
if (existing) {
|
||||
throw new Error('Channel already exists');
|
||||
}
|
||||
// const existing = this.channels.find(channel => channel.url === url);
|
||||
// if (existing) {
|
||||
// throw new Error('Channel already exists');
|
||||
// }
|
||||
|
||||
const headers = JSON.parse(headersJson);
|
||||
const newChannel = new Channel(name, url, avatar, mode, headers, group, playlist, playlistName);
|
||||
|
||||
@@ -41,7 +41,7 @@ module.exports = {
|
||||
return channelsJson.map(channelJson => Channel.from(channelJson));
|
||||
} catch (err) {
|
||||
console.error('Error loading data from storage:', err);
|
||||
return [];
|
||||
return channels;
|
||||
}
|
||||
}
|
||||
this.save(channels);
|
||||
|
||||
@@ -3,12 +3,17 @@ const ChannelService = require('./ChannelService');
|
||||
|
||||
class PlaylistService {
|
||||
|
||||
async addPlaylist(playlistUrl, playlistName, mode, headersJson) {
|
||||
async addPlaylist(playlist, playlistName, mode, headersJson) {
|
||||
|
||||
console.log('Adding playlist', playlistUrl);
|
||||
console.log('Adding playlist', playlist);
|
||||
|
||||
const response = await fetch(playlistUrl);
|
||||
const content = await response.text();
|
||||
let content = "";
|
||||
if(playlist.startsWith("http")) {
|
||||
const response = await fetch(playlist);
|
||||
content = await response.text();
|
||||
} else {
|
||||
content = playlist;
|
||||
}
|
||||
|
||||
const parsedPlaylist = m3uParser.parse(content);
|
||||
|
||||
@@ -23,7 +28,7 @@ class PlaylistService {
|
||||
mode: mode,
|
||||
headersJson: headersJson,
|
||||
group: channel.group.title,
|
||||
playlist: playlistUrl,
|
||||
playlist: playlist,
|
||||
playlistName: playlistName
|
||||
});
|
||||
} catch (error) {
|
||||
|
||||
@@ -36,9 +36,19 @@ function ChannelModal({ onClose, channel }: ChannelModalProps) {
|
||||
setMode(channel.mode);
|
||||
setHeaders(channel.headers);
|
||||
setPlaylistName(channel.playlistName);
|
||||
setPlaylistUrl(channel.playlist);
|
||||
setIsEditMode(true);
|
||||
setType('channel');
|
||||
|
||||
if(channel.playlist.startsWith("http")) {
|
||||
setInputMethod('url');
|
||||
setPlaylistUrl(channel.playlist);
|
||||
setPlaylistText('');
|
||||
} else {
|
||||
setInputMethod('text');
|
||||
setPlaylistUrl('');
|
||||
setPlaylistText(channel.playlist);
|
||||
}
|
||||
|
||||
} else {
|
||||
setName('');
|
||||
setUrl('');
|
||||
@@ -50,6 +60,7 @@ function ChannelModal({ onClose, channel }: ChannelModalProps) {
|
||||
setPlaylistText('');
|
||||
setIsEditMode(false);
|
||||
setType('channel');
|
||||
setInputMethod('url');
|
||||
}
|
||||
}, [channel]);
|
||||
|
||||
@@ -92,8 +103,7 @@ function ChannelModal({ onClose, channel }: ChannelModalProps) {
|
||||
inputMethod === 'url' ? playlistUrl.trim() : playlistText.trim(),
|
||||
playlistName.trim(),
|
||||
mode,
|
||||
JSON.stringify(headers),
|
||||
inputMethod === 'text'
|
||||
JSON.stringify(headers)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -116,18 +126,17 @@ function ChannelModal({ onClose, channel }: ChannelModalProps) {
|
||||
headers: headers,
|
||||
});
|
||||
} else if (type === 'playlist') {
|
||||
if(channel!.playlist !== playlistUrl.trim()) {
|
||||
const newPlaylist = inputMethod === 'url' ? playlistUrl.trim() : playlistText.trim();
|
||||
if(channel!.playlist !== newPlaylist) {
|
||||
socketService.deletePlaylist(channel!.playlist);
|
||||
socketService.addPlaylist(
|
||||
inputMethod === 'url' ? playlistUrl.trim() : playlistText.trim(),
|
||||
playlistName.trim(),
|
||||
mode,
|
||||
JSON.stringify(headers),
|
||||
inputMethod === 'text'
|
||||
JSON.stringify(headers)
|
||||
);
|
||||
} else {
|
||||
socketService.updatePlaylist(playlistUrl.trim(), {
|
||||
playlist: playlistUrl.trim(),
|
||||
socketService.updatePlaylist(channel!.playlist, {
|
||||
playlistName: playlistName.trim(),
|
||||
mode: mode,
|
||||
headers: headers,
|
||||
|
||||
Reference in New Issue
Block a user