Implement cleaning existing config
This commit is contained in:
97
main.go
97
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
|
||||
}
|
||||
|
18
types.go
18
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"`
|
||||
}
|
||||
|
Reference in New Issue
Block a user