mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-09 00:20:08 -04:00
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import { DataLoaderData } from '../types/dataLoader'
|
|
import { Collection } from '@freearhey/core'
|
|
import { Channel, Feed, Guide, Stream } from '../models'
|
|
|
|
export class DataProcessor {
|
|
constructor() {}
|
|
|
|
process(data: DataLoaderData) {
|
|
let channels = new Collection(data.channels).map(data => new Channel(data))
|
|
const channelsKeyById = channels.keyBy((channel: Channel) => channel.id)
|
|
|
|
const guides = new Collection(data.guides).map(data => new Guide(data))
|
|
const guidesGroupedByStreamId = guides.groupBy((guide: Guide) => guide.getStreamId())
|
|
|
|
const streams = new Collection(data.streams).map(data => new Stream(data))
|
|
const streamsGroupedById = streams.groupBy((stream: Stream) => stream.getId())
|
|
|
|
const feeds = new Collection(data.feeds).map(data =>
|
|
new Feed(data)
|
|
.withGuides(guidesGroupedByStreamId)
|
|
.withStreams(streamsGroupedById)
|
|
.withChannel(channelsKeyById)
|
|
)
|
|
const feedsGroupedByChannelId = feeds.groupBy((feed: Feed) => feed.channelId)
|
|
|
|
channels = channels.map((channel: Channel) => channel.withFeeds(feedsGroupedByChannelId))
|
|
|
|
return {
|
|
feedsGroupedByChannelId,
|
|
guidesGroupedByStreamId,
|
|
streamsGroupedById,
|
|
channelsKeyById,
|
|
channels,
|
|
streams,
|
|
guides,
|
|
feeds
|
|
}
|
|
}
|
|
}
|