From 57d2437e9c61216b63d2ea2278654b4e5c88c92d Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Tue, 20 Oct 2020 21:57:02 +0100 Subject: [PATCH] fever favicons endpoint --- server/fever.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/fever.go b/server/fever.go index 2780168..1280699 100644 --- a/server/fever.go +++ b/server/fever.go @@ -5,6 +5,7 @@ import ( "github.com/nkanaev/yarr/storage" "net/http" "strings" + "encoding/base64" ) var feverHandlers = map[string]func(rw http.ResponseWriter, req *http.Request){ @@ -39,6 +40,11 @@ type FeverFeed struct { LastUpdatedOnTime int64 `json:"last_updated_on_time"` } +type FeverFavicon struct { + ID int64 `json:"id"` + Data string `json:"data"` +} + func writeFeverJSON(rw http.ResponseWriter, data map[string]interface{}) { data["api_version"] = 1 data["auth"] = 1 @@ -157,7 +163,24 @@ func FeverFilteredItemIDsHandler(rw http.ResponseWriter, req *http.Request) { } func FeverFaviconsHandler(rw http.ResponseWriter, req *http.Request) { + feeds := db(req).ListFeeds() + favicons := make([]*FeverFavicon, len(feeds)) + for i, feed := range feeds { + data := "data:image/gif;base64,R0lGODlhAQABAAAAACw=" + if feed.HasIcon { + icon := db(req).GetFeed(feed.Id).Icon + data = fmt.Sprintf( + "data:%s;base64,%s", + http.DetectContentType(*icon), + base64.StdEncoding.EncodeToString(*icon), + ) + } + favicons[i] = &FeverFavicon{ID: feed.Id, Data: data} + } + writeFeverJSON(rw, map[string]interface{}{ + "favicons": favicons, + }) } func FeverItemsHandler(rw http.ResponseWriter, req *http.Request) {