diff --git a/.gitignore b/.gitignore index 5d06943..043cb92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +cmd/bustled/bustled +cmd/bustle/bustle *.swp # ---> Go # Binaries for programs and plugins diff --git a/cmd/bustle/main.go b/cmd/bustle/main.go new file mode 100644 index 0000000..065e6ea --- /dev/null +++ b/cmd/bustle/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("TODO bustle client") +} diff --git a/cmd/bustled/main.go b/cmd/bustled/main.go new file mode 100644 index 0000000..d3ecb96 --- /dev/null +++ b/cmd/bustled/main.go @@ -0,0 +1,69 @@ +package main + +import ( + "fmt" + "log" + "os" + + "github.com/fsnotify/fsnotify" +) + +func initHomeWatcher() (*fsnotify.Watcher, error) { + watcher, err := fsnotify.NewWatcher() + if err != nil { + return nil, err + } + + // TODO filepath.Walk over /home, adding to watcher + paths := []string{"/home/vilmibm", "/home/wren"} + + for _, path := range paths { + err = watcher.Add(path) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to watch path %s: %w", path, err) + continue + } + } + return watcher, nil +} + +func watchHome(watcher *fsnotify.Watcher) { + for { + select { + case event, ok := <-watcher.Events: + if !ok { + return + } + log.Println("event:", event) + if event.Op&fsnotify.Write == fsnotify.Write { + log.Println("modified file:", event.Name) + } + case err, ok := <-watcher.Errors: + if !ok { + return + } + log.Println("error:", err) + } + } +} + +func cli(args []string) int { + watcher, err := initHomeWatcher() + if err != nil { + fmt.Fprintf(os.Stderr, "failed to create watcher: %w", err) + return 1 + } + defer watcher.Close() + + // TODO have an event bus to write to + // TODO what is this done for do i need this done + done := make(chan bool) + go watchHome(watcher) + <-done + + return 0 +} + +func main() { + os.Exit(cli(os.Args)) +} diff --git a/main.go b/main.go deleted file mode 100644 index 126b367..0000000 --- a/main.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "fmt" - "log" - "os" - - "github.com/fsnotify/fsnotify" -) - -func main() { - watcher, err := fsnotify.NewWatcher() - if err != nil { - log.Fatal(err) - } - defer watcher.Close() - - done := make(chan bool) - go func() { - for { - select { - case event, ok := <-watcher.Events: - if !ok { - return - } - log.Println("event:", event) - if event.Op&fsnotify.Write == fsnotify.Write { - log.Println("modified file:", event.Name) - } - case err, ok := <-watcher.Errors: - if !ok { - return - } - log.Println("error:", err) - } - } - }() - - // will need to recursively watch for myself, including adding watchers for new directories D: - - // check out filepath.Walk - - for _, path := range os.Args[1:] { - err = watcher.Add(path) - if err != nil { - log.Fatal(err) - } - - } - <-done - - fmt.Println("hmm") -}