sl-feeds/cmd/sl-feeds/main.go

107 lines
2.2 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"os"
_ "../../fetch"
"github.com/BurntSushi/toml"
"github.com/urfave/cli"
)
func main() {
config := Config{}
app := cli.NewApp()
app.Name = "sl-feeds"
app.Usage = "Transform slackware ChangeLog.txt into RSS feeds"
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "config, c",
Usage: "Load configuration from `FILE`",
},
cli.StringFlag{
Name: "dest, d",
Usage: "Output RSS files to `DIR`",
},
cli.BoolFlag{
Name: "sample-config",
Usage: "Output sample config file to stdout",
},
}
// This is the main/default application
app.Action = func(c *cli.Context) error {
if c.Bool("sample-config") {
c := Config{
Dest: "$HOME/public_html/feeds/",
Mirrors: []Mirror{
Mirror{
URL: "http://slackware.osuosl.org/",
Releases: []string{
"slackware-14.0",
"slackware-14.1",
"slackware-14.2",
"slackware-current",
"slackware64-14.0",
"slackware64-14.1",
"slackware64-14.2",
"slackware64-current",
},
},
Mirror{
URL: "http://ftp.arm.slackware.com/slackwarearm/",
Releases: []string{
"slackwarearm-14.1",
"slackwarearm-14.2",
"slackwarearm-current",
},
},
},
}
toml.NewEncoder(os.Stdout).Encode(c)
return nil
}
fmt.Println(os.ExpandEnv(config.Dest))
/*
for each mirror in Mirrors
if there is not a $release.RSS file, then fetch the whole ChangeLog
if there is a $release.RSS file, then stat the file and only fetch remote if it is newer than the local RSS file
if the remote returns any error (404, 503, etc) then print a warning but continue
*/
return nil
}
app.Before = func(c *cli.Context) error {
if c.String("config") == "" {
return nil
}
data, err := ioutil.ReadFile(c.String("config"))
if err != nil {
return err
}
if _, err := toml.Decode(string(data), &config); err != nil {
return err
}
if c.String("dest") != "" {
config.Dest = c.String("dest")
}
return nil
}
app.Run(os.Args)
}
type Config struct {
Dest string
Mirrors []Mirror
}
type Mirror struct {
URL string
Releases []string
}