parent
46fe312222
commit
cfea265312
|
|
@ -2,3 +2,4 @@ rssmon3
|
||||||
exec-rssmon3
|
exec-rssmon3
|
||||||
**.sw*
|
**.sw*
|
||||||
**/testdata
|
**/testdata
|
||||||
|
**/._*
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ type Config struct {
|
||||||
vpntor string
|
vpntor string
|
||||||
outdir string
|
outdir string
|
||||||
interval time.Duration
|
interval time.Duration
|
||||||
|
last time.Time
|
||||||
db storage.DB
|
db storage.DB
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
can context.CancelFunc
|
can context.CancelFunc
|
||||||
|
|
@ -35,6 +36,7 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
log.Println(config)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
if err := mainLoop(config); err != nil {
|
if err := mainLoop(config); err != nil {
|
||||||
|
|
@ -43,12 +45,15 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func mainLoop(config Config) error {
|
func mainLoop(config *Config) error {
|
||||||
|
block := config.interval - time.Since(config.last)
|
||||||
|
log.Printf("Blocking %v", block)
|
||||||
select {
|
select {
|
||||||
case <-time.After(config.interval):
|
case <-time.After(block):
|
||||||
if err := pull(config.db, config.vpntor, config.outdir, config.url); err != nil {
|
if err := pull(config.db, config.vpntor, config.outdir, config.url); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
config.last = time.Now()
|
||||||
case <-config.ctx.Done():
|
case <-config.ctx.Done():
|
||||||
if err := config.ctx.Err(); err != nil {
|
if err := config.ctx.Err(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -57,7 +62,7 @@ func mainLoop(config Config) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func config() (Config, error) {
|
func config() (*Config, error) {
|
||||||
as := args.NewArgSet()
|
as := args.NewArgSet()
|
||||||
as.Append(args.STRING, "url", "url of rss feed", "http://192.168.0.86:33419/api/tag/torrent")
|
as.Append(args.STRING, "url", "url of rss feed", "http://192.168.0.86:33419/api/tag/torrent")
|
||||||
as.Append(args.STRING, "vpntor", "url of vpntor", "http://192.168.0.86:9091/transmission/rpc")
|
as.Append(args.STRING, "vpntor", "url of vpntor", "http://192.168.0.86:9091/transmission/rpc")
|
||||||
|
|
@ -68,7 +73,7 @@ func config() (Config, error) {
|
||||||
as.Append(args.STRING, "user", "db user", "")
|
as.Append(args.STRING, "user", "db user", "")
|
||||||
as.Append(args.STRING, "pass", "db pass", "")
|
as.Append(args.STRING, "pass", "db pass", "")
|
||||||
if err := as.Parse(); err != nil {
|
if err := as.Parse(); err != nil {
|
||||||
return Config{}, err
|
return &Config{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
db, err := storage.New(
|
db, err := storage.New(
|
||||||
|
|
@ -82,7 +87,7 @@ func config() (Config, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, can := context.WithCancel(context.Background())
|
ctx, can := context.WithCancel(context.Background())
|
||||||
return Config{
|
return &Config{
|
||||||
url: as.Get("url").GetString(),
|
url: as.Get("url").GetString(),
|
||||||
vpntor: as.Get("vpntor").GetString(),
|
vpntor: as.Get("vpntor").GetString(),
|
||||||
interval: as.Get("interval").GetDuration(),
|
interval: as.Get("interval").GetDuration(),
|
||||||
|
|
@ -98,6 +103,7 @@ func pull(db storage.DB, vpntor, outdir, url string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
log.Printf("feed: %v", gofeed.Title)
|
||||||
for _, item := range gofeed.Items {
|
for _, item := range gofeed.Items {
|
||||||
if ok, err := isDone(db, item.Link); err != nil {
|
if ok, err := isDone(db, item.Link); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -156,6 +162,7 @@ func isDone(db storage.DB, url string) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func handle(vpntor, outdir, content string) error {
|
func handle(vpntor, outdir, content string) error {
|
||||||
|
log.Printf("magnets: %v", findMagnets(content))
|
||||||
for _, magnet := range findMagnets(content) {
|
for _, magnet := range findMagnets(content) {
|
||||||
resp, err := submit(vpntor, outdir, magnet)
|
resp, err := submit(vpntor, outdir, magnet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ func fakeRSSServer() *httptest.Server {
|
||||||
func TestMainLoopCtx(t *testing.T) {
|
func TestMainLoopCtx(t *testing.T) {
|
||||||
ctx, can := context.WithCancel(context.Background())
|
ctx, can := context.WithCancel(context.Background())
|
||||||
can()
|
can()
|
||||||
c := Config{
|
c := &Config{
|
||||||
interval: time.Hour,
|
interval: time.Hour,
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue