Files
Quic/api/utils/media_cache.go
T

74 lines
1.8 KiB
Go

package utils
import (
"os"
"path"
"strconv"
"sync"
"github.com/pkg/errors"
)
// CachePathForMedia is a low-level implementation for Media.CachePath()
func CachePathForMedia(albumID int, mediaID int) (string, error) {
// Make root cache dir if not exists
if _, err := os.Stat(MediaCachePath()); os.IsNotExist(err) {
if err := os.Mkdir(MediaCachePath(), os.ModePerm); err != nil {
return "", errors.Wrap(err, "could not make root image cache directory")
}
}
// Make album cache dir if not exists
albumCachePath := path.Join(MediaCachePath(), strconv.Itoa(int(albumID)))
if _, err := os.Stat(albumCachePath); os.IsNotExist(err) {
if err := os.Mkdir(albumCachePath, os.ModePerm); err != nil {
return "", errors.Wrap(err, "could not make album image cache directory")
}
}
// Make photo cache dir if not exists
photoCachePath := path.Join(albumCachePath, strconv.Itoa(int(mediaID)))
if _, err := os.Stat(photoCachePath); os.IsNotExist(err) {
if err := os.Mkdir(photoCachePath, os.ModePerm); err != nil {
return "", errors.Wrap(err, "could not make photo image cache directory")
}
}
return photoCachePath, nil
}
var (
testCachePath string = ""
testCachePathLocker sync.RWMutex
)
func GetTestCachePath() string {
testCachePathLocker.RLock()
defer testCachePathLocker.RUnlock()
return testCachePath
}
func ConfigureTestCache(tmpDir string) {
testCachePathLocker.Lock()
defer testCachePathLocker.Unlock()
testCachePath = tmpDir
}
// MediaCachePath returns the path for where the media cache is located on the file system
func MediaCachePath() string {
testCachePathLocker.RLock()
cachedPath := testCachePath
testCachePathLocker.RUnlock()
if cachedPath != "" {
return cachedPath
}
photoCache := EnvMediaCachePath.GetValue()
if photoCache == "" {
photoCache = "./media_cache"
}
return photoCache
}