move listener logic into separate file
Signed-off-by: Naman Sood <mail@nsood.in>
This commit is contained in:
parent
0373431876
commit
1a267a1bc6
2 changed files with 75 additions and 68 deletions
75
listener.go
Normal file
75
listener.go
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/rjeczalik/notify"
|
||||||
|
)
|
||||||
|
|
||||||
|
type listener struct {
|
||||||
|
folder string
|
||||||
|
update func(string) error
|
||||||
|
clean func(string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *listener) listen() {
|
||||||
|
cwd, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("could not get current working directory for listener!")
|
||||||
|
}
|
||||||
|
cwd = cwd + "/"
|
||||||
|
|
||||||
|
c := make(chan notify.EventInfo, 1)
|
||||||
|
|
||||||
|
var events []notify.Event
|
||||||
|
|
||||||
|
// inotify events prevent double-firing of
|
||||||
|
// certain events in Linux.
|
||||||
|
if runtime.GOOS == "linux" {
|
||||||
|
events = []notify.Event{
|
||||||
|
notify.InCloseWrite,
|
||||||
|
notify.InMovedFrom,
|
||||||
|
notify.InMovedTo,
|
||||||
|
notify.InDelete,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
events = []notify.Event{
|
||||||
|
notify.Create,
|
||||||
|
notify.Remove,
|
||||||
|
notify.Rename,
|
||||||
|
notify.Write,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = notify.Watch(l.folder, c, events...)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Could not setup watcher for folder %s: %s", l.folder, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer notify.Stop(c)
|
||||||
|
|
||||||
|
for {
|
||||||
|
ei := <-c
|
||||||
|
log.Printf("event: %s", ei.Event())
|
||||||
|
switch ei.Event() {
|
||||||
|
case notify.InCloseWrite, notify.InMovedTo, notify.Create, notify.Rename, notify.Write:
|
||||||
|
filePath := strings.TrimPrefix(ei.Path(), cwd)
|
||||||
|
log.Printf("updating file %s", filePath)
|
||||||
|
err := l.update(strings.TrimPrefix(filePath, l.folder))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("watcher update action on %s failed: %v", filePath, err)
|
||||||
|
}
|
||||||
|
case notify.InMovedFrom, notify.InDelete, notify.Remove:
|
||||||
|
filePath := strings.TrimPrefix(ei.Path(), cwd)
|
||||||
|
log.Printf("cleaning file %s", filePath)
|
||||||
|
err := l.clean(strings.TrimPrefix(filePath, l.folder))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("watcher clean action on %s failed: %v", filePath, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
server.go
68
server.go
|
@ -3,13 +3,10 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/aymerick/raymond"
|
"github.com/aymerick/raymond"
|
||||||
"github.com/rjeczalik/notify"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type server struct {
|
type server struct {
|
||||||
|
@ -78,71 +75,6 @@ func newServer() (*server, error) {
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type listener struct {
|
|
||||||
folder string
|
|
||||||
update func(string) error
|
|
||||||
clean func(string) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *listener) listen() {
|
|
||||||
cwd, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal("could not get current working directory for listener!")
|
|
||||||
}
|
|
||||||
cwd = cwd + "/"
|
|
||||||
|
|
||||||
c := make(chan notify.EventInfo, 1)
|
|
||||||
|
|
||||||
var events []notify.Event
|
|
||||||
|
|
||||||
// inotify events prevent double-firing of
|
|
||||||
// certain events in Linux.
|
|
||||||
if runtime.GOOS == "linux" {
|
|
||||||
events = []notify.Event{
|
|
||||||
notify.InCloseWrite,
|
|
||||||
notify.InMovedFrom,
|
|
||||||
notify.InMovedTo,
|
|
||||||
notify.InDelete,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
events = []notify.Event{
|
|
||||||
notify.Create,
|
|
||||||
notify.Remove,
|
|
||||||
notify.Rename,
|
|
||||||
notify.Write,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = notify.Watch(l.folder, c, events...)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Could not setup watcher for folder %s: %s", l.folder, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
defer notify.Stop(c)
|
|
||||||
|
|
||||||
for {
|
|
||||||
ei := <-c
|
|
||||||
log.Printf("event: %s", ei.Event())
|
|
||||||
switch ei.Event() {
|
|
||||||
case notify.InCloseWrite, notify.InMovedTo, notify.Create, notify.Rename, notify.Write:
|
|
||||||
filePath := strings.TrimPrefix(ei.Path(), cwd)
|
|
||||||
log.Printf("updating file %s", filePath)
|
|
||||||
err := l.update(strings.TrimPrefix(filePath, l.folder))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("watcher update action on %s failed: %v", filePath, err)
|
|
||||||
}
|
|
||||||
case notify.InMovedFrom, notify.InDelete, notify.Remove:
|
|
||||||
filePath := strings.TrimPrefix(ei.Path(), cwd)
|
|
||||||
log.Printf("cleaning file %s", filePath)
|
|
||||||
err := l.clean(strings.TrimPrefix(filePath, l.folder))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("watcher clean action on %s failed: %v", filePath, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *server) logRequest(req *http.Request) {
|
func (s *server) logRequest(req *http.Request) {
|
||||||
log.Printf("%s %s from %s", req.Method, req.URL.Path, req.RemoteAddr)
|
log.Printf("%s %s from %s", req.Method, req.URL.Path, req.RemoteAddr)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue