From 9b4c7325eedb2083f2b922d007949ea8a858709e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 22 Feb 2025 12:54:00 +0300 Subject: [PATCH] Update scripts --- scripts/commands/playlist/update.ts | 40 ++++++++++++++--------------- scripts/commands/report/create.ts | 10 ++++---- scripts/core/index.ts | 1 + scripts/core/issueData.ts | 32 +++++++++++++++++++++++ scripts/core/issueParser.ts | 3 ++- scripts/models/issue.ts | 6 ++--- 6 files changed, 63 insertions(+), 29 deletions(-) create mode 100644 scripts/core/issueData.ts diff --git a/scripts/commands/playlist/update.ts b/scripts/commands/playlist/update.ts index 7dc54bc2f..a1ed93d83 100644 --- a/scripts/commands/playlist/update.ts +++ b/scripts/commands/playlist/update.ts @@ -56,7 +56,7 @@ async function removeStreams(loader: IssueLoader) { const data = issue.data if (data.missing('broken_links')) return - const brokenLinks = data.get('broken_links').split(/\r?\n/).filter(Boolean) + const brokenLinks = data.getString('broken_links').split(/\r?\n/).filter(Boolean) let changed = false brokenLinks.forEach(link => { @@ -79,27 +79,27 @@ async function editStreams(loader: IssueLoader) { if (data.missing('stream_url')) return let stream = streams.first( - (_stream: Stream) => _stream.url === data.get('stream_url') + (_stream: Stream) => _stream.url === data.getString('stream_url') ) as Stream if (!stream) return if (data.has('channel_id')) { - const channel = groupedChannels.get(data.get('channel_id')) + const channel = groupedChannels.get(data.getString('channel_id')) if (!channel) return - stream.channel = data.get('channel_id') + stream.channel = data.getString('channel_id') stream.filepath = `${channel.country.toLowerCase()}.m3u` stream.line = -1 stream.name = channel.name } - if (data.has('label')) stream.label = data.get('label') - if (data.has('quality')) stream.quality = data.get('quality') - if (data.has('timeshift')) stream.timeshift = data.get('timeshift') - if (data.has('user_agent')) stream.userAgent = data.get('user_agent') - if (data.has('http_referrer')) stream.httpReferrer = data.get('http_referrer') + if (data.has('label')) stream.label = data.getString('label') + if (data.has('quality')) stream.quality = data.getString('quality') + if (data.has('timeshift')) stream.timeshift = data.getString('timeshift') + if (data.has('user_agent')) stream.userAgent = data.getString('user_agent') + if (data.has('http_referrer')) stream.httpReferrer = data.getString('http_referrer') processedIssues.add(issue.number) }) @@ -110,24 +110,24 @@ async function addStreams(loader: IssueLoader) { issues.forEach((issue: Issue) => { const data = issue.data if (data.missing('channel_id') || data.missing('stream_url')) return - if (streams.includes((_stream: Stream) => _stream.url === data.get('stream_url'))) return - if (!validUrl.isUri(data.get('stream_url'))) return + if (streams.includes((_stream: Stream) => _stream.url === data.getString('stream_url'))) return + if (!validUrl.isUri(data.getString('stream_url'))) return - const channel = groupedChannels.get(data.get('channel_id')) + const channel = groupedChannels.get(data.getString('channel_id')) if (!channel) return const stream = new Stream({ - channel: data.get('channel_id'), - url: data.get('stream_url'), - label: data.get('label'), - quality: data.get('quality'), - timeshift: data.get('timeshift'), - userAgent: data.get('user_agent'), - httpReferrer: data.get('http_referrer'), + channel: data.getString('channel_id'), + url: data.getString('stream_url'), + label: data.getString('label'), + quality: data.getString('quality'), + timeshift: data.getString('timeshift'), + userAgent: data.getString('user_agent'), + httpReferrer: data.getString('http_referrer'), filepath: `${channel.country.toLowerCase()}.m3u`, line: -1, - name: data.get('channel_name') || channel.name + name: data.getString('channel_name') || channel.name }) streams.add(stream) diff --git a/scripts/commands/report/create.ts b/scripts/commands/report/create.ts index 74b73f610..4b361e5f9 100644 --- a/scripts/commands/report/create.ts +++ b/scripts/commands/report/create.ts @@ -35,8 +35,8 @@ async function main() { const addRequests = await loader.load({ labels: ['streams:add'] }) const buffer = new Dictionary() addRequests.forEach((issue: Issue) => { - const channelId = issue.data.get('channel_id') || undefined - const streamUrl = issue.data.get('stream_url') || undefined + const channelId = issue.data.getString('channel_id') || undefined + const streamUrl = issue.data.getString('stream_url') const result = new Dictionary({ issueNumber: issue.number, @@ -61,8 +61,8 @@ async function main() { logger.info('checking streams:edit requests...') const editRequests = await loader.load({ labels: ['streams:edit'] }) editRequests.forEach((issue: Issue) => { - const channelId = issue.data.get('channel_id') || undefined - const streamUrl = issue.data.get('stream_url') || undefined + const channelId = issue.data.getString('channel_id') || undefined + const streamUrl = issue.data.getString('stream_url') || undefined const result = new Dictionary({ issueNumber: issue.number, @@ -82,7 +82,7 @@ async function main() { logger.info('checking broken streams reports...') const brokenStreamReports = await loader.load({ labels: ['broken stream'] }) brokenStreamReports.forEach((issue: Issue) => { - const brokenLinks = issue.data.get('broken_links') || undefined + const brokenLinks = issue.data.getString('broken_links') || undefined const result = new Dictionary({ issueNumber: issue.number, diff --git a/scripts/core/index.ts b/scripts/core/index.ts index 7fd792daf..69656cc5f 100644 --- a/scripts/core/index.ts +++ b/scripts/core/index.ts @@ -6,3 +6,4 @@ export * from './issueLoader' export * from './issueParser' export * from './htmlTable' export * from './apiClient' +export * from './issueData' diff --git a/scripts/core/issueData.ts b/scripts/core/issueData.ts new file mode 100644 index 000000000..879a64b8b --- /dev/null +++ b/scripts/core/issueData.ts @@ -0,0 +1,32 @@ +import { Dictionary } from '@freearhey/core' + +export class IssueData { + _data: Dictionary + constructor(data: Dictionary) { + this._data = data + } + + has(key: string): boolean { + return this._data.has(key) + } + + missing(key: string): boolean { + return this._data.missing(key) || this._data.get(key) === undefined + } + + getBoolean(key: string): boolean { + return Boolean(this._data.get(key)) + } + + getString(key: string): string { + const deleteSymbol = '~' + + return this._data.get(key) === deleteSymbol ? '' : this._data.get(key) + } + + getArray(key: string): string[] { + const deleteSymbol = '~' + + return this._data.get(key) === deleteSymbol ? [] : this._data.get(key).split(';') + } +} diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts index 6d4658985..57ef0d31b 100644 --- a/scripts/core/issueParser.ts +++ b/scripts/core/issueParser.ts @@ -1,5 +1,6 @@ import { Dictionary } from '@freearhey/core' import { Issue } from '../models' +import { IssueData } from './issueData' const FIELDS = new Dictionary({ 'Channel ID': 'channel_id', @@ -46,6 +47,6 @@ export class IssueParser { const labels = issue.labels.map(label => label.name) - return new Issue({ number: issue.number, labels, data }) + return new Issue({ number: issue.number, labels, data: new IssueData(data) }) } } diff --git a/scripts/models/issue.ts b/scripts/models/issue.ts index fecb1fde1..74602e745 100644 --- a/scripts/models/issue.ts +++ b/scripts/models/issue.ts @@ -1,15 +1,15 @@ -import { Dictionary } from '@freearhey/core' +import { IssueData } from '../core' type IssueProps = { number: number labels: string[] - data: Dictionary + data: IssueData } export class Issue { number: number labels: string[] - data: Dictionary + data: IssueData constructor({ number, labels, data }: IssueProps) { this.number = number