Added open js option for repetitive tasks in ethereal

This commit is contained in:
obscuren 2014-08-11 16:24:35 +02:00
parent ce8f24e57a
commit c59d7a899b
6 changed files with 52 additions and 13 deletions

View File

@ -63,6 +63,16 @@ ApplicationWindow {
txImportDialog.visible = true txImportDialog.visible = true
} }
} }
MenuItem {
text: "Run JS file"
onTriggered: {
generalFileDialog.callback = function(path) {
eth.evalJavascriptFile(path)
}
generalFileDialog.open()
}
}
} }
Menu { Menu {
@ -452,6 +462,16 @@ ApplicationWindow {
onAccepted: { onAccepted: {
} }
} }
FileDialog {
id: generalFileDialog
property var callback;
onAccepted: {
var path = this.fileUrl.toString()
callback.call(this, path)
}
}
FileDialog { FileDialog {
id: importDialog id: importDialog

View File

@ -18,6 +18,7 @@ import (
"github.com/ethereum/eth-go/ethreact" "github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire" "github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/go-ethereum/javascript"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
"github.com/go-qml/qml" "github.com/go-qml/qml"
) )
@ -47,6 +48,8 @@ type Gui struct {
config *ethutil.ConfigManager config *ethutil.ConfigManager
miner *ethminer.Miner miner *ethminer.Miner
jsEngine *javascript.JSRE
} }
// Create GUI, but doesn't start it // Create GUI, but doesn't start it
@ -58,7 +61,7 @@ func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIden
pub := ethpub.NewPEthereum(ethereum) pub := ethpub.NewPEthereum(ethereum)
return &Gui{eth: ethereum, txDb: db, pub: pub, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config} return &Gui{eth: ethereum, txDb: db, pub: pub, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config, jsEngine: javascript.NewJSRE(ethereum)}
} }
func (gui *Gui) Start(assetPath string) { func (gui *Gui) Start(assetPath string) {
@ -121,6 +124,9 @@ func (gui *Gui) Stop() {
gui.open = false gui.open = false
gui.win.Hide() gui.win.Hide()
} }
gui.jsEngine.Stop()
logger.Infoln("Stopped") logger.Infoln("Stopped")
} }
@ -464,6 +470,13 @@ func (self *Gui) ImportTx(rlpTx string) {
self.eth.TxPool().QueueTransaction(tx) self.eth.TxPool().QueueTransaction(tx)
} }
func (self *Gui) SearchChange(blockHash, address, storageAddress string) {
}
func (self *Gui) EvalJavascriptFile(path string) {
self.jsEngine.LoadExtFile(path[7:])
}
func (gui *Gui) SetCustomIdentifier(customIdentifier string) { func (gui *Gui) SetCustomIdentifier(customIdentifier string) {
gui.clientIdentity.SetCustomIdentifier(customIdentifier) gui.clientIdentity.SetCustomIdentifier(customIdentifier)
gui.config.Save("id", customIdentifier) gui.config.Save("id", customIdentifier)

View File

@ -1,11 +1,13 @@
package main package main
import ( import (
"github.com/ethereum/eth-go"
"github.com/ethereum/go-ethereum/ethereum/repl"
"github.com/ethereum/go-ethereum/utils"
"io/ioutil" "io/ioutil"
"os" "os"
"github.com/ethereum/eth-go"
"github.com/ethereum/go-ethereum/ethereum/repl"
"github.com/ethereum/go-ethereum/javascript"
"github.com/ethereum/go-ethereum/utils"
) )
func InitJsConsole(ethereum *eth.Ethereum) { func InitJsConsole(ethereum *eth.Ethereum) {
@ -25,7 +27,7 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
if err != nil { if err != nil {
logger.Fatalln(err) logger.Fatalln(err)
} }
re := ethrepl.NewJSRE(ethereum) re := javascript.NewJSRE(ethereum)
utils.RegisterInterrupt(func(os.Signal) { utils.RegisterInterrupt(func(os.Signal) {
re.Stop() re.Stop()
}) })

View File

@ -3,12 +3,14 @@ package ethrepl
import ( import (
"bufio" "bufio"
"fmt" "fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethutil"
"io" "io"
"os" "os"
"path" "path"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/javascript"
) )
var logger = ethlog.NewLogger("REPL") var logger = ethlog.NewLogger("REPL")
@ -19,7 +21,7 @@ type Repl interface {
} }
type JSRepl struct { type JSRepl struct {
re *JSRE re *javascript.JSRE
prompt string prompt string
@ -34,7 +36,7 @@ func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
panic(err) panic(err)
} }
return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist} return &JSRepl{re: javascript.NewJSRE(ethereum), prompt: "> ", history: hist}
} }
func (self *JSRepl) Start() { func (self *JSRepl) Start() {

View File

@ -115,8 +115,8 @@ L:
} }
func (self *JSRepl) PrintValue(v interface{}) { func (self *JSRepl) PrintValue(v interface{}) {
method, _ := self.re.vm.Get("prettyPrint") method, _ := self.re.Vm.Get("prettyPrint")
v, err := self.re.vm.ToValue(v) v, err := self.re.Vm.ToValue(v)
if err == nil { if err == nil {
method.Call(method, v) method.Call(method, v)
} }

View File

@ -1,9 +1,10 @@
package utils package utils
import ( import (
"math/big"
"github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethstate" "github.com/ethereum/eth-go/ethstate"
"math/big"
) )
type VMEnv struct { type VMEnv struct {
@ -29,5 +30,6 @@ func (self *VMEnv) PrevHash() []byte { return self.block.PrevHash }
func (self *VMEnv) Coinbase() []byte { return self.block.Coinbase } func (self *VMEnv) Coinbase() []byte { return self.block.Coinbase }
func (self *VMEnv) Time() int64 { return self.block.Time } func (self *VMEnv) Time() int64 { return self.block.Time }
func (self *VMEnv) Difficulty() *big.Int { return self.block.Difficulty } func (self *VMEnv) Difficulty() *big.Int { return self.block.Difficulty }
func (self *VMEnv) BlockHash() []byte { return self.block.Hash() }
func (self *VMEnv) Value() *big.Int { return self.value } func (self *VMEnv) Value() *big.Int { return self.value }
func (self *VMEnv) State() *ethstate.State { return self.state } func (self *VMEnv) State() *ethstate.State { return self.state }