From 9a8f1c3dbd8b7414d431767bcc9f76450e013fd9 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 13 Aug 2024 09:24:42 +0200 Subject: [PATCH] Implement cleaning existing config --- main.go | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- types.go | 18 +++++++---- 2 files changed, 106 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 4d89651..35e09be 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,16 @@ package main import ( + "database/sql" + "encoding/json" "fmt" "io" "log" + "net/url" "os" - "database/sql" + "path" + "strings" + _ "github.com/mattn/go-sqlite3" ) @@ -28,6 +33,92 @@ func init() { const projectsFile = `C:\Users\Administrator\Seafile\VSCode\Code\User\globalStorage\state.vscdb` -func main() { - +var scanFolders []string = []string{ + `C:\Users\Administrator\Seafile\Projects-Clion\ClionProjects`, + `C:\Users\Administrator\Seafile\Projects-Elixir\ElixirProjects`, + `C:\Users\Administrator\Seafile\Projects-Go\GoProjects`, + `C:\Users\Administrator\Seafile\Projects-Idea\IdeaProjects`, + `C:\Users\Administrator\Seafile\Projects-Other\Projects`, + `C:\Users\Administrator\Seafile\Projects-Pycharm\PycharmProjects`, + `C:\Users\Administrator\Seafile\Projects-Rider\RiderProjects`, + `C:\Users\Administrator\Seafile\Projects-Webstorm\WebstormProjects`, +} + +func main() { + config, err := ReadDBConfig() + if err != nil { + Error.Fatalf("Error reading database config: %v", err) + return + } + + cleaned := 0 + var validEntries []*Entry = make([]*Entry, 0, len(config.Entries)) + for _, v := range config.Entries { + relevantPath := v.FileURI + if relevantPath == "" { + relevantPath = v.FolderURI + } + log.Printf("%#v", relevantPath) + 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 { + log.Printf("%#v %s", relevantPath, "...does not exist") + cleaned++ + continue + } + file.Close() + validEntries = append(validEntries, &v) + + // escaped := url.QueryEscape(relevantPath) + // escaped = strings.ReplaceAll(escaped, "%2F", "/") + // escaped = strings.ReplaceAll(escaped, "+", "%20") + // escaped = "file:///" + escaped + // log.Printf("%#v", escaped) + } + log.Printf("Cleaned %d invalid entries, %d valid entries remain", cleaned, len(validEntries)) + + for _, folder := range scanFolders { + log.Printf("%#v", folder) + } +} + +func ReadDBConfig() (Config, error) { + var res = Config{} + conn, err := sql.Open("sqlite3", projectsFile) + if err != nil { + return res, err + } + + row := conn.QueryRow(`SELECT * FROM ItemTable WHERE key = 'history.recentlyOpenedPathsList'`) + + var key string + var value string + err = row.Scan(&key, &value) + if err != nil { + return res, err + } + conn.Close() + + err = json.NewDecoder(strings.NewReader(value)).Decode(&res) + if err != nil { + return res, fmt.Errorf("error decoding JSON: %v", err) + } + return res, nil +} + +func WriteDBConfig(config Config) error { + conn, err := sql.Open("sqlite3", projectsFile) + if err != nil { + return err + } + log.Printf("%#v", conn) + return nil } diff --git a/types.go b/types.go index 879d35e..40c32cb 100644 --- a/types.go +++ b/types.go @@ -1,9 +1,15 @@ package main -type Project struct { - Name string `json:"name"` - RootPath string `json:"rootPath"` - Paths []string `json:"paths"` - Tags []string `json:"tags"` - Enabled bool `json:"enabled"` +type Config struct { + Entries []Entry `json:"entries"` +} +type Workspace struct { + ID string `json:"id"` + ConfigPath string `json:"configPath"` +} +type Entry struct { + FolderURI string `json:"folderUri,omitempty"` + Workspace Workspace `json:"workspace,omitempty"` + FileURI string `json:"fileUri,omitempty"` + Label string `json:"label,omitempty"` }