From 3a2bddc160ece4dcb6d2d5bcc85091d244e774c0 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 15 May 2014 14:06:06 +0200 Subject: Refactored to reactor. Fixes #42 --- ethereal/ui/gui.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index aa0364998..c4cc1373f 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -178,13 +178,14 @@ func (gui *Gui) setWalletValue(amount, unconfirmedFunds *big.Int) { // Simple go routine function that updates the list of peers in the GUI func (gui *Gui) update() { - blockChan := make(chan ethutil.React, 1) reactor := gui.eth.Reactor() - reactor.Subscribe("newBlock", blockChan) + blockChan := make(chan ethutil.React, 1) + txChan := make(chan ethutil.React, 1) - txChan := make(chan ethchain.TxMsg, 1) - gui.eth.TxPool().Subscribe(txChan) + reactor.Subscribe("newBlock", blockChan) + reactor.Subscribe("newTx:pre", txChan) + reactor.Subscribe("newTx:post", txChan) state := gui.eth.StateManager().TransState() @@ -200,9 +201,9 @@ func (gui *Gui) update() { } case txMsg := <-txChan: - tx := txMsg.Tx + tx := txMsg.Resource.(*ethchain.Transaction) - if txMsg.Type == ethchain.TxPre { + if txMsg.Event == "newTx:pre" { object := state.GetAccount(gui.addr) if bytes.Compare(tx.Sender(), gui.addr) == 0 && object.Nonce <= tx.Nonce { -- cgit v1.2.3 From 770808ce0d44cadfedbe01694c836be2eaf0e82c Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 17 May 2014 15:15:46 +0200 Subject: Readline repl for linux & osx --- ethereal/ui/gui.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index c4cc1373f..24be9e0c5 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -197,7 +197,7 @@ func (gui *Gui) update() { case b := <-blockChan: block := b.Resource.(*ethchain.Block) if bytes.Compare(block.Coinbase, gui.addr) == 0 { - gui.setWalletValue(gui.eth.StateManager().ProcState().GetAccount(gui.addr).Amount, nil) + gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.addr).Amount, nil) } case txMsg := <-txChan: -- cgit v1.2.3 From 43f88b2bbb6fc993f8bfee531056a7e11bef59bd Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 19 May 2014 12:14:32 +0200 Subject: Removed nonce incrementing --- ethereal/ui/gui.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 24be9e0c5..e465d5273 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -210,8 +210,10 @@ func (gui *Gui) update() { gui.win.Root().Call("addTx", ethpub.NewPTx(tx)) gui.txDb.Put(tx.Hash(), tx.RlpEncode()) - object.Nonce += 1 - state.SetStateObject(object) + /* + object.Nonce += 1 + state.SetStateObject(object) + */ unconfirmedFunds.Sub(unconfirmedFunds, tx.Value) } else if bytes.Compare(tx.Recipient, gui.addr) == 0 { -- cgit v1.2.3 From 0cf617ef0c796cf97252fb64a92afc7cb1d892f2 Mon Sep 17 00:00:00 2001 From: Maran Date: Tue, 20 May 2014 16:58:13 +0200 Subject: Implemented GUI watchers for rapid reload. Implements #46 --- ethereal/ui/ext_app.go | 12 ++++++--- ethereal/ui/html_container.go | 60 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/ext_app.go b/ethereal/ui/ext_app.go index de5f15db6..d1a256cdb 100644 --- a/ethereal/ui/ext_app.go +++ b/ethereal/ui/ext_app.go @@ -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 @@ -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, @@ -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() @@ -83,6 +88,7 @@ func (app *ExtApplication) stop() { // Kill the main loop app.quitChan <- true + app.watcherQuitChan <- true close(app.blockChan) close(app.quitChan) 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 } -- cgit v1.2.3 From 34014c1c516ea03b28e56db1a0478087d2416f74 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 20 May 2014 17:08:23 +0200 Subject: Bump --- ethereal/ui/gui.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index e465d5273..e267dabfd 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -55,7 +55,7 @@ func New(ethereum *eth.Ethereum) *Gui { } func (gui *Gui) Start(assetPath string) { - const version = "0.5.0 RC6" + const version = "0.5.0 RC7" defer gui.txDb.Close() -- cgit v1.2.3