From 60f5495f79ff0e0d90b710f1d65f5250bc9b4d8b Mon Sep 17 00:00:00 2001 From: Hazel Noack Date: Tue, 15 Jul 2025 17:46:34 +0200 Subject: [PATCH] skipping file download if already downloaded --- internal/rendering/website_cards.go | 32 +++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/internal/rendering/website_cards.go b/internal/rendering/website_cards.go index f928a3d..5c8ff8c 100644 --- a/internal/rendering/website_cards.go +++ b/internal/rendering/website_cards.go @@ -3,6 +3,7 @@ package rendering import ( "crypto/sha1" "encoding/hex" + "errors" "io" "net/http" "net/url" @@ -50,24 +51,29 @@ func (w *Website) Cache() error { filename := hashUrl(w.ImageUrl) + filepath.Ext(w.ImageUrl) targetPath := filepath.Join(cacheDir, filename) - resp, err := http.Get(w.ImageUrl) - if err != nil { - return err - } - defer resp.Body.Close() - file, err := os.Create(targetPath) - if err != nil { - return err - } - defer file.Close() + // if the file was already downloaded it doesn't need to be downloaded again + if _, err := os.Stat(targetPath); errors.Is(err, os.ErrNotExist) { + resp, err := http.Get(w.ImageUrl) + if err != nil { + return err + } + defer resp.Body.Close() - _, err = io.Copy(file, resp.Body) + file, err := os.Create(targetPath) + if err != nil { + return err + } + defer file.Close() - if err != nil { - return err + _, err = io.Copy(file, resp.Body) + + if err != nil { + return err + } } + // set the value in the struct to the current file w.ImageUrl, _ = url.JoinPath(CacheUrl, filename) w.IsFetched = true return nil