From f5eb5d9205cb2c93836c658ea7879a1af4dadd60 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 13 Aug 2024 09:40:02 +0200 Subject: [PATCH] Rework the main datastructure from list to map --- main.go | 58 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/main.go b/main.go index 0e5c80f..d14446c 100644 --- a/main.go +++ b/main.go @@ -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)