|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|