fckeuspy-go/vendor/fyne.io/fyne/v2/dialog/file_windows.go

131 lines
2.8 KiB
Go

package dialog
import (
"os"
"syscall"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/storage"
"fyne.io/fyne/v2/theme"
)
func driveMask() uint32 {
dll, err := syscall.LoadLibrary("kernel32.dll")
if err != nil {
fyne.LogError("Error loading kernel32.dll", err)
return 0
}
handle, err := syscall.GetProcAddress(dll, "GetLogicalDrives")
if err != nil {
fyne.LogError("Could not find GetLogicalDrives call", err)
return 0
}
ret, _, err := syscall.Syscall(uintptr(handle), 0, 0, 0, 0)
if err != syscall.Errno(0) { // for some reason Syscall returns something not nil on success
fyne.LogError("Error calling GetLogicalDrives", err)
return 0
}
return uint32(ret)
}
func listDrives() []string {
var drives []string
mask := driveMask()
for i := 0; i < 26; i++ {
if mask&1 == 1 {
letter := string('A' + rune(i))
drives = append(drives, letter+":")
}
mask >>= 1
}
return drives
}
func (f *fileDialog) getPlaces() []favoriteItem {
drives := listDrives()
places := make([]favoriteItem, len(drives))
for i, drive := range drives {
driveRoot := drive + string(os.PathSeparator) // capture loop var
driveRootURI, _ := storage.ListerForURI(storage.NewURI("file://" + driveRoot))
places[i] = favoriteItem{
drive,
theme.StorageIcon(),
driveRootURI,
}
}
return places
}
func isHidden(file fyne.URI) bool {
if file.Scheme() != "file" {
fyne.LogError("Cannot check if non file is hidden", nil)
return false
}
path := file.String()[len(file.Scheme())+3:]
point, err := syscall.UTF16PtrFromString(path)
if err != nil {
fyne.LogError("Error making string pointer", err)
return false
}
attr, err := syscall.GetFileAttributes(point)
if err != nil {
fyne.LogError("Error getting file attributes", err)
return false
}
return attr&syscall.FILE_ATTRIBUTE_HIDDEN != 0
}
func hideFile(filename string) (err error) {
// git does not preserve windows hidden flag so we have to set it.
filenameW, err := syscall.UTF16PtrFromString(filename)
if err != nil {
return err
}
return syscall.SetFileAttributes(filenameW, syscall.FILE_ATTRIBUTE_HIDDEN)
}
func fileOpenOSOverride(*FileDialog) bool {
return false
}
func fileSaveOSOverride(*FileDialog) bool {
return false
}
func getFavoriteLocations() (map[string]fyne.ListableURI, error) {
homeDir, err := os.UserHomeDir()
if err != nil {
return nil, err
}
homeURI := storage.NewFileURI(homeDir)
favoriteNames := getFavoriteOrder()
home, _ := storage.ListerForURI(homeURI)
favoriteLocations := map[string]fyne.ListableURI{
"Home": home,
}
for _, favName := range favoriteNames {
uri, err1 := storage.Child(homeURI, favName)
if err1 != nil {
err = err1
continue
}
listURI, err1 := storage.ListerForURI(uri)
if err1 != nil {
err = err1
continue
}
favoriteLocations[favName] = listURI
}
return favoriteLocations, err
}