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"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
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) {
|
||||
filter := storage.ItemFilter{}
|
||||
query := req.URL.Query()
|
||||
// TODO: must be switch case?
|
||||
if _, ok := query["with_ids"]; ok {
|
||||
ids := make([]int64, 0)
|
||||
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) {
|
||||
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" {
|
||||
query := req.URL.Query()
|
||||
filter := storage.ItemFilter{}
|
||||
filter := storage.MarkFilter{}
|
||||
if folderID, err := strconv.ParseInt(query.Get("folder_id"), 10, 64); err == nil {
|
||||
filter.FolderID = &folderID
|
||||
}
|
||||
|
@ -67,6 +67,13 @@ type ItemFilter struct {
|
||||
SinceID *int64
|
||||
}
|
||||
|
||||
type MarkFilter struct {
|
||||
FolderID *int64
|
||||
FeedID *int64
|
||||
|
||||
Before *time.Time
|
||||
}
|
||||
|
||||
func (s *Storage) CreateItems(items []Item) bool {
|
||||
tx, err := s.db.Begin()
|
||||
if err != nil {
|
||||
@ -240,7 +247,7 @@ func (s *Storage) UpdateItemStatus(item_id int64, status ItemStatus) bool {
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func (s *Storage) MarkItemsRead(filter ItemFilter) bool {
|
||||
func (s *Storage) MarkItemsRead(filter MarkFilter) bool {
|
||||
cond := make([]string, 0)
|
||||
args := make([]interface{}, 0)
|
||||
|
||||
@ -252,6 +259,7 @@ func (s *Storage) MarkItemsRead(filter ItemFilter) bool {
|
||||
cond = append(cond, "i.feed_id = ?")
|
||||
args = append(args, *filter.FeedID)
|
||||
}
|
||||
// TODO: filter.Before
|
||||
predicate := "1"
|
||||
if len(cond) > 0 {
|
||||
predicate = strings.Join(cond, " and ")
|
||||
|
Loading…
x
Reference in New Issue
Block a user