Browse Source

Error window

obscuren 11 years ago
parent
commit
09c7d158d1
5 changed files with 67 additions and 4 deletions
  1. 1 1
      README.md
  2. 36 0
      ethereal/errors.go
  3. 19 1
      ethereal/main.go
  4. 1 1
      ethereum/main.go
  5. 10 1
      utils/cmd.go

+ 1 - 1
README.md

@@ -7,7 +7,7 @@ Status](http://cpt-obvious.ethercasts.com:8010/buildstatusimage?builder=go-ether
 
 Ethereum Go Client © 2014 Jeffrey Wilcke.
 
-Current state: Proof of Concept 0.6.4.
+Current state: Proof of Concept 0.6.5.
 
 For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).
 

+ 36 - 0
ethereal/errors.go

@@ -0,0 +1,36 @@
+package main
+
+import (
+	"fmt"
+	"os"
+
+	"gopkg.in/qml.v1"
+)
+
+func ErrorWindow(err error) {
+	engine := qml.NewEngine()
+	component, e := engine.LoadString("local", qmlErr)
+	if e != nil {
+		fmt.Println("err:", err)
+		os.Exit(1)
+	}
+
+	win := component.CreateWindow(nil)
+	win.Root().ObjectByName("label").Set("text", err.Error())
+	win.Show()
+	win.Wait()
+}
+
+const qmlErr = `
+import QtQuick 2.0; import QtQuick.Controls 1.0;
+ApplicationWindow {
+	width: 600; height: 150;
+	flags: Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint
+	title: "Error"
+	Text {
+		x: parent.width / 2 - this.width / 2;
+		y: parent.height / 2 - this.height / 2;
+		objectName: "label";
+	}
+}
+`

+ 19 - 1
ethereal/main.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	"fmt"
 	"os"
 	"runtime"
 
@@ -12,7 +13,7 @@ import (
 
 const (
 	ClientIdentifier = "Ethereal"
-	Version          = "0.6.4"
+	Version          = "0.6.5"
 )
 
 var ethereum *eth.Ethereum
@@ -28,6 +29,23 @@ func run() error {
 	utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile)
 
 	db := utils.NewDatabase()
+	err := utils.DBSanityCheck(db)
+	if err != nil {
+		engine := qml.NewEngine()
+		component, e := engine.LoadString("local", qmlErr)
+		if e != nil {
+			fmt.Println("err:", err)
+			os.Exit(1)
+		}
+
+		win := component.CreateWindow(nil)
+		win.Root().ObjectByName("label").Set("text", err.Error())
+		win.Show()
+		win.Wait()
+
+		ErrorWindow(err)
+		os.Exit(1)
+	}
 
 	keyManager := utils.NewKeyManager(KeyStore, Datadir, db)
 

+ 1 - 1
ethereum/main.go

@@ -13,7 +13,7 @@ import (
 
 const (
 	ClientIdentifier = "Ethereum(G)"
-	Version          = "0.6.4"
+	Version          = "0.6.5"
 )
 
 var logger = ethlog.NewLogger("CLI")

+ 10 - 1
utils/cmd.go

@@ -80,6 +80,16 @@ func confirm(message string) bool {
 	return r == "y"
 }
 
+func DBSanityCheck(db ethutil.Database) error {
+	d, _ := db.Get([]byte("ProtocolVersion"))
+	protov := ethutil.NewValue(d).Uint()
+	if protov != eth.ProtocolVersion && protov != 0 {
+		return fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, eth.ProtocolVersion, ethutil.Config.ExecPath+"/database")
+	}
+
+	return nil
+}
+
 func InitDataDir(Datadir string) {
 	_, err := os.Stat(Datadir)
 	if err != nil {
@@ -112,7 +122,6 @@ func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.Co
 func exit(err error) {
 	status := 0
 	if err != nil {
-		fmt.Println(err)
 		logger.Errorln("Fatal: ", err)
 		status = 1
 	}