base_dirs.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package xdg
  2. import (
  3. "os"
  4. "github.com/adrg/xdg/internal/pathutil"
  5. )
  6. // XDG Base Directory environment variables.
  7. const (
  8. envDataHome = "XDG_DATA_HOME"
  9. envDataDirs = "XDG_DATA_DIRS"
  10. envConfigHome = "XDG_CONFIG_HOME"
  11. envConfigDirs = "XDG_CONFIG_DIRS"
  12. envStateHome = "XDG_STATE_HOME"
  13. envCacheHome = "XDG_CACHE_HOME"
  14. envRuntimeDir = "XDG_RUNTIME_DIR"
  15. // Non-standard.
  16. envBinHome = "XDG_BIN_HOME"
  17. )
  18. type baseDirectories struct {
  19. dataHome string
  20. data []string
  21. configHome string
  22. config []string
  23. stateHome string
  24. cacheHome string
  25. runtime string
  26. // Non-standard.
  27. binHome string
  28. fonts []string
  29. applications []string
  30. }
  31. func (bd baseDirectories) dataFile(relPath string) (string, error) {
  32. return pathutil.Create(relPath, append([]string{bd.dataHome}, bd.data...))
  33. }
  34. func (bd baseDirectories) configFile(relPath string) (string, error) {
  35. return pathutil.Create(relPath, append([]string{bd.configHome}, bd.config...))
  36. }
  37. func (bd baseDirectories) stateFile(relPath string) (string, error) {
  38. return pathutil.Create(relPath, []string{bd.stateHome})
  39. }
  40. func (bd baseDirectories) cacheFile(relPath string) (string, error) {
  41. return pathutil.Create(relPath, []string{bd.cacheHome})
  42. }
  43. func (bd baseDirectories) runtimeFile(relPath string) (string, error) {
  44. var paths []string
  45. for _, p := range pathutil.Unique([]string{bd.runtime, os.TempDir()}) {
  46. if pathutil.Exists(p) {
  47. paths = append(paths, p)
  48. }
  49. }
  50. return pathutil.Create(relPath, paths)
  51. }
  52. func (bd baseDirectories) searchDataFile(relPath string) (string, error) {
  53. return pathutil.Search(relPath, append([]string{bd.dataHome}, bd.data...))
  54. }
  55. func (bd baseDirectories) searchConfigFile(relPath string) (string, error) {
  56. return pathutil.Search(relPath, append([]string{bd.configHome}, bd.config...))
  57. }
  58. func (bd baseDirectories) searchStateFile(relPath string) (string, error) {
  59. return pathutil.Search(relPath, []string{bd.stateHome})
  60. }
  61. func (bd baseDirectories) searchCacheFile(relPath string) (string, error) {
  62. return pathutil.Search(relPath, []string{bd.cacheHome})
  63. }
  64. func (bd baseDirectories) searchRuntimeFile(relPath string) (string, error) {
  65. return pathutil.Search(relPath, pathutil.Unique([]string{bd.runtime, os.TempDir()}))
  66. }