diff options
Diffstat (limited to 'fetch/fetch.go')
| -rw-r--r-- | fetch/fetch.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/fetch/fetch.go b/fetch/fetch.go new file mode 100644 index 0000000..5c6809a --- /dev/null +++ b/fetch/fetch.go @@ -0,0 +1,54 @@ +// Copyright (C) 2021 nytpu +// SPDX-License-Identifier: AGPL-3.0-or-later +// For more license details, see LICENSE or <https://www.gnu.org/licenses/agpl-3.0.html>. + +// 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(feed *core.Feed) error { + // TODO + return nil +} + +// UpdatePage will check an existing core.Page for updages +func UpdatePage(page *core.Page) error { + // TODO + return nil +} |
