Merge branch 'patch-2025.10.1' of https://github.com/iptv-org/epg into be-updates

This commit is contained in:
theofficialomega
2025-10-24 15:13:08 +02:00
108 changed files with 6272 additions and 6825 deletions

View File

@@ -1,6 +1,6 @@
import { Logger } from '@freearhey/core'
import { SITES_DIR, EOL } from '../../constants'
import { Storage } from '@freearhey/storage-js'
import { SITES_DIR } from '../../constants'
import { Logger } from '@freearhey/core'
import { pathToFileURL } from 'node:url'
import { program } from 'commander'
import fs from 'fs-extra'
@@ -13,7 +13,7 @@ async function main() {
const storage = new Storage(SITES_DIR)
const logger = new Logger()
logger.info(`Initializing "${domain}"...\r\n`)
logger.info(`Initializing "${domain}"...${EOL}`)
const dir = domain
if (await storage.exists(dir)) {
@@ -40,7 +40,7 @@ async function main() {
})
await storage.save(`${dir}/readme.md`, readmeTemplate.replace(/<DOMAIN>/g, domain))
logger.info('\r\nDone')
logger.info(`${EOL}Done`)
}
main()

View File

@@ -1,26 +1,22 @@
import { IssueLoader, HTMLTable, ChannelsParser } from '../../core'
import { Logger, Collection } from '@freearhey/core'
import { Storage } from '@freearhey/storage-js'
import { ChannelList, Issue, Site } from '../../models'
import { HTMLTableDataItem, HTMLTableRow, HTMLTableColumn } from '../../types/htmlTable'
import { SITES_DIR, ROOT_DIR } from '../../constants'
import { Channel } from 'epg-grabber'
import { Logger, Collection } from '@freearhey/core'
import { Issue, Site, Channel } from '../../models'
import { HTMLTable, loadIssues } from '../../core'
import { Storage } from '@freearhey/storage-js'
import * as epgGrabber from 'epg-grabber'
import { EPGGrabber } from 'epg-grabber'
async function main() {
const logger = new Logger({ level: -999 })
const issueLoader = new IssueLoader()
const sitesStorage = new Storage(SITES_DIR)
const sites = new Collection()
logger.info('loading channels...')
const channelsParser = new ChannelsParser({
storage: sitesStorage
})
const sites = new Collection<Site>()
logger.info('loading list of sites')
const folders = await sitesStorage.list('*/')
logger.info('loading issues...')
const issues = await issueLoader.load()
const issues = await loadIssues()
logger.info('putting the data together...')
const brokenGuideReports = issues.filter(issue =>
@@ -38,36 +34,43 @@ async function main() {
const files = await sitesStorage.list(`${domain}/*.channels.xml`)
for (const filepath of files) {
const channelList: ChannelList = await channelsParser.parse(filepath)
const xml = await sitesStorage.load(filepath)
const channelsFromXML = EPGGrabber.parseChannelsXML(xml)
const channels = new Collection(channelsFromXML).map(
(channel: epgGrabber.Channel) => new Channel(channel.toObject())
)
site.totalChannels += channelList.channels.count()
site.markedChannels += channelList.channels
.filter((channel: Channel) => channel.xmltv_id)
.count()
site.totalChannels += channels.count()
site.markedChannels += channels.filter((channel: Channel) => channel.xmltv_id).count()
}
sites.add(site)
}
logger.info('creating sites table...')
const tableData = new Collection()
const rows = new Collection<HTMLTableRow>()
sites.forEach((site: Site) => {
tableData.add([
{ value: `<a href="sites/${site.domain}">${site.domain}</a>` },
{ value: site.totalChannels, align: 'right' },
{ value: site.markedChannels, align: 'right' },
{ value: site.getStatus().emoji, align: 'center' },
{ value: site.getIssues().all().join(', ') }
])
rows.add(
new Collection<HTMLTableDataItem>([
{ value: `<a href="sites/${site.domain}">${site.domain}</a>` },
{ value: site.totalChannels.toString(), align: 'right' },
{ value: site.markedChannels.toString(), align: 'right' },
{ value: site.getStatus().emoji, align: 'center' },
{ value: site.getIssueUrls().all().join(', ') }
])
)
})
logger.info('updating sites.md...')
const table = new HTMLTable(tableData.all(), [
{ name: 'Site', align: 'left' },
{ name: 'Channels<br>(total / with xmltv-id)', colspan: 2, align: 'left' },
{ name: 'Status', align: 'left' },
{ name: 'Notes', align: 'left' }
])
const table = new HTMLTable(
rows,
new Collection<HTMLTableColumn>([
{ name: 'Site', align: 'left' },
{ name: 'Channels<br>(total / with xmltv-id)', colspan: 2, align: 'left' },
{ name: 'Status', align: 'left' },
{ name: 'Notes', align: 'left' }
])
)
const rootStorage = new Storage(ROOT_DIR)
const sitesTemplate = await new Storage().load('scripts/templates/_sites.md')
const sitesContent = sitesTemplate.replace('_TABLE_', table.toString())