diff --git a/backend/server.js b/backend/server.js index 83f8410..143fdf2 100644 --- a/backend/server.js +++ b/backend/server.js @@ -43,6 +43,7 @@ const server = app.listen(PORT, async () => { await streamController.start(ChannelService.getCurrentChannel()); } PlaylistUpdater.startScheduler(); + PlaylistUpdater.registerChannelsPlaylist(ChannelService.getChannels()); }); diff --git a/backend/services/ChannelStorage.js b/backend/services/ChannelStorage.js index d22bd00..a2f0065 100644 --- a/backend/services/ChannelStorage.js +++ b/backend/services/ChannelStorage.js @@ -20,7 +20,7 @@ module.exports = { { "key": "Referer", "value": "https://embedme.top/" } ]; - const channels = [ + const defaultChannels = [ //Some Test-channels to get started, remove this when using your own playlist //new Channel('Das Erste', "https://mcdn.daserste.de/daserste/de/master.m3u8", "https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Das_Erste-Logo_klein.svg/768px-Das_Erste-Logo_klein.svg.png", 'direct'), new Channel('DAZN 1 DE', "https://xyzdddd.mizhls.ru/lb/premium426/index.m3u8", "https://upload.wikimedia.org/wikipedia/commons/4/49/DAZN_1.svg", 'proxy', daddyHeaders), @@ -41,11 +41,11 @@ module.exports = { return channelsJson.map(channelJson => Channel.from(channelJson)); } catch (err) { console.error('Error loading data from storage:', err); - return channels; + return defaultChannels; } } - this.save(channels); - return channels; + this.save(defaultChannels); + return defaultChannels; }, save(data) { diff --git a/backend/services/PlaylistUpdater.js b/backend/services/PlaylistUpdater.js index 610b1f2..cd5a98e 100644 --- a/backend/services/PlaylistUpdater.js +++ b/backend/services/PlaylistUpdater.js @@ -1,53 +1,70 @@ const cron = require('node-cron'); const PlaylistService = require('./PlaylistService'); +const Playlist = require('../models/Playlist'); class PlaylistUpdater { constructor() { - this.playlists = new Set(); + this.playlists = new Map(); } - contains(playlist) { - for (const existingPlaylist of this.playlists) { - if (existingPlaylist.playlist === playlist) { - return true; - } - } - return false; + #contains(playlistUrl) { + return this.playlists.has(playlistUrl); } register(playlist) { - console.log('Registering playlist:', playlist); - this.playlists.add(playlist); + if (this.#contains(playlist.playlist)) { + return; + } + + console.log('Registering playlist:', playlist.playlist); + this.playlists.set(playlist.playlist, playlist); } - delete(playlist) { - for (const existingPlaylist of this.playlists) { - if (existingPlaylist.playlist === playlist) { - this.playlists.delete(existingPlaylist); - break; + registerChannelsPlaylist(channels) { + for (const channel of channels) { + if (channel.playlist && channel.playlistUpdate) { + this.register( + new Playlist( + channel.playlist, + channel.playlistName, + channel.mode, + channel.playlistUpdate, + channel.headers + ) + ); } } } - + delete(playlistUrl) { + if (this.#contains(playlistUrl)) { + this.playlists.delete(playlistUrl); + console.log(`Deleted playlist with URL: ${playlistUrl}`); + } + } startScheduler() { - // Cron-Job: "0 3 * * *" -> Every day at 3 am + // Cron-Job: "0 3 * * *" -> Every day at 3:00 AM cron.schedule('0 3 * * *', () => { this.updatePlaylists(); }); } - updatePlaylists() { console.log('Updating playlists at:', new Date()); this.playlists.forEach(async (playlist) => { try { - //Fetch playlist again + // Fetch and renew playlist await PlaylistService.deletePlaylist(playlist.playlist); - await PlaylistService.addPlaylist(playlist.playlist, playlist.playlistName, playlist.mode, playlist.playlistUpdate, playlist.headers); + await PlaylistService.addPlaylist( + playlist.playlist, + playlist.playlistName, + playlist.mode, + playlist.playlistUpdate, + playlist.headers + ); } catch (error) { - console.error(`Error while updating playlist ${playlist.name}:`, error); + console.error(`Error while updating playlist ${playlist.playlistName}:`, error); } }); } diff --git a/backend/socket/PlaylistSocketHandler.js b/backend/socket/PlaylistSocketHandler.js index e947e37..1fdf85a 100644 --- a/backend/socket/PlaylistSocketHandler.js +++ b/backend/socket/PlaylistSocketHandler.js @@ -13,7 +13,7 @@ async function handleAddPlaylist({ playlist, playlistName, mode, playlistUpdate, }); } - if(playlistUpdate && !PlaylistUpdater.contains(playlist)) { + if(playlistUpdate) { PlaylistUpdater.register(new Playlist(playlist, playlistName, mode, playlistUpdate, headers)); } @@ -38,9 +38,7 @@ async function handleUpdatePlaylist({ playlist, updatedAttributes }, io, socket) io.emit('channel-updated', channel); }); - if(PlaylistUpdater.contains(playlist)) { - PlaylistUpdater.delete(playlist); - } + PlaylistUpdater.delete(playlist); if(updatedAttributes.playlistUpdate) { PlaylistUpdater.register(new Playlist(playlist, updatedAttributes.playlistName, updatedAttributes.mode, updatedAttributes.playlistUpdate, updatedAttributes.headers)); } @@ -60,9 +58,8 @@ async function handleDeletePlaylist(playlist, io, socket) { }); io.emit('channel-selected', ChannelService.getCurrentChannel()); - if(PlaylistUpdater.contains(playlist)) { - PlaylistUpdater.delete(playlist); - } + PlaylistUpdater.delete(playlist); + } catch (err) { console.error(err); socket.emit('app-error', { message: err.message });