// Copyright (C) 2021 nytpu // SPDX-License-Identifier: AGPL-3.0-or-later // For more license details, see LICENSE or . // package fetch implements routines for fetching gemini, gopher, and http // resources and parsing feed formats package fetch import ( "fmt" "net/url" "golang.nytpu.com/comitium/core" ) // NewFeed will fetch and create a new core.Feed given any url func NewFeed(remoteURL *url.URL, title string) (*core.Feed, error) { switch remoteURL.Scheme { case "gemini": return newGeminiFeed(remoteURL, title) case "http", "https": return newHTTPFeed(remoteURL, title) case "gopher", "gophers": return newGopherFeed(remoteURL, title) default: return nil, fmt.Errorf("Unsupported protocol '%s'", remoteURL.Scheme) } } // NewPage will fetch and create a new core.Page given any url func NewPage(remoteURL *url.URL, title string) (*core.Page, error) { switch remoteURL.Scheme { case "gemini": return newGeminiPage(remoteURL, title) case "http", "https": return newHTTPPage(remoteURL, title) case "gopher", "gophers": return newGopherPage(remoteURL, title) default: return nil, fmt.Errorf("Unsupported protocol '%s'", remoteURL.Scheme) } } // UpdateFeed will check an existing core.Feed for updates func UpdateFeed(f *core.Feed) error { switch f.FeedLink.Scheme { case "gemini": // return updateGeminiFeed(f) // TODO fallthrough case "http", "https": // return updateHTTPFeed(f) // TODO fallthrough case "gopher", "gophers": return updateGopherFeed(f) default: return fmt.Errorf("Unsupported protocol '%s'", f.FeedLink.Scheme) } return nil } // UpdatePage will check an existing core.Page for updages func UpdatePage(p *core.Page) error { switch p.Link.Scheme { case "gemini": return updateGeminiPage(p) case "http", "https": return updateHTTPPage(p) case "gopher", "gophers": return updateGopherPage(p) default: return fmt.Errorf("Unsupported protocol '%s'", p.Link.Scheme) } return nil }