1
0
Fork 0
mirror of https://github.com/Luzifer/staticmap.git synced 2024-10-18 07:34:23 +00:00
staticmap/cache_filesystem.go
Knut Ahlers 4414239854
Initial version
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2017-06-27 22:49:53 +02:00

42 lines
943 B
Go

package main
import (
"bytes"
"io"
"io/ioutil"
"os"
"path"
"time"
"github.com/golang/geo/s2"
)
func filesystemCache(center s2.LatLng, zoom int, marker []marker, x, y int) (io.ReadCloser, error) {
cacheKey := cacheKeyHelper(center, zoom, marker, x, y)
cacheFileName := path.Join(cfg.CacheDir, cacheKey[0:2], cacheKey+".png")
if info, err := os.Stat(cacheFileName); err == nil && info.ModTime().Add(cfg.ForceCache).After(time.Now()) {
return os.Open(cacheFileName)
}
// No cache hit, generate a new map
mapReader, err := generateMap(center, zoom, marker, x, y)
if err != nil {
return nil, err
}
buf := new(bytes.Buffer)
if _, err := io.Copy(buf, mapReader); err != nil {
return nil, err
}
if err := os.MkdirAll(path.Dir(cacheFileName), 0755); err != nil {
return nil, err
}
if err := ioutil.WriteFile(cacheFileName, buf.Bytes(), 0644); err != nil {
return nil, err
}
return ioutil.NopCloser(buf), err
}