Update update.ts

This commit is contained in:
freearhey 2025-01-21 18:53:55 +03:00
parent 7e07f40809
commit 44bb8a5788

View file

@ -1,51 +1,63 @@
import { Channel } from 'epg-grabber'
import { Logger, Storage, Collection } from '@freearhey/core' import { Logger, Storage, Collection } from '@freearhey/core'
import { IssueLoader, HTMLTable, Markdown } from '../../core' import { IssueLoader, HTMLTable, ChannelsParser } from '../../core'
import { Issue, Site } from '../../models' import { Issue, Site } from '../../models'
import { SITES_DIR, DOT_SITES_DIR } from '../../constants' import { SITES_DIR, ROOT_DIR } from '../../constants'
import path from 'path'
async function main() { async function main() {
const logger = new Logger({ disabled: true }) const logger = new Logger({ disabled: true })
const loader = new IssueLoader() const loader = new IssueLoader()
const storage = new Storage(SITES_DIR) const sitesStorage = new Storage(SITES_DIR)
const channelsParser = new ChannelsParser({ storage: sitesStorage })
const sites = new Collection() const sites = new Collection()
logger.info('loading list of sites') logger.info('loading list of sites')
const folders = await storage.list('*/') const folders = await sitesStorage.list('*/')
logger.info('loading issues...') logger.info('loading issues...')
const issues = await loadIssues(loader) const issues = await loadIssues(loader)
logger.info('putting the data together...') logger.info('putting the data together...')
folders.forEach((domain: string) => { for (const domain of folders) {
const filteredIssues = issues.filter((issue: Issue) => domain === issue.data.get('site')) const filteredIssues = issues.filter((issue: Issue) => domain === issue.data.get('site'))
const site = new Site({ const site = new Site({
domain, domain,
issues: filteredIssues issues: filteredIssues
}) })
const files = await sitesStorage.list(`${domain}/*.channels.xml`)
for (const filepath of files) {
const channels = await channelsParser.parse(filepath)
site.totalChannels += channels.count()
site.markedChannels += channels.filter((channel: Channel) => channel.xmltv_id).count()
}
sites.add(site) sites.add(site)
}) }
logger.info('creating sites table...') logger.info('creating sites table...')
const data = new Collection() const data = new Collection()
sites.forEach((site: Site) => { sites.forEach((site: Site) => {
data.add([ data.add([
`<a href="sites/${site.domain}">${site.domain}</a>`, `<a href="sites/${site.domain}">${site.domain}</a>`,
`${site.totalChannels} / ${site.markedChannels}`,
site.getStatus().emoji, site.getStatus().emoji,
site.getIssues().all().join(', ') site.getIssues().all().join(', ')
]) ])
}) })
const table = new HTMLTable(data.all(), [{ name: 'Site' }, { name: 'Status' }, { name: 'Notes' }])
const readmeStorage = new Storage(DOT_SITES_DIR)
await readmeStorage.save('_table.md', table.toString())
logger.info('updating sites.md...') logger.info('updating sites.md...')
const configPath = path.join(DOT_SITES_DIR, 'config.json') const table = new HTMLTable(data.all(), [
const sitesMarkdown = new Markdown(configPath) { name: 'Site' },
sitesMarkdown.compile() { name: 'Channels *', align: 'center' },
{ name: 'Status' },
{ name: 'Notes' }
])
const rootStorage = new Storage(ROOT_DIR)
const sitesTemplate = await new Storage().load('scripts/templates/_sites.md')
const sitesContent = sitesTemplate.replace('_TABLE_', table.toString())
await rootStorage.save('SITES.md', sitesContent)
} }
main() main()