Implemented GUI watchers for rapid reload. Implements #46
This commit is contained in:
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user