Files
blurp/vendor/github.com/adrg/xdg/paths_windows.go
2025-04-28 09:04:50 +02:00

197 lines
5.8 KiB
Go

package xdg
import (
"path/filepath"
"github.com/adrg/xdg/internal/pathutil"
"github.com/adrg/xdg/internal/userdirs"
"golang.org/x/sys/windows"
)
func initDirs(home string) {
kf := initKnownFolders(home)
initBaseDirs(home, kf)
initUserDirs(home, kf)
}
func initBaseDirs(home string, kf *knownFolders) {
// Initialize standard directories.
baseDirs.dataHome = pathutil.EnvPath(envDataHome, kf.localAppData)
baseDirs.data = pathutil.EnvPathList(envDataDirs, kf.roamingAppData, kf.programData)
baseDirs.configHome = pathutil.EnvPath(envConfigHome, kf.localAppData)
baseDirs.config = pathutil.EnvPathList(envConfigDirs, kf.programData, kf.roamingAppData)
baseDirs.stateHome = pathutil.EnvPath(envStateHome, kf.localAppData)
baseDirs.cacheHome = pathutil.EnvPath(envCacheHome, filepath.Join(kf.localAppData, "cache"))
baseDirs.runtime = pathutil.EnvPath(envRuntimeDir, kf.localAppData)
// Initialize non-standard directories.
baseDirs.binHome = pathutil.EnvPath(envBinHome, kf.userProgramFiles)
baseDirs.applications = []string{
kf.programs,
kf.commonPrograms,
kf.programFiles,
kf.programFilesCommon,
kf.userProgramFiles,
kf.userProgramFilesCommon,
}
baseDirs.fonts = []string{
kf.fonts,
filepath.Join(kf.localAppData, "Microsoft", "Windows", "Fonts"),
}
}
func initUserDirs(home string, kf *knownFolders) {
UserDirs.Desktop = pathutil.EnvPath(userdirs.EnvDesktopDir, kf.desktop)
UserDirs.Download = pathutil.EnvPath(userdirs.EnvDownloadDir, kf.downloads)
UserDirs.Documents = pathutil.EnvPath(userdirs.EnvDocumentsDir, kf.documents)
UserDirs.Music = pathutil.EnvPath(userdirs.EnvMusicDir, kf.music)
UserDirs.Pictures = pathutil.EnvPath(userdirs.EnvPicturesDir, kf.pictures)
UserDirs.Videos = pathutil.EnvPath(userdirs.EnvVideosDir, kf.videos)
UserDirs.Templates = pathutil.EnvPath(userdirs.EnvTemplatesDir, kf.templates)
UserDirs.PublicShare = pathutil.EnvPath(userdirs.EnvPublicShareDir, kf.public)
}
type knownFolders struct {
systemDrive string
systemRoot string
programData string
userProfile string
userProfiles string
roamingAppData string
localAppData string
desktop string
downloads string
documents string
music string
pictures string
videos string
templates string
public string
fonts string
programs string
commonPrograms string
programFiles string
programFilesCommon string
userProgramFiles string
userProgramFilesCommon string
}
func initKnownFolders(home string) *knownFolders {
kf := &knownFolders{
userProfile: home,
}
kf.systemDrive = filepath.VolumeName(pathutil.KnownFolder(
windows.FOLDERID_Windows,
[]string{"SystemDrive", "SystemRoot", "windir"},
[]string{home, `C:`},
)) + string(filepath.Separator)
kf.systemRoot = pathutil.KnownFolder(
windows.FOLDERID_Windows,
[]string{"SystemRoot", "windir"},
[]string{filepath.Join(kf.systemDrive, "Windows")},
)
kf.programData = pathutil.KnownFolder(
windows.FOLDERID_ProgramData,
[]string{"ProgramData", "ALLUSERSPROFILE"},
[]string{filepath.Join(kf.systemDrive, "ProgramData")},
)
kf.userProfiles = pathutil.KnownFolder(
windows.FOLDERID_UserProfiles,
nil,
[]string{filepath.Join(kf.systemDrive, "Users")},
)
kf.roamingAppData = pathutil.KnownFolder(
windows.FOLDERID_RoamingAppData,
[]string{"APPDATA"},
[]string{filepath.Join(home, "AppData", "Roaming")},
)
kf.localAppData = pathutil.KnownFolder(
windows.FOLDERID_LocalAppData,
[]string{"LOCALAPPDATA"},
[]string{filepath.Join(home, "AppData", "Local")},
)
kf.desktop = pathutil.KnownFolder(
windows.FOLDERID_Desktop,
nil,
[]string{filepath.Join(home, "Desktop")},
)
kf.downloads = pathutil.KnownFolder(
windows.FOLDERID_Downloads,
nil,
[]string{filepath.Join(home, "Downloads")},
)
kf.documents = pathutil.KnownFolder(
windows.FOLDERID_Documents,
nil,
[]string{filepath.Join(home, "Documents")},
)
kf.music = pathutil.KnownFolder(
windows.FOLDERID_Music,
nil,
[]string{filepath.Join(home, "Music")},
)
kf.pictures = pathutil.KnownFolder(
windows.FOLDERID_Pictures,
nil,
[]string{filepath.Join(home, "Pictures")},
)
kf.videos = pathutil.KnownFolder(
windows.FOLDERID_Videos,
nil,
[]string{filepath.Join(home, "Videos")},
)
kf.templates = pathutil.KnownFolder(
windows.FOLDERID_Templates,
nil,
[]string{filepath.Join(kf.roamingAppData, "Microsoft", "Windows", "Templates")},
)
kf.public = pathutil.KnownFolder(
windows.FOLDERID_Public,
[]string{"PUBLIC"},
[]string{filepath.Join(kf.userProfiles, "Public")},
)
kf.fonts = pathutil.KnownFolder(
windows.FOLDERID_Fonts,
nil,
[]string{filepath.Join(kf.systemRoot, "Fonts")},
)
kf.programs = pathutil.KnownFolder(
windows.FOLDERID_Programs,
nil,
[]string{filepath.Join(kf.roamingAppData, "Microsoft", "Windows", "Start Menu", "Programs")},
)
kf.commonPrograms = pathutil.KnownFolder(
windows.FOLDERID_CommonPrograms,
nil,
[]string{filepath.Join(kf.programData, "Microsoft", "Windows", "Start Menu", "Programs")},
)
kf.programFiles = pathutil.KnownFolder(
windows.FOLDERID_ProgramFiles,
[]string{"ProgramFiles"},
[]string{filepath.Join(kf.systemDrive, "Program Files")},
)
kf.programFilesCommon = pathutil.KnownFolder(
windows.FOLDERID_ProgramFilesCommon,
nil,
[]string{filepath.Join(kf.programFiles, "Common Files")},
)
kf.userProgramFiles = pathutil.KnownFolder(
windows.FOLDERID_UserProgramFiles,
nil,
[]string{
filepath.Join(kf.localAppData, "Programs"),
},
)
kf.userProgramFilesCommon = pathutil.KnownFolder(
windows.FOLDERID_UserProgramFilesCommon,
nil,
[]string{
filepath.Join(kf.userProgramFiles, "Common"),
},
)
return kf
}