organized prototype

This commit is contained in:
Chakib Ben Ziane 2017-10-20 12:51:56 +02:00
parent 1ef91ad673
commit a3055abfc0
3 changed files with 146 additions and 0 deletions

33
main.go Normal file
View File

@ -0,0 +1,33 @@
package main
import (
"log"
"github.com/fsnotify/fsnotify"
)
const (
BOOKMARK_FILE="/home/spike/.config/google-chrome-unstable/Default/Bookmarks"
BOOKMARK_DIR="/home/spike/.config/google-chrome-unstable/Default/"
)
func main() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
done := make(chan bool)
go watcherThread(watcher)
err = watcher.Add(BOOKMARK_DIR)
if err != nil {
log.Fatal(err)
}
<-done
}

72
parse.go Normal file
View File

@ -0,0 +1,72 @@
package main
import (
"fmt"
"encoding/json"
"bytes"
)
type Node struct {
Type string
Children []interface{}
Url string `json:",omitempty"`
Name string
}
type RootData struct {
Name string
Roots map[string]Node
Version float64
}
func mapToNode(childNode interface{}) (*Node, error) {
if childNode == nil {
return new(Node), nil
}
buf := new(bytes.Buffer)
// Convert interface{} to json
err := json.NewEncoder(buf).Encode(childNode)
if err != nil {
return nil, err
}
//fmt.Println(buf)
out := new(Node)
// Convert json to Node struct
err = json.NewDecoder(buf).Decode(out)
if err != nil {
return nil, err
}
return out, nil
}
func parseJsonNodes(node *Node) {
//fmt.Println("parsing node ", node.Name)
if (node.Type == "url") {
fmt.Println(node.Url)
} else if (len(node.Children) != 0) { // If node is Folder
for _, _childNode := range node.Children {
// Type of childNode is interface{}
//childNode := Node{}
childNode, err := mapToNode(_childNode)
if err != nil {
panic(err)
}
parseJsonNodes(childNode)
}
}
return
}

41
watcher.go Normal file
View File

@ -0,0 +1,41 @@
package main
import (
"log"
"github.com/fsnotify/fsnotify"
"io/ioutil"
"encoding/json"
)
func watcherThread(watcher *fsnotify.Watcher){
for {
select {
case event := <-watcher.Events:
if event.Op&fsnotify.Create == fsnotify.Create &&
event.Name == BOOKMARK_FILE {
log.Printf("event: %v| name: %v", event.Op, event.Name)
log.Println("modified file:", event.Name)
log.Println("Parsing bookmark")
f, err := ioutil.ReadFile(BOOKMARK_FILE)
if err != nil {
log.Fatal(err)
}
rootData := RootData{}
_ = json.Unmarshal(f, &rootData)
for _, root := range rootData.Roots {
parseJsonNodes(&root)
}
}
case err := <-watcher.Errors:
log.Println("error:", err)
}
}
}