request_modifier.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package googlereader // import "miniflux.app/v2/internal/googlereader"
  4. import (
  5. "fmt"
  6. "net/http"
  7. "strings"
  8. "miniflux.app/v2/internal/http/request"
  9. )
  10. type RequestModifiers struct {
  11. ExcludeTargets []Stream
  12. FilterTargets []Stream
  13. Streams []Stream
  14. Count int
  15. Offset int
  16. SortDirection string
  17. StartTime int64
  18. StopTime int64
  19. ContinuationToken string
  20. UserID int64
  21. }
  22. func (r RequestModifiers) String() string {
  23. var results []string
  24. results = append(results, fmt.Sprintf("UserID: %d", r.UserID))
  25. var streamStr []string
  26. for _, s := range r.Streams {
  27. streamStr = append(streamStr, s.String())
  28. }
  29. results = append(results, fmt.Sprintf("Streams: [%s]", strings.Join(streamStr, ", ")))
  30. var exclusions []string
  31. for _, s := range r.ExcludeTargets {
  32. exclusions = append(exclusions, s.String())
  33. }
  34. results = append(results, fmt.Sprintf("Exclusions: [%s]", strings.Join(exclusions, ", ")))
  35. var filters []string
  36. for _, s := range r.FilterTargets {
  37. filters = append(filters, s.String())
  38. }
  39. results = append(results, fmt.Sprintf("Filters: [%s]", strings.Join(filters, ", ")))
  40. results = append(results, fmt.Sprintf("Count: %d", r.Count))
  41. results = append(results, fmt.Sprintf("Offset: %d", r.Offset))
  42. results = append(results, fmt.Sprintf("Sort Direction: %s", r.SortDirection))
  43. results = append(results, fmt.Sprintf("Continuation Token: %s", r.ContinuationToken))
  44. results = append(results, fmt.Sprintf("Start Time: %d", r.StartTime))
  45. results = append(results, fmt.Sprintf("Stop Time: %d", r.StopTime))
  46. return strings.Join(results, "; ")
  47. }
  48. func parseStreamFilterFromRequest(r *http.Request) (RequestModifiers, error) {
  49. userID := request.UserID(r)
  50. result := RequestModifiers{
  51. SortDirection: "desc",
  52. UserID: userID,
  53. }
  54. streamOrder := request.QueryStringParam(r, paramStreamOrder, "d")
  55. if streamOrder == "o" {
  56. result.SortDirection = "asc"
  57. }
  58. var err error
  59. result.Streams, err = getStreams(request.QueryStringParamList(r, paramStreamID), userID)
  60. if err != nil {
  61. return RequestModifiers{}, err
  62. }
  63. result.ExcludeTargets, err = getStreams(request.QueryStringParamList(r, paramStreamExcludes), userID)
  64. if err != nil {
  65. return RequestModifiers{}, err
  66. }
  67. result.FilterTargets, err = getStreams(request.QueryStringParamList(r, paramStreamFilters), userID)
  68. if err != nil {
  69. return RequestModifiers{}, err
  70. }
  71. result.Count = request.QueryIntParam(r, paramStreamMaxItems, 0)
  72. result.Offset = request.QueryIntParam(r, paramContinuation, 0)
  73. result.StartTime = request.QueryInt64Param(r, paramStreamStartTime, int64(0))
  74. result.StopTime = request.QueryInt64Param(r, paramStreamStopTime, int64(0))
  75. return result, nil
  76. }