Skip to content

Commit

Permalink
Implemented GUI watchers for rapid reload. Implements #46
Browse files Browse the repository at this point in the history
  • Loading branch information
Maran committed May 20, 2014
1 parent 0ef7f63 commit 0cf617e
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 3 deletions.
12 changes: 9 additions & 3 deletions ethereal/ui/ext_app.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@ type AppContainer interface {
NewBlock(*ethchain.Block)
ObjectChanged(*ethchain.StateObject)
StorageChanged(*ethchain.StorageState)
NewWatcher(chan bool)
}

type ExtApplication struct {
*ethpub.PEthereum

blockChan chan ethutil.React
changeChan chan ethutil.React
quitChan chan bool
blockChan chan ethutil.React
changeChan chan ethutil.React
quitChan chan bool
watcherQuitChan chan bool

container AppContainer
lib *UiLib
Expand All @@ -38,6 +40,7 @@ func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication {
make(chan ethutil.React, 1),
make(chan ethutil.React, 1),
make(chan bool),
make(chan bool),
container,
lib,
nil,
Expand Down Expand Up @@ -66,6 +69,8 @@ func (app *ExtApplication) run() {
reactor := app.lib.eth.Reactor()
reactor.Subscribe("newBlock", app.blockChan)

app.container.NewWatcher(app.watcherQuitChan)

win := app.container.Window()
win.Show()
win.Wait()
Expand All @@ -83,6 +88,7 @@ func (app *ExtApplication) stop() {

// Kill the main loop
app.quitChan <- true
app.watcherQuitChan <- true

close(app.blockChan)
close(app.quitChan)
Expand Down
60 changes: 60 additions & 0 deletions ethereal/ui/html_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -15,6 +21,7 @@ type HtmlApplication struct {
engine *qml.Engine
lib *UiLib
path string
watcher *fsnotify.Watcher
}

func NewHtmlApplication(path string, lib *UiLib) *HtmlApplication {
Expand Down Expand Up @@ -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
}
Expand Down

0 comments on commit 0cf617e

Please sign in to comment.