-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrules.go
More file actions
45 lines (39 loc) · 1.38 KB
/
rules.go
File metadata and controls
45 lines (39 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package main
import (
"encoding/json"
"os"
)
// DefaultRules определяет маппинг категорий и расширений
var DefaultRules = map[string][]string {
"Pictures": {".jpg", ".png", ".gif", ".jpeg", ".svg", ".webp"},
"Music": {".mp3", ".wav", ".flac", ".ogg", ".aac"},
"Media": {".mp4", ".mov", ".avi", ".mkv", ".webm"},
"Docs": {".pdf", ".docx", ".doc", ".txt", ".xlsx", ".xls", ".pptx"},
"Archive": {".zip", ".rar", ".7z", ".tar", ".gz", ".bz2"},
"Exec": {".exe", ".msi", ".dmg", ".pkg"},
}
// getConfig пытается прочитать config.json, иначе возвращает дефолт
func getConfig(filename string) map[string][]string {
file, err := os.ReadFile(filename)
if err != nil {
// Если файла нет, возвращаем дефолт
return DefaultRules
}
var config map[string][]string
if err := json.Unmarshal(file, &config); err != nil {
// Если файл битый, тоже лучше откатиться на дефолт
return DefaultRules
}
return config
}
// ExtensionToCategory создаёт обратный маппинг для быстрого поиска
func ExtensionToCategory() map[string]string {
rules := getConfig("config.json")
res := make(map[string]string)
for category, exts := range rules {
for _, ext := range exts {
res[ext] = category
}
}
return res
}