Implement cleaning existing config

This commit is contained in:
2024-08-13 09:24:42 +02:00
parent 1669f10a60
commit 9a8f1c3dbd
2 changed files with 106 additions and 9 deletions

97
main.go
View File

@@ -1,11 +1,16 @@
package main package main
import ( import (
"database/sql"
"encoding/json"
"fmt" "fmt"
"io" "io"
"log" "log"
"net/url"
"os" "os"
"database/sql" "path"
"strings"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
) )
@@ -28,6 +33,92 @@ func init() {
const projectsFile = `C:\Users\Administrator\Seafile\VSCode\Code\User\globalStorage\state.vscdb` 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
} }

View File

@@ -1,9 +1,15 @@
package main package main
type Project struct { type Config struct {
Name string `json:"name"` Entries []Entry `json:"entries"`
RootPath string `json:"rootPath"` }
Paths []string `json:"paths"` type Workspace struct {
Tags []string `json:"tags"` ID string `json:"id"`
Enabled bool `json:"enabled"` 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"`
} }