func EventHandler(watcher *fsnotify.Watcher, manager chan *Command) { for { select { case ev := <-watcher.Event: //encrypt() upload() switch { case ev.IsCreate(): watcher.Watch(ev.Name) logEvent(ev.Name, "create") case ev.IsDelete(): watcher.RemoveWatch(ev.Name) logEvent(ev.Name, "delete") case ev.IsModify(): logEvent(ev.Name, "modify") case ev.IsAttrib(): logEvent(ev.Name, "modify attrib") case ev.IsRename(): watcher.RemoveWatch(ev.Name) logEvent(ev.Name, "rename") default: fmt.Println("Something is weird. Event but not type?") } case err := <-watcher.Error: // TODO: handle errors and see why reading from this can cause a block. fmt.Println("error reading error in fsmonitor: ", err) case com := <-manager: // TODO: Add in ability to add/remove watches from a recieved command if com.exitP { err := watcher.Close() fmt.Println("Returning EventHandler") if err != nil { fmt.Println("Error on close of watch: ", err) } return } } } }