importer: start of automatic recurring imports

Change-Id: Ib39e6bbf0295df963441d3ebd388558e94581ffb
This commit is contained in:
Brad Fitzpatrick 2014-05-05 21:23:34 -07:00
parent bf9b0ea332
commit bff4e7cbbb
2 changed files with 30 additions and 0 deletions

View File

@ -161,6 +161,7 @@ var tmpl = template.Must(template.New("root").Parse(`
<li>Import root permanode: {{if .Acct.RootObject}}{{.Acct.RootObject.PermanodeRef}}{{else}}(none){{end}}</li>
<li>Configured: {{.Acct.IsAccountReady}}</li>
<li>Summary: {{.Acct.AccountLinkSummary}}</li>
<li>Import interval: {{if .Acct.RefreshInterval}}{{.Acct.RefreshInterval}}{{else}}(manual){{end}}</li>
<li>Running: {{.Running}}</li>
{{if .Running}}
<li>Started: {{.StartedAgo}} ago</li>
@ -189,6 +190,11 @@ var tmpl = template.Must(template.New("root").Parse(`
<input type='submit' value='Re-login'>
</form>
<form method='post' style='display: inline'>
<input type='hidden' name='mode' value='toggleauto'>
<input type='submit' value='Toggle auto'>
</form>
<form method='post' style='display: inline'>
<input type='hidden' name='mode' value='delete'>
<input type='submit' value='Delete Account' onclick='return confirm("Delete account?")'>

View File

@ -49,6 +49,7 @@ const (
attrClientID = "authClientID"
attrClientSecret = "authClientSecret"
attrImportRoot = "importRoot"
attrImportAuto = "importAuto" // => time.Duration value ("30m") or "" for off
)
// An Importer imports from a third-party site.
@ -675,6 +676,15 @@ func (ia *importerAcct) delete() error {
return nil
}
func (ia *importerAcct) toggleAuto() error {
old := ia.acct.Attr(attrImportAuto)
var new string
if old == "" {
new = "30m" // TODO: configurable?
}
return ia.acct.SetAttrs(attrImportAuto, new)
}
func (ia *importerAcct) IsAccountReady() (bool, error) {
return ia.im.impl.IsAccountReady(ia.acct)
}
@ -694,6 +704,15 @@ func (ia *importerAcct) AccountLinkSummary() string {
return ia.im.impl.SummarizeAccount(ia.acct)
}
func (ia *importerAcct) RefreshInterval() time.Duration {
ds := ia.acct.Attr(attrImportAuto)
if ds == "" {
return 0
}
d, _ := time.ParseDuration(ds)
return d
}
func (ia *importerAcct) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
ia.serveHTTPPost(w, r)
@ -742,6 +761,11 @@ func (ia *importerAcct) serveHTTPPost(w http.ResponseWriter, r *http.Request) {
case "login":
ia.setup(w, r)
return
case "toggleauto":
if err := ia.toggleAuto(); err != nil {
http.Error(w, err.Error(), 500)
return
}
case "delete":
ia.stop() // can't hurt
if err := ia.delete(); err != nil {