diff options
Diffstat (limited to 'backend/cmd')
| -rw-r--r-- | backend/cmd/serve.go | 62 |
1 files changed, 3 insertions, 59 deletions
diff --git a/backend/cmd/serve.go b/backend/cmd/serve.go index 30d0702..e2d2df5 100644 --- a/backend/cmd/serve.go +++ b/backend/cmd/serve.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "embed" - "fmt" "log" "net/http" "os" @@ -20,78 +19,23 @@ import ( "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" - "github.com/mmcdole/gofeed" "github.com/vektah/gqlparser/v2/ast" "undef.ninja/x/feedaka/auth" "undef.ninja/x/feedaka/config" "undef.ninja/x/feedaka/db" + "undef.ninja/x/feedaka/feed" "undef.ninja/x/feedaka/graphql" "undef.ninja/x/feedaka/graphql/resolver" ) func fetchOneFeed(feedID int64, url string, ctx context.Context, queries *db.Queries) error { log.Printf("Fetching %s...\n", url) - fp := gofeed.NewParser() - ctx, cancel := context.WithTimeout(ctx, 10*time.Second) - defer cancel() - feed, err := fp.ParseURLWithContext(url, ctx) - if err != nil { - return fmt.Errorf("Failed to fetch %s: %v\n", url, err) - } - err = queries.UpdateFeedMetadata(ctx, db.UpdateFeedMetadataParams{ - Title: feed.Title, - FetchedAt: time.Now().UTC().Format(time.RFC3339), - ID: feedID, - }) - if err != nil { - return err - } - // Get GUIDs for this feed (for updating existing articles) - guids, err := queries.GetArticleGUIDsByFeed(ctx, feedID) + f, err := feed.Fetch(ctx, url) if err != nil { return err } - existingFeedGUIDs := make(map[string]bool) - for _, guid := range guids { - existingFeedGUIDs[guid] = true - } - for _, item := range feed.Items { - if existingFeedGUIDs[item.GUID] { - // Article exists in this feed, update it - err := queries.UpdateArticle(ctx, db.UpdateArticleParams{ - Title: item.Title, - Url: item.Link, - FeedID: feedID, - Guid: item.GUID, - }) - if err != nil { - return err - } - } else { - // Check if article with same GUID exists globally (in any feed) - exists, err := queries.CheckArticleExistsByGUID(ctx, item.GUID) - if err != nil { - return err - } - if exists == 1 { - // Article already exists in another feed, skip - continue - } - // Create new article - _, err = queries.CreateArticle(ctx, db.CreateArticleParams{ - FeedID: feedID, - Guid: item.GUID, - Title: item.Title, - Url: item.Link, - IsRead: 0, - }) - if err != nil { - return err - } - } - } - return nil + return feed.Sync(ctx, queries, feedID, f) } func listFeedsToBeFetched(ctx context.Context, queries *db.Queries) (map[int64]string, error) { |
