feed.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package model
  5. import (
  6. "fmt"
  7. "time"
  8. )
  9. // Feed represents a feed in the database.
  10. type Feed struct {
  11. ID int64 `json:"id"`
  12. UserID int64 `json:"user_id"`
  13. FeedURL string `json:"feed_url"`
  14. SiteURL string `json:"site_url"`
  15. Title string `json:"title"`
  16. CheckedAt time.Time `json:"checked_at"`
  17. EtagHeader string `json:"etag_header"`
  18. LastModifiedHeader string `json:"last_modified_header"`
  19. ParsingErrorMsg string `json:"parsing_error_message"`
  20. ParsingErrorCount int `json:"parsing_error_count"`
  21. ScraperRules string `json:"scraper_rules"`
  22. RewriteRules string `json:"rewrite_rules"`
  23. Crawler bool `json:"crawler"`
  24. Category *Category `json:"category,omitempty"`
  25. Entries Entries `json:"entries,omitempty"`
  26. Icon *FeedIcon `json:"icon"`
  27. }
  28. func (f *Feed) String() string {
  29. return fmt.Sprintf("ID=%d, UserID=%d, FeedURL=%s, SiteURL=%s, Title=%s, Category={%s}",
  30. f.ID,
  31. f.UserID,
  32. f.FeedURL,
  33. f.SiteURL,
  34. f.Title,
  35. f.Category,
  36. )
  37. }
  38. // Merge combine override to the current struct
  39. func (f *Feed) Merge(override *Feed) {
  40. if override.Title != "" && override.Title != f.Title {
  41. f.Title = override.Title
  42. }
  43. if override.SiteURL != "" && override.SiteURL != f.SiteURL {
  44. f.SiteURL = override.SiteURL
  45. }
  46. if override.FeedURL != "" && override.FeedURL != f.FeedURL {
  47. f.FeedURL = override.FeedURL
  48. }
  49. if override.ScraperRules != "" && override.ScraperRules != f.ScraperRules {
  50. f.ScraperRules = override.ScraperRules
  51. }
  52. if override.RewriteRules != "" && override.RewriteRules != f.RewriteRules {
  53. f.RewriteRules = override.RewriteRules
  54. }
  55. if override.Crawler != f.Crawler {
  56. f.Crawler = override.Crawler
  57. }
  58. if override.Category != nil && override.Category.ID != 0 && override.Category.ID != f.Category.ID {
  59. f.Category.ID = override.Category.ID
  60. }
  61. }
  62. // Feeds is a list of feed
  63. type Feeds []*Feed