diff options
| author | nytpu <alex@nytpu.com> | 2021-03-16 22:43:18 -0600 |
|---|---|---|
| committer | nytpu <alex@nytpu.com> | 2021-03-16 22:43:18 -0600 |
| commit | 07d85c0bfc82b5df7366d3810c95aa8b959837a4 (patch) | |
| tree | 8a915fc55573dd9bb0bf0ff10d7e9666a913e7fe /fetch/fetch.go | |
| parent | f6313f44653ccb0d6e7b92319ade907436802e72 (diff) | |
implement New* routines for fetching and creating new feeds/pages.
Also includes routines for fetching gemini, http, and gopher resources.
TODO: add Update* routines to update existing feeds/pages.
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 +} |
