197 lines
5.8 KiB
Go
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
|
|
}
|