74 lines
1.8 KiB
Go
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
|
|
}
|