aboutsummaryrefslogtreecommitdiffstats
path: root/ethereal/ui/html_container.go
diff options
context:
space:
mode:
authorMaran <maran.hidskes@gmail.com>2014-05-20 22:58:13 +0800
committerMaran <maran.hidskes@gmail.com>2014-05-20 22:58:13 +0800
commit0cf617ef0c796cf97252fb64a92afc7cb1d892f2 (patch)
treee4dced74c9786dab0d85d738286d8e80aaf7cb93 /ethereal/ui/html_container.go
parent0ef7f6372939189dcfeaea8197798a63a6d6688a (diff)
downloaddexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.tar
dexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.tar.gz
dexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.tar.bz2
dexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.tar.lz
dexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.tar.xz
dexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.tar.zst
dexon-0cf617ef0c796cf97252fb64a92afc7cb1d892f2.zip
Implemented GUI watchers for rapid reload. Implements #46
Diffstat (limited to 'ethereal/ui/html_container.go')
-rw-r--r--ethereal/ui/html_container.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/ethereal/ui/html_container.go b/ethereal/ui/html_container.go
index 4f12aaaf6..3867c0353 100644
--- a/ethereal/ui/html_container.go
+++ b/ethereal/ui/html_container.go
@@ -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
}