diff options
| author | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-12-16 18:06:41 +0000 |
|---|---|---|
| committer | Dmitry Ilvokhin <d@ilvokhin.com> | 2025-12-16 18:08:36 +0000 |
| commit | a9c35dec90c02f411a1665aae3a6d96876879e88 (patch) | |
| tree | 801832488a9a58de87c1410f96ab3340ca5112d8 /epgtrim/epgtrim.go | |
| parent | c0a523b13fa011a3bb766de3311c2ce798d0dc5f (diff) | |
| download | misc-a9c35dec90c02f411a1665aae3a6d96876879e88.tar.gz misc-a9c35dec90c02f411a1665aae3a6d96876879e88.tar.bz2 misc-a9c35dec90c02f411a1665aae3a6d96876879e88.zip | |
Optimize memory usage of epgtrim/epgpruner
Do not read entire file into the memory. Instead filter junk on the fly
while reading the file.
Diffstat (limited to 'epgtrim/epgtrim.go')
| -rw-r--r-- | epgtrim/epgtrim.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/epgtrim/epgtrim.go b/epgtrim/epgtrim.go new file mode 100644 index 0000000..9fd8d7a --- /dev/null +++ b/epgtrim/epgtrim.go @@ -0,0 +1,61 @@ +package main + +import ( + "bufio" + "encoding/xml" + "flag" + "fmt" + "log" + "os" +) + +var ( + docType = `<!DOCTYPE tv SYSTEM "xmltv.dtd">` + output = flag.String( + "output", + "-", + "Write output to `file` (stdout by default)", + ) +) + +func usage() { + fmt.Fprintf(os.Stderr, "usage: epgpruner [-output file] URL\n") + flag.PrintDefaults() + os.Exit(2) +} + +func main() { + log.SetPrefix("epgtrim: ") + log.SetFlags(0) + flag.Usage = usage + flag.Parse() + if flag.NArg() != 1 { + usage() + os.Exit(1) + } + URL := flag.Args()[0] + + playlist, err := NewPlaylist(URL) + if err != nil { + log.Fatal(err) + } + + outfile := os.Stdout + if *output != "-" { + f, err := os.Create(*output) + if err != nil { + log.Fatal(err) + } + outfile = f + defer f.Close() + } + wr := bufio.NewWriter(outfile) + defer wr.Flush() + wr.Write([]byte(xml.Header + docType + "\n")) + e := xml.NewEncoder(wr) + e.Indent("", " ") + err = e.Encode(playlist.Schedule.EPG) + if err != nil { + log.Fatal(err) + } +} |