mirror of
https://github.com/nkanaev/yarr.git
synced 2025-09-13 09:55:36 +00:00
feed/folder list endpoints
This commit is contained in:
@@ -39,7 +39,19 @@ func StaticHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
io.Copy(rw, f)
|
||||
}
|
||||
|
||||
func StatusHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
writeJSON(rw, map[string]interface{}{
|
||||
"running": handler(req).fetchRunning,
|
||||
"stats": map[string]int64{},
|
||||
})
|
||||
}
|
||||
|
||||
func FolderListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
if req.Method == "GET" {
|
||||
list := db(req).ListFolders()
|
||||
fmt.Println(list)
|
||||
json.NewEncoder(rw).Encode(list)
|
||||
}
|
||||
}
|
||||
|
||||
func FolderHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
@@ -51,7 +63,10 @@ type NewFeed struct {
|
||||
}
|
||||
|
||||
func FeedListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
if req.Method == "POST" {
|
||||
if req.Method == "GET" {
|
||||
list := db(req).ListFeeds()
|
||||
json.NewEncoder(rw).Encode(list)
|
||||
} else if req.Method == "POST" {
|
||||
var feed NewFeed
|
||||
if err := json.NewDecoder(req.Body).Decode(&feed); err != nil {
|
||||
log.Print(err)
|
||||
@@ -88,13 +103,13 @@ func FeedListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
} else if len(sources) == 1 {
|
||||
feedUrl = sources[0].Url
|
||||
fmt.Println("feedUrl:", feedUrl)
|
||||
err = createFeed(db(req), feedUrl, 0)
|
||||
err = createFeed(db(req), feedUrl, feed.FolderID)
|
||||
if err == nil {
|
||||
writeJSON(rw, map[string]string{"status": "success"})
|
||||
}
|
||||
}
|
||||
} else if strings.HasPrefix(contentType, "text/xml") || strings.HasPrefix(contentType, "application/xml") {
|
||||
err = createFeed(db(req), feedUrl, 0)
|
||||
err = createFeed(db(req), feedUrl, feed.FolderID)
|
||||
if err == nil {
|
||||
writeJSON(rw, map[string]string{"status": "success"})
|
||||
}
|
||||
@@ -105,7 +120,7 @@ func FeedListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func createFeed(s *storage.Storage, url string, folderId int64) error {
|
||||
func createFeed(s *storage.Storage, url string, folderId *int64) error {
|
||||
fmt.Println(s, url)
|
||||
fp := gofeed.NewParser()
|
||||
feed, err := fp.ParseURL(url)
|
||||
|
@@ -17,6 +17,7 @@ type Route struct {
|
||||
|
||||
type Handler struct {
|
||||
db *storage.Storage
|
||||
fetchRunning bool
|
||||
}
|
||||
|
||||
func p(path string, handler func(http.ResponseWriter, *http.Request)) Route {
|
||||
@@ -38,6 +39,7 @@ func p(path string, handler func(http.ResponseWriter, *http.Request)) Route {
|
||||
var routes []Route = []Route{
|
||||
p("/", IndexHandler),
|
||||
p("/static/*path", StaticHandler),
|
||||
p("/api/status", StatusHandler),
|
||||
p("/api/folders", FolderListHandler),
|
||||
p("/api/folders/:id", FolderHandler),
|
||||
p("/api/feeds", FeedListHandler),
|
||||
@@ -59,15 +61,21 @@ func db(req *http.Request) *storage.Storage {
|
||||
return nil
|
||||
}
|
||||
|
||||
func handler(req *http.Request) *Handler {
|
||||
return req.Context().Value(ctxHandler).(*Handler)
|
||||
}
|
||||
|
||||
const (
|
||||
ctxDB = 1
|
||||
ctxVars = 2
|
||||
ctxHandler = 3
|
||||
)
|
||||
|
||||
func (h Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
||||
for _, route := range routes {
|
||||
if route.urlRegex.MatchString(req.URL.Path) {
|
||||
ctx := context.WithValue(req.Context(), ctxDB, h.db)
|
||||
ctx = context.WithValue(ctx, ctxHandler, &h)
|
||||
if route.urlRegex.NumSubexp() > 0 {
|
||||
vars := make(map[string]string)
|
||||
matches := route.urlRegex.FindStringSubmatchIndex(req.URL.Path)
|
||||
|
Reference in New Issue
Block a user