-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathfeed_commands.go
112 lines (91 loc) · 1.88 KB
/
feed_commands.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package main
import (
"git.blob42.xyz/blob42/hugobot/v3/feeds"
"git.blob42.xyz/blob42/hugobot/v3/handlers"
"git.blob42.xyz/blob42/hugobot/v3/posts"
"fmt"
"log"
"time"
cli "gopkg.in/urfave/cli.v1"
)
var fetchCmd = cli.Command{
Name: "fetch",
Aliases: []string{"f"},
Usage: "Fetch data from feed",
Flags: []cli.Flag{
cli.StringFlag{
Name: "since",
Usage: "Fetch data since `TIME`, defaults to last refresh time",
},
},
Action: fetchFeeds,
}
var feedsCmdGroup = cli.Command{
Name: "feeds",
Usage: "Feeds related commands. default: list feeds",
Flags: []cli.Flag{
cli.IntFlag{
Name: "id,i",
Value: 0,
Usage: "Feeds `id`",
},
},
Subcommands: []cli.Command{
fetchCmd,
},
Action: listFeeds,
}
func fetchFeeds(c *cli.Context) {
var result []*posts.Post
fList, err := getFeeds(c.Parent())
if err != nil {
log.Fatal(err)
}
for _, f := range fList {
var handler handlers.FormatHandler
handler = handlers.GetFormatHandler(*f)
if c.IsSet("since") {
// Parse time
t, err := time.Parse(time.UnixDate, c.String("since"))
if err != nil {
log.Fatal(err)
}
result, err = handler.FetchSince(f.Url, t)
} else {
result, err = handler.FetchSince(f.Url, f.LastRefresh)
}
if err != nil {
log.Fatal(err)
}
for _, post := range result {
log.Printf("%s (updated: %s)", post.Title, post.Updated)
}
log.Println("Total: ", len(result))
}
}
func listFeeds(c *cli.Context) {
fList, err := getFeeds(c)
if err != nil {
log.Fatal(err)
}
for _, f := range fList {
fmt.Println(f)
}
}
func getFeeds(c *cli.Context) ([]*feeds.Feed, error) {
var fList []*feeds.Feed
var err error
if c.IsSet("id") {
feed, err := feeds.GetById(c.Int64("id"))
if err != nil {
return nil, err
}
fList = append(fList, feed)
} else {
fList, err = feeds.ListFeeds()
if err != nil {
return nil, err
}
}
return fList, nil
}