caching icons automatically
This commit is contained in:
parent
e627d02d08
commit
808ce89dfc
@ -136,3 +136,12 @@ func (rc *Config) LoadConfigFile(file string) error {
|
|||||||
|
|
||||||
return toml.Unmarshal(content, rc)
|
return toml.Unmarshal(content, rc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Config) Init() error {
|
||||||
|
for i, w := range c.Template.Websites {
|
||||||
|
c.Template.Websites[i].Cache()
|
||||||
|
fmt.Println(w.ImageUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -1,7 +1,76 @@
|
|||||||
package rendering
|
package rendering
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/sha1"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
type Website struct {
|
type Website struct {
|
||||||
Url string
|
Url string
|
||||||
Name string
|
Name string
|
||||||
ImageUrl string
|
ImageUrl string
|
||||||
|
IsFetched bool
|
||||||
|
}
|
||||||
|
|
||||||
|
const CacheUrl = "cache"
|
||||||
|
|
||||||
|
func GetCacheDir() (string, error) {
|
||||||
|
baseDir, err := os.UserCacheDir()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
cacheDir := filepath.Join(baseDir, "startpage")
|
||||||
|
err = os.MkdirAll(cacheDir, 0o755)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return cacheDir, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func hashUrl(url string) string {
|
||||||
|
h := sha1.New()
|
||||||
|
io.WriteString(h, url)
|
||||||
|
return hex.EncodeToString(h.Sum(nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *Website) Cache() error {
|
||||||
|
if w.IsFetched {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheDir, err := GetCacheDir()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filename := hashUrl(w.ImageUrl)
|
||||||
|
fmt.Println(w.ImageUrl + " => " + filename)
|
||||||
|
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()
|
||||||
|
|
||||||
|
_, err = io.Copy(file, resp.Body)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
w.ImageUrl, _ = url.JoinPath(CacheUrl, filename)
|
||||||
|
w.IsFetched = true
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
13
main.go
13
main.go
@ -74,6 +74,11 @@ func main() {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = CurrentConfig.Init()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
err = FetchDiyHrt()
|
err = FetchDiyHrt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
@ -81,6 +86,14 @@ func main() {
|
|||||||
|
|
||||||
e := echo.New()
|
e := echo.New()
|
||||||
|
|
||||||
|
// statically serve the file
|
||||||
|
cacheDir, err := rendering.GetCacheDir()
|
||||||
|
if err == nil {
|
||||||
|
e.Static("/cache", cacheDir)
|
||||||
|
} else {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
// https://echo.labstack.com/docs/cookbook/embed-resources
|
// https://echo.labstack.com/docs/cookbook/embed-resources
|
||||||
staticHandler := http.FileServer(getFileSystem())
|
staticHandler := http.FileServer(getFileSystem())
|
||||||
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/", staticHandler)))
|
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/", staticHandler)))
|
||||||
|
@ -1 +1 @@
|
|||||||
exit status 1exit status 1
|
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
|
Loading…
x
Reference in New Issue
Block a user