diff --git a/cmd/root.go b/cmd/root.go index 12e6245..15b1abc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -9,6 +9,7 @@ import ( "os" "regexp" "strconv" + "io" "github.com/charmbracelet/glamour" "github.com/eliukblau/pixterm/pkg/ansimage" @@ -36,27 +37,46 @@ var mdImgRegex = var mdImgPlaceholderRegex = regexp.MustCompile(`(?m)\$\$\$([0-9]*)\$`) - func MakeReadable(rawUrl *string) (string, string, error) { - jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) + + urlUrl, err := url.Parse(*rawUrl) if err != nil { return "", "", err } - scraper, err := scraper.NewTransport(http.DefaultTransport) - client := &http.Client{ - Jar: jar, - Transport: scraper, + var reader io.ReadCloser + switch(urlUrl.Scheme) { + case "http", "https": + reader, err = getReaderFromHTTP(rawUrl) + default: + reader, err = getReaderFromFile(rawUrl) } + defer reader.Close() - urlUrl, err := url.Parse(*rawUrl) + + article, err := readability.FromReader(reader, urlUrl) if err != nil { return "", "", err } + return article.Title, article.Content, nil +} + +func getReaderFromHTTP(rawUrl *string) (io.ReadCloser, error) { + jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) + if err != nil { + return nil, err + } + + scraper, err := scraper.NewTransport(http.DefaultTransport) + client := &http.Client{ + Jar: jar, + Transport: scraper, + } + req, err := http.NewRequest("GET", *rawUrl, nil) if err != nil { - return "", "", err + return nil, err } req.Header.Set("User-Agent", @@ -71,16 +91,15 @@ func MakeReadable(rawUrl *string) (string, string, error) { resp, err := client.Do(req) if err != nil { - return "", "", err + return nil, err } - defer resp.Body.Close() + // defer resp.Body.Close() - article, err := readability.FromReader(resp.Body, urlUrl) - if err != nil { - return "", "", err - } + return resp.Body, nil +} - return article.Title, article.Content, nil +func getReaderFromFile(rawUrl *string) (io.ReadCloser, error) { + return os.Open(*rawUrl) } func HTMLtoMarkdown(html *string) (string, error) { @@ -171,7 +190,7 @@ func RenderImg(title, md *string) (string, error) { } var rootCmd = &cobra.Command{ - Use: "reader ", + Use: "reader ", Short: "Reader is a command line web reader", Long: "A minimal command line reader offering better readability of web " + "pages on the CLI.",