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) Error.Fatalf("Error reading database config: %v", err)
return return
} }
log.Printf("Loaded %d entries", len(config.Entries))
cleanConfig := CleanConfig(config)
log.Printf("%d after cleaning config", len(cleanConfig))
cleaned := 0 cleaned := 0
var validEntries []*Entry = make([]*Entry, 0, len(config.Entries)) for ipath := range cleanConfig {
for _, v := range config.Entries { file, err := os.Open(ipath)
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)
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
log.Printf("Discarding non existing directory %s", relevantPath) log.Printf("Discarding non existing directory %s", ipath)
delete(cleanConfig, ipath)
cleaned++ cleaned++
} else { } else {
// Maybe we fail to open it for some other reason... // Maybe we fail to open it for some other reason...
// Could be it still does exist // Could be it still does exist
Error.Printf("Error opening file %s: %v", relevantPath, err) Error.Printf("Error opening file %s: %v", ipath, err)
validEntries = append(validEntries, &v)
continue continue
} }
continue continue
} }
file.Close() file.Close()
validEntries = append(validEntries, &v)
// escaped := url.QueryEscape(relevantPath) // escaped := url.QueryEscape(relevantPath)
// escaped = strings.ReplaceAll(escaped, "%2F", "/") // escaped = strings.ReplaceAll(escaped, "%2F", "/")
@@ -94,7 +82,7 @@ func main() {
// escaped = "file:///" + escaped // escaped = "file:///" + escaped
// log.Printf("%#v", 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 added := 0
for _, folder := range scanFolders { for _, folder := range scanFolders {
@@ -111,11 +99,16 @@ func main() {
newEntry := Entry{ newEntry := Entry{
FolderURI: path.Clean(path.Join(folder, fileEntry.Name())), 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++ 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) { func ReadDBConfig() (Config, error) {
@@ -141,6 +134,25 @@ func ReadDBConfig() (Config, error) {
} }
return res, nil 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 { func WriteDBConfig(config Config) error {
conn, err := sql.Open("sqlite3", projectsFile) conn, err := sql.Open("sqlite3", projectsFile)