enbas/internal/utilities/directories.go

79 lines
1.8 KiB
Go
Raw Normal View History

package utilities
import (
"errors"
"fmt"
"os"
"path/filepath"
"codeflow.dananglin.me.uk/apollo/enbas/internal/info"
)
const (
cacheMediaDir = "media"
cacheStatusesDir = "statuses"
)
func CalculateConfigDir(configDir string) (string, error) {
if configDir != "" {
return configDir, nil
}
configRoot, err := os.UserConfigDir()
if err != nil {
return "", fmt.Errorf("unable to get your default config diretory: %w", err)
}
return filepath.Join(configRoot, info.ApplicationName), nil
}
func CalculateMediaCacheDir(cacheRoot, instance string) (string, error) {
cacheDir, err := calculateCacheDir(cacheRoot, instance)
if err != nil {
return "", fmt.Errorf("unable to calculate the cache directory: %w", err)
}
return filepath.Join(cacheDir, cacheMediaDir), nil
}
func CalculateStatusesCacheDir(cacheRoot, instance string) (string, error) {
cacheDir, err := calculateCacheDir(cacheRoot, instance)
if err != nil {
return "", fmt.Errorf("unable to calculate the cache directory: %w", err)
}
return filepath.Join(cacheDir, cacheStatusesDir), nil
}
func calculateCacheDir(cacheRoot, instance string) (string, error) {
fqdn := GetFQDN(instance)
if cacheRoot != "" {
return filepath.Join(cacheRoot, fqdn), nil
}
cacheRoot, err := os.UserCacheDir()
if err != nil {
return "", fmt.Errorf("unable to get your default cache directory: %w", err)
}
return filepath.Join(cacheRoot, info.ApplicationName, fqdn), nil
}
func EnsureDirectory(dir string) error {
if _, err := os.Stat(dir); err != nil {
if errors.Is(err, os.ErrNotExist) {
if err := os.MkdirAll(dir, 0o750); err != nil {
return fmt.Errorf("unable to create %s: %w", dir, err)
}
} else {
return fmt.Errorf(
"received an unknown error after getting the directory information: %w",
err,
)
}
}
return nil
}