fckeuspy-go/vendor/fyne.io/fyne/v2/app/preferences_nonweb.go

68 lines
1.4 KiB
Go

//go:build !wasm
package app
import (
"io"
"os"
"path/filepath"
)
func (p *preferences) storageWriter() (writeSyncCloser, error) {
return p.storageWriterForPath(p.storagePath())
}
func (p *preferences) storageReader() (io.ReadCloser, error) {
return p.storageReaderForPath(p.storagePath())
}
func (p *preferences) storageWriterForPath(path string) (writeSyncCloser, error) {
err := os.MkdirAll(filepath.Dir(path), 0700)
if err != nil { // this is not an exists error according to docs
return nil, err
}
file, err := os.Create(path)
if err != nil {
if !os.IsExist(err) {
return nil, err
}
file, err = os.Open(path) // #nosec
if err != nil {
return nil, err
}
}
return file, nil
}
func (p *preferences) storageReaderForPath(path string) (io.ReadCloser, error) {
file, err := os.Open(path) // #nosec
if err != nil {
if os.IsNotExist(err) {
if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil {
return nil, err
}
return nil, errEmptyPreferencesStore
}
return nil, err
}
return file, nil
}
// the following are only used in tests to save preferences to a tmp file
func (p *preferences) saveToFile(path string) error {
file, err := p.storageWriterForPath(path)
if err != nil {
return err
}
return p.saveToStorage(file)
}
func (p *preferences) loadFromFile(path string) error {
file, err := p.storageReaderForPath(path)
if err != nil {
return err
}
return p.loadFromStorage(file)
}