From ef44a04ae500967781a16af4ff66dfd9894f269d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 12 Jul 2025 23:55:18 +0300 Subject: [PATCH] Update scripts --- scripts/commands/playlist/generate.ts | 6 +++- scripts/generators/index.ts | 1 + scripts/generators/rawGenerator.ts | 41 +++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 scripts/generators/rawGenerator.ts diff --git a/scripts/commands/playlist/generate.ts b/scripts/commands/playlist/generate.ts index 87f2b9ee33..f610af0e86 100644 --- a/scripts/commands/playlist/generate.ts +++ b/scripts/commands/playlist/generate.ts @@ -15,7 +15,8 @@ import { LanguagesGenerator, RegionsGenerator, IndexGenerator, - SourcesGenerator + SourcesGenerator, + RawGenerator } from '../../generators' async function main() { @@ -49,6 +50,9 @@ async function main() { const totalStreams = streams.count() logger.info(`found ${totalStreams} streams`) + logger.info('generating raw/...') + await new RawGenerator({ streams, logFile }).generate() + logger.info('filtering streams...') streams = streams.uniqBy((stream: Stream) => stream.hasId() ? stream.getChannelId() + stream.getFeedId() : uniqueId() diff --git a/scripts/generators/index.ts b/scripts/generators/index.ts index 3223cd21f7..200ae729ac 100644 --- a/scripts/generators/index.ts +++ b/scripts/generators/index.ts @@ -7,5 +7,6 @@ export * from './indexLanguageGenerator' export * from './indexNsfwGenerator' export * from './indexRegionGenerator' export * from './languagesGenerator' +export * from './rawGenerator' export * from './regionsGenerator' export * from './sourcesGenerator' diff --git a/scripts/generators/rawGenerator.ts b/scripts/generators/rawGenerator.ts new file mode 100644 index 0000000000..3249c81852 --- /dev/null +++ b/scripts/generators/rawGenerator.ts @@ -0,0 +1,41 @@ +import { Collection, Storage, File } from '@freearhey/core' +import { Stream, Playlist } from '../models' +import { PUBLIC_DIR } from '../constants' +import { Generator } from './generator' +import { EOL } from 'node:os' + +type RawGeneratorProps = { + streams: Collection + logFile: File +} + +export class RawGenerator implements Generator { + streams: Collection + storage: Storage + logFile: File + + constructor({ streams, logFile }: RawGeneratorProps) { + this.streams = streams.clone() + this.storage = new Storage(PUBLIC_DIR) + this.logFile = logFile + } + + async generate() { + const files = this.streams.groupBy((stream: Stream) => stream.getFilename()) + + for (let filename of files.keys()) { + const streams = new Collection(files.get(filename)).map((stream: Stream) => { + const groupTitle = stream.getCategoryNames().join(';') + if (groupTitle) stream.groupTitle = groupTitle + + return stream + }) + const playlist = new Playlist(streams, { public: true }) + const filepath = `raw/${filename}` + await this.storage.save(filepath, playlist.toString()) + this.logFile.append( + JSON.stringify({ type: 'raw', filepath, count: playlist.streams.count() }) + EOL + ) + } + } +}