Google Reader API: Take ExcludeTargets into consideration in Feed stream handler
This commit is contained in:
parent
ba65556eac
commit
aa3dc574a7
1 changed files with 50 additions and 30 deletions
|
@ -123,24 +123,14 @@ const (
|
|||
LikeStream
|
||||
)
|
||||
|
||||
// Stream defines a stream type and its id
|
||||
// Stream defines a stream type and its ID.
|
||||
type Stream struct {
|
||||
Type StreamType
|
||||
ID string
|
||||
}
|
||||
|
||||
// RequestModifiers are the parsed request parameters
|
||||
type RequestModifiers struct {
|
||||
ExcludeTargets []Stream
|
||||
FilterTargets []Stream
|
||||
Streams []Stream
|
||||
Count int
|
||||
Offset int
|
||||
SortDirection string
|
||||
StartTime int64
|
||||
StopTime int64
|
||||
ContinuationToken string
|
||||
UserID int64
|
||||
func (s Stream) String() string {
|
||||
return fmt.Sprintf("%v - '%s'", s.Type, s.ID)
|
||||
}
|
||||
|
||||
func (st StreamType) String() string {
|
||||
|
@ -170,34 +160,51 @@ func (st StreamType) String() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (s Stream) String() string {
|
||||
return fmt.Sprintf("%v - '%s'", s.Type, s.ID)
|
||||
// RequestModifiers are the parsed request parameters.
|
||||
type RequestModifiers struct {
|
||||
ExcludeTargets []Stream
|
||||
FilterTargets []Stream
|
||||
Streams []Stream
|
||||
Count int
|
||||
Offset int
|
||||
SortDirection string
|
||||
StartTime int64
|
||||
StopTime int64
|
||||
ContinuationToken string
|
||||
UserID int64
|
||||
}
|
||||
|
||||
func (r RequestModifiers) String() string {
|
||||
result := fmt.Sprintf("UserID: %d\n", r.UserID)
|
||||
result += fmt.Sprintf("Streams: %d\n", len(r.Streams))
|
||||
var results []string
|
||||
|
||||
results = append(results, fmt.Sprintf("UserID: %d", r.UserID))
|
||||
|
||||
var streamStr []string
|
||||
for _, s := range r.Streams {
|
||||
result += fmt.Sprintf(" %v\n", s)
|
||||
streamStr = append(streamStr, s.String())
|
||||
}
|
||||
results = append(results, fmt.Sprintf("Streams: [%s]", strings.Join(streamStr, ", ")))
|
||||
|
||||
result += fmt.Sprintf("Exclusions: %d\n", len(r.ExcludeTargets))
|
||||
var exclusions []string
|
||||
for _, s := range r.ExcludeTargets {
|
||||
result += fmt.Sprintf(" %v\n", s)
|
||||
exclusions = append(exclusions, s.String())
|
||||
}
|
||||
results = append(results, fmt.Sprintf("Exclusions: [%s]", strings.Join(exclusions, ", ")))
|
||||
|
||||
result += fmt.Sprintf("Filter: %d\n", len(r.FilterTargets))
|
||||
var filters []string
|
||||
for _, s := range r.FilterTargets {
|
||||
result += fmt.Sprintf(" %v\n", s)
|
||||
filters = append(filters, s.String())
|
||||
}
|
||||
result += fmt.Sprintf("Count: %d\n", r.Count)
|
||||
result += fmt.Sprintf("Offset: %d\n", r.Offset)
|
||||
result += fmt.Sprintf("Sort Direction: %s\n", r.SortDirection)
|
||||
result += fmt.Sprintf("Continuation Token: %s\n", r.ContinuationToken)
|
||||
result += fmt.Sprintf("Start Time: %d\n", r.StartTime)
|
||||
result += fmt.Sprintf("Stop Time: %d\n", r.StopTime)
|
||||
results = append(results, fmt.Sprintf("Filters: [%s]", strings.Join(filters, ", ")))
|
||||
|
||||
return result
|
||||
results = append(results, fmt.Sprintf("Count: %d", r.Count))
|
||||
results = append(results, fmt.Sprintf("Offset: %d", r.Offset))
|
||||
results = append(results, fmt.Sprintf("Sort Direction: %s", r.SortDirection))
|
||||
results = append(results, fmt.Sprintf("Continuation Token: %s", r.ContinuationToken))
|
||||
results = append(results, fmt.Sprintf("Start Time: %d", r.StartTime))
|
||||
results = append(results, fmt.Sprintf("Stop Time: %d", r.StopTime))
|
||||
|
||||
return strings.Join(results, "; ")
|
||||
}
|
||||
|
||||
// Serve handles Google Reader API calls.
|
||||
|
@ -1279,7 +1286,7 @@ func (h *handler) streamItemIDsHandler(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
slog.Debug("[GoogleReader] Request modifiers",
|
||||
slog.Debug("[GoogleReader] Request Modifiers",
|
||||
slog.String("handler", "streamItemIDsHandler"),
|
||||
slog.String("client_ip", clientIP),
|
||||
slog.String("user_agent", r.UserAgent()),
|
||||
|
@ -1458,18 +1465,30 @@ func (h *handler) handleFeedStreamHandler(w http.ResponseWriter, r *http.Request
|
|||
builder.WithLimit(rm.Count)
|
||||
builder.WithOffset(rm.Offset)
|
||||
builder.WithSorting(model.DefaultSortingOrder, rm.SortDirection)
|
||||
|
||||
if rm.StartTime > 0 {
|
||||
builder.AfterPublishedDate(time.Unix(rm.StartTime, 0))
|
||||
}
|
||||
|
||||
if rm.StopTime > 0 {
|
||||
builder.BeforePublishedDate(time.Unix(rm.StopTime, 0))
|
||||
}
|
||||
|
||||
if len(rm.ExcludeTargets) > 0 {
|
||||
for _, s := range rm.ExcludeTargets {
|
||||
switch s.Type {
|
||||
case ReadStream:
|
||||
builder.WithoutStatus(model.EntryStatusRead)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rawEntryIDs, err := builder.GetEntryIDs()
|
||||
if err != nil {
|
||||
json.ServerError(w, r, err)
|
||||
return
|
||||
}
|
||||
|
||||
var itemRefs = make([]itemRef, 0)
|
||||
for _, entryID := range rawEntryIDs {
|
||||
formattedID := strconv.FormatInt(entryID, 10)
|
||||
|
@ -1481,6 +1500,7 @@ func (h *handler) handleFeedStreamHandler(w http.ResponseWriter, r *http.Request
|
|||
json.ServerError(w, r, err)
|
||||
return
|
||||
}
|
||||
|
||||
continuation := 0
|
||||
if len(itemRefs)+rm.Offset < totalEntries {
|
||||
continuation = len(itemRefs) + rm.Offset
|
||||
|
|
Loading…
Reference in a new issue