Rework the main datastructure from list to map

This commit is contained in:
2024-08-13 09:40:02 +02:00
parent 4b9f968b49
commit f5eb5d9205

58
main.go
View File

@@ -54,39 +54,27 @@ func main() {
Error.Fatalf("Error reading database config: %v", err)
return
}
log.Printf("Loaded %d entries", len(config.Entries))
cleanConfig := CleanConfig(config)
log.Printf("%d after cleaning config", len(cleanConfig))
cleaned := 0
var validEntries []*Entry = make([]*Entry, 0, len(config.Entries))
for _, v := range config.Entries {
relevantPath := v.FileURI
if relevantPath == "" {
relevantPath = v.FolderURI
}
relevantPath = strings.TrimPrefix(relevantPath, "file://")
relevantPath = strings.TrimPrefix(relevantPath, "/")
decoded, err := url.QueryUnescape(relevantPath)
if err != nil {
Error.Printf("Error decoding URI %s: %v", v.FileURI, err)
continue
}
relevantPath = path.Clean(decoded)
file, err := os.Open(relevantPath)
for ipath := range cleanConfig {
file, err := os.Open(ipath)
if err != nil {
if os.IsNotExist(err) {
log.Printf("Discarding non existing directory %s", relevantPath)
log.Printf("Discarding non existing directory %s", ipath)
delete(cleanConfig, ipath)
cleaned++
} else {
// Maybe we fail to open it for some other reason...
// Could be it still does exist
Error.Printf("Error opening file %s: %v", relevantPath, err)
validEntries = append(validEntries, &v)
Error.Printf("Error opening file %s: %v", ipath, err)
continue
}
continue
}
file.Close()
validEntries = append(validEntries, &v)
// escaped := url.QueryEscape(relevantPath)
// escaped = strings.ReplaceAll(escaped, "%2F", "/")
@@ -94,7 +82,7 @@ func main() {
// escaped = "file:///" + escaped
// log.Printf("%#v", escaped)
}
log.Printf("Cleaned %d invalid entries, %d valid entries remain", cleaned, len(validEntries))
log.Printf("Cleaned %d invalid entries, %d valid entries remain", cleaned, len(cleanConfig))
added := 0
for _, folder := range scanFolders {
@@ -111,11 +99,16 @@ func main() {
newEntry := Entry{
FolderURI: path.Clean(path.Join(folder, fileEntry.Name())),
}
validEntries = append(validEntries, &newEntry)
_, exists := cleanConfig[newEntry.FolderURI]
if exists {
log.Printf("Folder %s already exists in config", newEntry.FolderURI)
continue
}
cleanConfig[newEntry.FolderURI] = &newEntry
added++
}
}
log.Printf("Added %d new entries from scan folders, now %d total", added, len(validEntries))
log.Printf("Added %d new entries from scan folders, now %d total", added, len(cleanConfig))
}
func ReadDBConfig() (Config, error) {
@@ -141,6 +134,25 @@ func ReadDBConfig() (Config, error) {
}
return res, nil
}
func CleanConfig(config Config) map[string]*Entry {
var res = make(map[string]*Entry)
for _, entry := range config.Entries {
relevantPath := entry.FileURI
if relevantPath == "" {
relevantPath = entry.FolderURI
}
relevantPath = strings.TrimPrefix(relevantPath, "file://")
relevantPath = strings.TrimPrefix(relevantPath, "/")
decoded, err := url.QueryUnescape(relevantPath)
if err != nil {
Error.Printf("Error decoding URI %s: %v", relevantPath, err)
continue
}
relevantPath = path.Clean(decoded)
res[relevantPath] = &entry
}
return res
}
func WriteDBConfig(config Config) error {
conn, err := sql.Open("sqlite3", projectsFile)