From 8f3299d8c94cb0416ef233c671d6aa4063c3a99f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 16 Mar 2026 02:28:25 +0300 Subject: [PATCH] Update validate.ts --- scripts/commands/playlist/validate.ts | 38 ++++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/scripts/commands/playlist/validate.ts b/scripts/commands/playlist/validate.ts index f4292e62f2..c2cd97f36e 100644 --- a/scripts/commands/playlist/validate.ts +++ b/scripts/commands/playlist/validate.ts @@ -19,28 +19,39 @@ type LogItem = { async function main() { const logger = new Logger() + const rootStorage = new Storage(ROOT_DIR) + const parser = new PlaylistParser({ + storage: rootStorage + }) logger.info('loading data from api...') await loadData() logger.info('loading streams...') - const rootStorage = new Storage(ROOT_DIR) - const parser = new PlaylistParser({ - storage: rootStorage - }) - const files = program.args.length ? program.args : await rootStorage.list('streams/**/*.m3u') + const selectedFiles = program.args.length + ? program.args + : await rootStorage.list('streams/**/*.m3u') + const selectedStreams = await parser.parse(selectedFiles) + logger.info(`found ${selectedStreams.count()} streams`) + + logger.info('creating buffer...') + const files = await rootStorage.list('streams/**/*.m3u') const streams = await parser.parse(files) - logger.info(`found ${streams.count()} streams`) + const buffer = new Dictionary() + streams.forEach((stream: Stream) => { + if (!selectedFiles.includes(stream.filepath)) { + buffer.set(stream.url, stream) + } + }) const errors = new Collection() const warnings = new Collection() - const streamsGroupedByFilepath = streams.groupBy((stream: Stream) => stream.getFilepath()) + const streamsGroupedByFilepath = selectedStreams.groupBy((stream: Stream) => stream.getFilepath()) for (const filepath of streamsGroupedByFilepath.keys()) { const streams = streamsGroupedByFilepath.get(filepath) if (!streams) continue const log = new Collection() - const buffer = new Dictionary() streams.forEach((stream: Stream) => { if (stream.channel) { const channel = data.channelsKeyById.get(stream.channel) @@ -53,15 +64,16 @@ async function main() { } } - const duplicate = stream.url && buffer.has(stream.url) - if (duplicate) { + const isDuplicate = stream.url && buffer.has(stream.url) + if (isDuplicate) { + const origin = buffer.get(stream.url) log.add({ - type: 'warning', + type: 'error', line: stream.getLine(), - message: `"${stream.url}" is already on the playlist` + message: `"${stream.url}" is already in the "${origin.filepath}"` }) } else { - buffer.set(stream.url, true) + buffer.set(stream.url, stream) } if (!isURI(stream.url)) {