diff --git a/server/fever.go b/server/fever.go index d263cf4..0316ae3 100644 --- a/server/fever.go +++ b/server/fever.go @@ -33,13 +33,13 @@ type FeverFeedsGroup struct { } type FeverFeed struct { - ID int64 `json:"id"` - FaviconID int64 `json:"favicon_id"` - Title string `json:"title"` - Url string `json:"url"` - SiteUrl string `json:"site_url"` - IsSpark int `json:"is_spark"` - LastUpdatedOnTime int64 `json:"last_updated_on_time"` + ID int64 `json:"id"` + FaviconID int64 `json:"favicon_id"` + Title string `json:"title"` + Url string `json:"url"` + SiteUrl string `json:"site_url"` + IsSpark int `json:"is_spark"` + LastUpdated int64 `json:"last_updated_on_time"` } type FeverItem struct { @@ -128,19 +128,23 @@ func FeverGroupsHandler(rw http.ResponseWriter, req *http.Request) { func FeverFeedsHandler(rw http.ResponseWriter, req *http.Request) { feeds := db(req).ListFeeds() + httpStates := db(req).ListHTTPStates() feverFeeds := make([]*FeverFeed, len(feeds)) for i, feed := range feeds { - // TODO: check url/siteurl + var lastUpdated int64 + if state, ok := httpStates[feed.Id]; ok { + lastUpdated = state.LastRefreshed.Unix() + } // TODO: store last updated on time? feverFeeds[i] = &FeverFeed{ - ID: feed.Id, - FaviconID: feed.Id, - Title: feed.Title, - Url: feed.FeedLink, - SiteUrl: feed.Link, - IsSpark: 0, - LastUpdatedOnTime: 1, + ID: feed.Id, + FaviconID: feed.Id, + Title: feed.Title, + Url: feed.FeedLink, + SiteUrl: feed.Link, + IsSpark: 0, + LastUpdated: lastUpdated, } } writeFeverJSON(rw, map[string]interface{}{ diff --git a/storage/http.go b/storage/http.go index e0396c9..2484abf 100644 --- a/storage/http.go +++ b/storage/http.go @@ -12,6 +12,30 @@ type HTTPState struct { Etag string } +func (s *Storage) ListHTTPStates() map[int64]HTTPState { + result := make(map[int64]HTTPState) + rows, err := s.db.Query(`select feed_id, last_refreshed, last_modified, etag from http_states`) + if err != nil { + s.log.Print(err) + return result + } + for rows.Next() { + var state HTTPState + err = rows.Scan( + &state.FeedID, + &state.LastRefreshed, + &state.LastModified, + &state.Etag, + ) + if err != nil { + s.log.Print(err) + return result + } + result[state.FeedID] = state + } + return result +} + func (s *Storage) GetHTTPState(feedID int64) *HTTPState { row := s.db.QueryRow(` select feed_id, last_refreshed, last_modified, etag