Rework the main datastructure from list to map
This commit is contained in:
58
main.go
58
main.go
@@ -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)
|
||||||
|
Reference in New Issue
Block a user