Browse Source

add support for feed streams to Reader API IDs API

Dave Marquard 4 năm trước cách đây
mục cha
commit
ad266e45ca
1 tập tin đã thay đổi với 37 bổ sung0 xóa
  1. 37 0
      googlereader/handler.go

+ 37 - 0
googlereader/handler.go

@@ -1096,6 +1096,8 @@ func (h *handler) streamItemIDs(w http.ResponseWriter, r *http.Request) {
 		h.handleStarredStream(w, r, rm)
 		h.handleStarredStream(w, r, rm)
 	case ReadStream:
 	case ReadStream:
 		h.handleReadStream(w, r, rm)
 		h.handleReadStream(w, r, rm)
+	case FeedStream:
+		h.handleFeedStream(w, r, rm)
 	default:
 	default:
 		dump, _ := httputil.DumpRequest(r, true)
 		dump, _ := httputil.DumpRequest(r, true)
 		logger.Info("[GoogleReader][/stream/items/ids] [ClientIP=%s] Unknown Stream: %s", clientIP, dump)
 		logger.Info("[GoogleReader][/stream/items/ids] [ClientIP=%s] Unknown Stream: %s", clientIP, dump)
@@ -1184,3 +1186,38 @@ func (h *handler) handleReadStream(w http.ResponseWriter, r *http.Request, rm Re
 	}
 	}
 	json.OK(w, r, streamIDResponse{itemRefs})
 	json.OK(w, r, streamIDResponse{itemRefs})
 }
 }
+
+func (h *handler) handleFeedStream(w http.ResponseWriter, r *http.Request, rm RequestModifiers) {
+	clientIP := request.ClientIP(r)
+	feedID, err := strconv.ParseInt(rm.Streams[0].ID, 10, 64)
+	if err != nil {
+		logger.Error("[GoogleReader][/stream/items/ids#feed] [ClientIP=%s] %v", clientIP, err)
+		json.ServerError(w, r, err)
+		return
+	}
+
+	builder := h.store.NewEntryQueryBuilder(rm.UserID)
+	builder.WithFeedID(feedID)
+	builder.WithLimit(rm.Count)
+	builder.WithOrder(model.DefaultSortingOrder)
+	builder.WithDirection(rm.SortDirection)
+	if rm.StartTime > 0 {
+		builder.AfterDate(time.Unix(rm.StartTime, 0))
+	}
+	if rm.StopTime > 0 {
+		builder.BeforeDate(time.Unix(rm.StopTime, 0))
+	}
+
+	rawEntryIDs, err := builder.GetEntryIDs()
+	if err != nil {
+		logger.Error("[GoogleReader][/stream/items/ids#starred] [ClientIP=%s] %v", clientIP, err)
+		json.ServerError(w, r, err)
+		return
+	}
+	var itemRefs = make([]itemRef, 0)
+	for _, entryID := range rawEntryIDs {
+		formattedID := strconv.FormatInt(entryID, 10)
+		itemRefs = append(itemRefs, itemRef{ID: formattedID})
+	}
+	json.OK(w, r, streamIDResponse{itemRefs})
+}