mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
99 lines
2.2 KiB
Go
99 lines
2.2 KiB
Go
package server
|
|
|
|
import (
|
|
"github.com/nkanaev/yarr/worker"
|
|
"net/http"
|
|
"encoding/json"
|
|
"os"
|
|
"log"
|
|
"io"
|
|
"fmt"
|
|
"mime"
|
|
"strings"
|
|
"path/filepath"
|
|
)
|
|
|
|
func IndexHandler(rw http.ResponseWriter, req *http.Request) {
|
|
fmt.Println(os.Getwd())
|
|
f, err := os.Open("template/index.html")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
rw.Header().Set("Content-Type", "text/html")
|
|
io.Copy(rw, f)
|
|
|
|
}
|
|
|
|
func StaticHandler(rw http.ResponseWriter, req *http.Request) {
|
|
path := "template/static/" + Vars(req)["path"]
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
rw.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
defer f.Close()
|
|
rw.Header().Set("Content-Type", mime.TypeByExtension(filepath.Ext(path)))
|
|
io.Copy(rw, f)
|
|
}
|
|
|
|
func FolderListHandler(rw http.ResponseWriter, req *http.Request) {
|
|
}
|
|
|
|
func FolderHandler(rw http.ResponseWriter, req *http.Request) {
|
|
}
|
|
|
|
type NewFeed struct {
|
|
Url string `json:"url"`
|
|
FolderID int64 `json:"folder_id,omitempty"`
|
|
}
|
|
|
|
func FeedListHandler(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method == "POST" {
|
|
var feed NewFeed
|
|
if err := json.NewDecoder(req.Body).Decode(&feed); err != nil {
|
|
log.Print(err)
|
|
rw.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
feedUrl := feed.Url
|
|
res, err := http.Get(feedUrl)
|
|
if err != nil {
|
|
log.Print(err)
|
|
rw.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
} else if res.StatusCode != 200 {
|
|
rw.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
contentType := res.Header.Get("Content-Type")
|
|
if strings.HasPrefix(contentType, "text/html") {
|
|
sources, err := worker.FindFeeds(res)
|
|
if err != nil {
|
|
log.Print(err)
|
|
}
|
|
if len(sources) == 0 {
|
|
writeJSON(rw, map[string]string{"status": "notfound"})
|
|
} else if len(sources) > 1 {
|
|
writeJSON(rw, map[string]interface{}{
|
|
"status": "multiple",
|
|
"choice": sources,
|
|
})
|
|
} else if len(sources) == 1 {
|
|
feedUrl = sources[0].Url
|
|
fmt.Println("feedUrl:", feedUrl)
|
|
writeJSON(rw, map[string]string{"status": "success"})
|
|
}
|
|
fmt.Println("got html url", sources, feedUrl)
|
|
} else if strings.HasPrefix(contentType, "text/xml") {
|
|
log.Print("got rss feed")
|
|
}
|
|
log.Print(res.Header.Get("Content-Type"))
|
|
}
|
|
}
|
|
|
|
func FeedHandler(rw http.ResponseWriter, req *http.Request) {
|
|
}
|