1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-05-15 00:32:47 -04:00
Files
DankMaterialShell/core/internal/desktop/parser.go
T
bbedward 018795125e app picker: extend App Picker to integrate with mime overrides
- Adds "DMS Opener" as an option (dms-open.desktop)
- Add mime type GO utils
- Add rememberance to App Picker modal
2026-05-14 13:06:22 -04:00

81 lines
1.4 KiB
Go

package desktop
import (
"bufio"
"bytes"
"strings"
)
type group struct {
keys map[string]string
}
func parseGroups(data []byte) map[string]*group {
groups := make(map[string]*group)
var current *group
scanner := bufio.NewScanner(bytes.NewReader(data))
scanner.Buffer(make([]byte, 64*1024), 1024*1024)
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if line == "" || line[0] == '#' {
continue
}
if line[0] == '[' && strings.HasSuffix(line, "]") {
name := line[1 : len(line)-1]
g, ok := groups[name]
if !ok {
g = &group{keys: make(map[string]string)}
groups[name] = g
}
current = g
continue
}
if current == nil {
continue
}
eq := strings.IndexByte(line, '=')
if eq <= 0 {
continue
}
key := strings.TrimSpace(line[:eq])
if bracket := strings.IndexByte(key, '['); bracket > 0 {
key = key[:bracket]
}
if _, ok := current.keys[key]; ok {
continue
}
current.keys[key] = strings.TrimSpace(line[eq+1:])
}
return groups
}
func splitList(value string) []string {
if value == "" {
return nil
}
parts := strings.Split(value, ";")
out := make([]string, 0, len(parts))
for _, p := range parts {
p = strings.TrimSpace(p)
if p == "" {
continue
}
out = append(out, p)
}
return out
}
func parseBool(value string) bool {
switch strings.ToLower(strings.TrimSpace(value)) {
case "true", "1", "yes":
return true
}
return false
}