|
|
@@ -6,6 +6,12 @@ import (
|
|
|
"github.com/ethereum/eth-go/ethpub"
|
|
|
"github.com/ethereum/eth-go/ethutil"
|
|
|
"github.com/go-qml/qml"
|
|
|
+ "github.com/howeyc/fsnotify"
|
|
|
+ "io/ioutil"
|
|
|
+ "log"
|
|
|
+ "net/url"
|
|
|
+ "os"
|
|
|
+ "path"
|
|
|
"path/filepath"
|
|
|
)
|
|
|
|
|
|
@@ -15,6 +21,7 @@ type HtmlApplication struct {
|
|
|
engine *qml.Engine
|
|
|
lib *UiLib
|
|
|
path string
|
|
|
+ watcher *fsnotify.Watcher
|
|
|
}
|
|
|
|
|
|
func NewHtmlApplication(path string, lib *UiLib) *HtmlApplication {
|
|
|
@@ -47,6 +54,59 @@ func (app *HtmlApplication) Create() error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func (app *HtmlApplication) RootFolder() string {
|
|
|
+ folder, err := url.Parse(app.path)
|
|
|
+ if err != nil {
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ return path.Dir(folder.RequestURI())
|
|
|
+}
|
|
|
+func (app *HtmlApplication) RecursiveFolders() []os.FileInfo {
|
|
|
+ files, _ := ioutil.ReadDir(app.RootFolder())
|
|
|
+ var folders []os.FileInfo
|
|
|
+ for _, file := range files {
|
|
|
+ if file.IsDir() {
|
|
|
+ folders = append(folders, file)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return folders
|
|
|
+}
|
|
|
+
|
|
|
+func (app *HtmlApplication) NewWatcher(quitChan chan bool) {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ app.watcher, err = fsnotify.NewWatcher()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = app.watcher.Watch(app.RootFolder())
|
|
|
+ if err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+ for _, folder := range app.RecursiveFolders() {
|
|
|
+ fullPath := app.RootFolder() + "/" + folder.Name()
|
|
|
+ app.watcher.Watch(fullPath)
|
|
|
+ }
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ out:
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case <-quitChan:
|
|
|
+ app.watcher.Close()
|
|
|
+ break out
|
|
|
+ case <-app.watcher.Event:
|
|
|
+ //ethutil.Config.Log.Debugln("Got event:", ev)
|
|
|
+ app.webView.Call("reload")
|
|
|
+ case err := <-app.watcher.Error:
|
|
|
+ // TODO: Do something here
|
|
|
+ ethutil.Config.Log.Infoln("Watcher error:", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
func (app *HtmlApplication) Engine() *qml.Engine {
|
|
|
return app.engine
|
|
|
}
|