mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
fever write api [wip]
This commit is contained in:
parent
40a9773beb
commit
b0364087ad
@ -7,6 +7,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var feverHandlers = map[string]func(rw http.ResponseWriter, req *http.Request){
|
var feverHandlers = map[string]func(rw http.ResponseWriter, req *http.Request){
|
||||||
@ -199,6 +200,7 @@ func FeverFaviconsHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
func FeverItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
func FeverItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
filter := storage.ItemFilter{}
|
filter := storage.ItemFilter{}
|
||||||
query := req.URL.Query()
|
query := req.URL.Query()
|
||||||
|
// TODO: must be switch case?
|
||||||
if _, ok := query["with_ids"]; ok {
|
if _, ok := query["with_ids"]; ok {
|
||||||
ids := make([]int64, 0)
|
ids := make([]int64, 0)
|
||||||
for _, idstr := range strings.Split(query.Get("with_ids"), ",") {
|
for _, idstr := range strings.Split(query.Get("with_ids"), ",") {
|
||||||
@ -262,5 +264,39 @@ func FeverLinksHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func FeverMarkHandler(rw http.ResponseWriter, req *http.Request) {
|
func FeverMarkHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
|
query := req.URL.Query()
|
||||||
|
|
||||||
|
id, err := strconv.ParseInt(query.Get("id"), 10, 0)
|
||||||
|
if err != nil {
|
||||||
|
handler(req).log.Print("invalid id:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch query.Get("mark") {
|
||||||
|
case "item":
|
||||||
|
var status storage.ItemStatus
|
||||||
|
switch query.Get("as") {
|
||||||
|
case "read":
|
||||||
|
status = storage.READ
|
||||||
|
case "unread":
|
||||||
|
status = storage.UNREAD
|
||||||
|
case "saved":
|
||||||
|
status = storage.STARRED
|
||||||
|
case "unsaved":
|
||||||
|
status = storage.READ
|
||||||
|
default:
|
||||||
|
fmt.Println("TODO: handle")
|
||||||
|
}
|
||||||
|
db(req).UpdateItemStatus(id, status)
|
||||||
|
case "feed":
|
||||||
|
x, _ := strconv.ParseInt(query.Get("before"), 10, 0)
|
||||||
|
before := time.Unix(x, 0)
|
||||||
|
db(req).MarkItemsRead(storage.MarkFilter{FeedID: &id, Before: &before})
|
||||||
|
case "group":
|
||||||
|
x, _ := strconv.ParseInt(query.Get("before"), 10, 0)
|
||||||
|
before := time.Unix(x, 0)
|
||||||
|
db(req).MarkItemsRead(storage.MarkFilter{FolderID: &id, Before: &before})
|
||||||
|
default:
|
||||||
|
fmt.Println("TODO: handle")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -358,7 +358,7 @@ func ItemListHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
})
|
})
|
||||||
} else if req.Method == "PUT" {
|
} else if req.Method == "PUT" {
|
||||||
query := req.URL.Query()
|
query := req.URL.Query()
|
||||||
filter := storage.ItemFilter{}
|
filter := storage.MarkFilter{}
|
||||||
if folderID, err := strconv.ParseInt(query.Get("folder_id"), 10, 64); err == nil {
|
if folderID, err := strconv.ParseInt(query.Get("folder_id"), 10, 64); err == nil {
|
||||||
filter.FolderID = &folderID
|
filter.FolderID = &folderID
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,13 @@ type ItemFilter struct {
|
|||||||
SinceID *int64
|
SinceID *int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MarkFilter struct {
|
||||||
|
FolderID *int64
|
||||||
|
FeedID *int64
|
||||||
|
|
||||||
|
Before *time.Time
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Storage) CreateItems(items []Item) bool {
|
func (s *Storage) CreateItems(items []Item) bool {
|
||||||
tx, err := s.db.Begin()
|
tx, err := s.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -240,7 +247,7 @@ func (s *Storage) UpdateItemStatus(item_id int64, status ItemStatus) bool {
|
|||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) MarkItemsRead(filter ItemFilter) bool {
|
func (s *Storage) MarkItemsRead(filter MarkFilter) bool {
|
||||||
cond := make([]string, 0)
|
cond := make([]string, 0)
|
||||||
args := make([]interface{}, 0)
|
args := make([]interface{}, 0)
|
||||||
|
|
||||||
@ -252,6 +259,7 @@ func (s *Storage) MarkItemsRead(filter ItemFilter) bool {
|
|||||||
cond = append(cond, "i.feed_id = ?")
|
cond = append(cond, "i.feed_id = ?")
|
||||||
args = append(args, *filter.FeedID)
|
args = append(args, *filter.FeedID)
|
||||||
}
|
}
|
||||||
|
// TODO: filter.Before
|
||||||
predicate := "1"
|
predicate := "1"
|
||||||
if len(cond) > 0 {
|
if len(cond) > 0 {
|
||||||
predicate = strings.Join(cond, " and ")
|
predicate = strings.Join(cond, " and ")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user