package web import ( "fmt" "log" "net/http" "time" "github.com/Jaculabilis/intake/core" "github.com/Jaculabilis/intake/web/html" ) func (env *Env) getSource(writer http.ResponseWriter, req *http.Request) { source := req.PathValue("source") if exists, err := core.SourceExists(env.db, source); !exists || err != nil { http.NotFound(writer, req) return } page := getQueryInt(req, "page", 1) count := getQueryInt(req, "count", core.DefaultFeedLimit) showHidden := getQueryInt(req, "hidden", 0) var items []core.Item var err error if showHidden != 0 { items, err = core.GetAllItemsForSource(env.db, source, (page-1)*count, count) } else { items, err = core.GetActiveItemsForSource(env.db, source, (page-1)*count, count) } if err != nil { http.Error(writer, err.Error(), 500) return } data := html.FeedData{ Items: items, ShowHidden: showHidden, Page: page, Count: count, } html.Feed(writer, data) } func (env *Env) fetchSource(writer http.ResponseWriter, req *http.Request) { source := req.PathValue("source") if exists, err := core.SourceExists(env.db, source); !exists || err != nil { http.NotFound(writer, req) return } state, envs, argv, postProcess, err := core.GetSourceActionInputs(env.db, source, "fetch") if err != nil { http.Error(writer, fmt.Sprintf("error: failed to get data for %s: %v", source, err.Error()), 500) return } items, newState, errItem, err := core.Execute(source, argv, envs, state, "", time.Minute, postProcess) if err != nil { core.AddErrorItem(env.db, errItem) http.Error(writer, fmt.Sprintf("error: failed to execute fetch: %v", err.Error()), 500) return } added, deleted, err := core.UpdateWithFetchedItems(env.db, source, newState, items, time.Now()) if err != nil { http.Error(writer, fmt.Sprintf("error: failed to update: %v", err.Error()), 500) return } log.Printf("%s added %d items, updated %d items, and deleted %d items", source, added, len(items)-added, deleted) data := html.FetchData{ Source: source, Added: added, Updated: len(items) - added, Deleted: deleted, Items: items, } html.Fetch(writer, data) }