1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00
Files
DankMaterialShell/core/internal/screenshot/state.go
2025-12-05 14:59:34 -05:00

66 lines
1.2 KiB
Go

package screenshot
import (
"encoding/json"
"os"
"path"
"path/filepath"
)
type PersistentState struct {
LastRegion Region `json:"last_region"`
}
func getStateFilePath() string {
cacheDir, err := os.UserCacheDir()
if err != nil {
cacheDir = path.Join(os.Getenv("HOME"), ".cache")
}
return filepath.Join(cacheDir, "dms", "screenshot-state.json")
}
func LoadState() (*PersistentState, error) {
path := getStateFilePath()
data, err := os.ReadFile(path)
if err != nil {
if os.IsNotExist(err) {
return &PersistentState{}, nil
}
return nil, err
}
var state PersistentState
if err := json.Unmarshal(data, &state); err != nil {
return &PersistentState{}, nil
}
return &state, nil
}
func SaveState(state *PersistentState) error {
path := getStateFilePath()
dir := filepath.Dir(path)
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
data, err := json.MarshalIndent(state, "", " ")
if err != nil {
return err
}
return os.WriteFile(path, data, 0644)
}
func GetLastRegion() Region {
state, err := LoadState()
if err != nil {
return Region{}
}
return state.LastRegion
}
func SaveLastRegion(r Region) error {
state, _ := LoadState()
state.LastRegion = r
return SaveState(state)
}