From 07d85c0bfc82b5df7366d3810c95aa8b959837a4 Mon Sep 17 00:00:00 2001 From: nytpu Date: Tue, 16 Mar 2021 22:43:18 -0600 Subject: 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. --- fetch/fetch.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 fetch/fetch.go (limited to 'fetch/fetch.go') 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 . + +// 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 +} -- cgit v1.2.3