diff --git a/xmltv/types.go b/xmltv/types.go index 19035cb..5f84c6c 100644 --- a/xmltv/types.go +++ b/xmltv/types.go @@ -13,10 +13,10 @@ type Response struct { } type Channel struct { - XMLName xml.Name `xml:"channel"` - Id string `xml:"id,attr"` - Name string `xml:"display-name"` - BaseUrl string `xml:"base-url"` + XMLName xml.Name `xml:"channel"` + Id string `xml:"id,attr"` + Name CommonElement `xml:"display-name"` + BaseUrl string `xml:"base-url"` } type Programme struct { diff --git a/xmltv/xmltv.go b/xmltv/xmltv.go index b40cb77..12d7d3a 100644 --- a/xmltv/xmltv.go +++ b/xmltv/xmltv.go @@ -12,7 +12,7 @@ const ( XmltvDateFormat = "20060102150400 -0700" XmltvEpisodeStd = "xmtv_ns" GeneratorName = "xmltv.sjurtf.net" - DocHeader = `` + DocHeader = "\n" defaultGeneratorUrl = "https://xmltv.sjurtf.net/" ) @@ -56,9 +56,15 @@ func GetChannelList() ([]byte, error) { var channels []Channel var programs []Programme for _, c := range channelCache { + + name := CommonElement{ + Lang: "en", + Value: c.Name, + } + channel := Channel{ Id: xmlChannelIdMap[c.Id], - Name: c.Name, + Name: name, BaseUrl: generatorUrl, } channels = append(channels, channel) @@ -78,24 +84,48 @@ func getProgramsForChannel(channelId string, date time.Time) []Programme { var programs []Programme for _, p := range guide { + cat := "series" + if p.IsMovie { + cat = "movie" + } - titles := CommonElement{ - Lang: "nb", - Value: p.Title, + category := CommonElement{ + Lang: "en", + Value: cat, } - subtitle := CommonElement{ + titles := CommonElement{ Lang: "nb", Value: p.Title, } - episode := EpisodeNum{ - System: XmltvEpisodeStd, - EpisodeNum: formatEpisode(p.Season, p.Episode, p.EpisodeTotal), + var subtitles []CommonElement + var episodeNums []EpisodeNum + if p.Season != 0 || p.Episode != 0 { + episode := EpisodeNum{ + System: XmltvEpisodeStd, + EpisodeNum: formatEpisode(p.Season, p.Episode, p.EpisodeTotal), + } + if !p.IsMovie { + episodeNums = []EpisodeNum{episode} + subtitles = []CommonElement{{ + Lang: "nb", + Value: formatEpisodeHuman(p.Season, p.Episode), + }, + } + } + + } else { + episodeNums = nil + subtitles = nil } - desc := p.EpisodeSynopsis - if desc == "" { + var desc string + if p.EpisodeSynopsis == "" && p.SeriesSynopsis == "" { + desc = "Beskrivelse ikke tilgjengelig" + } else if p.EpisodeSynopsis != "" { + desc = p.EpisodeSynopsis + } else { desc = p.SeriesSynopsis } @@ -109,9 +139,10 @@ func getProgramsForChannel(channelId string, date time.Time) []Programme { Start: formatTime(p.Start), Stop: formatTime(p.Stop), Titles: []CommonElement{titles}, - SubTitles: []CommonElement{subtitle}, + Categories: []CommonElement{category}, Descriptions: []CommonElement{description}, - EpisodeNums: []EpisodeNum{episode}, + SubTitles: subtitles, + EpisodeNums: episodeNums, } programs = append(programs, programme) } @@ -128,11 +159,10 @@ func marshall(channels []Channel, programs []Programme) ([]byte, error) { ProgrammeList: programs, } - bytes, err := xml.Marshal(resp) + bytes, err := xml.MarshalIndent(resp, "", " ") if err != nil { log.Fatalln("unable to marshal") } - return append([]byte(DocHeader), bytes...), nil } @@ -147,7 +177,11 @@ so Season 7, Episode 5, Part 1 of 2 would appear as: 6.4.0/2 */ func formatEpisode(s, e, t int) string { - return fmt.Sprintf("%d.%d/%d", s-1, e-1, t) + return fmt.Sprintf("%d.%d.0/1", s-1, e-1) +} + +func formatEpisodeHuman(s, e int) string { + return fmt.Sprintf("S%dE%d", s, e) } func formatTime(date time.Time) string {