prepare loader ui
This commit is contained in:
+65
-44
@@ -25,6 +25,7 @@ type loader struct {
|
|||||||
window fyne.Window
|
window fyne.Window
|
||||||
textGrid *widget.TextGrid
|
textGrid *widget.TextGrid
|
||||||
btn *widget.Button
|
btn *widget.Button
|
||||||
|
fatalError bool
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -38,10 +39,6 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func NewLoader(s storage.Storage, conn connector.Connector, app fyne.App) (*loader, error) {
|
func NewLoader(s storage.Storage, conn connector.Connector, app fyne.App) (*loader, error) {
|
||||||
// cli, err := loadClientPlugin(s, conn, app, "./client.so", pluginInitSymbol)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
l := &loader{
|
l := &loader{
|
||||||
app: app,
|
app: app,
|
||||||
connector: conn,
|
connector: conn,
|
||||||
@@ -67,6 +64,8 @@ func NewLoader(s storage.Storage, conn connector.Connector, app fyne.App) (*load
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Комментарий временный, удалить после реализации.
|
||||||
|
|
||||||
# Порядок инициализации
|
# Порядок инициализации
|
||||||
|
|
||||||
- При ошибках Connector: не фатальное состояние, отображать состояние недоступности сети, предлагать повторить попытку.
|
- При ошибках Connector: не фатальное состояние, отображать состояние недоступности сети, предлагать повторить попытку.
|
||||||
@@ -83,64 +82,86 @@ func NewLoader(s storage.Storage, conn connector.Connector, app fyne.App) (*load
|
|||||||
3. Загружаем libUIPluginFile full path в loadClientPlugin;
|
3. Загружаем libUIPluginFile full path в loadClientPlugin;
|
||||||
*/
|
*/
|
||||||
func (l *loader) initUIPlugin() (mc.Client, error) {
|
func (l *loader) initUIPlugin() (mc.Client, error) {
|
||||||
l.appendText(fmt.Sprintf("checking plugin at path: %s", libUIPluginFile))
|
// l.appendText(fmt.Sprintf("Checking client plugin at %s", libUIPluginFile))
|
||||||
exists, err := l.storage.FileExists(libUIPluginFile)
|
// exists, err := l.storage.FileExists(libUIPluginFile)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
l.appendFatalError(err)
|
// l.appendFatalError(err)
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
if !exists {
|
// if !exists {
|
||||||
l.appendText(fmt.Sprintf("plugin not found at %s, fetching available versions", libUIPluginFile))
|
// l.appendText("Client plugin not found, checking available versions")
|
||||||
v, err := l.connector.CheckVersion()
|
// v, err := l.connector.CheckVersion()
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
l.appendFatalError(err)
|
// l.appendError(err)
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
l.appendText(fmt.Sprintf("received %d versions", len(v)))
|
// l.appendText(fmt.Sprintf("Received %d versions", len(v)))
|
||||||
latest, ok, err := latestVersion(v)
|
// latest, ok, err := latestVersion(v)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
l.appendFatalError(err)
|
// l.appendError(err)
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
if !ok {
|
// if !ok {
|
||||||
l.appendFatalError(errors.New("no latest version available from response"))
|
// l.appendError(errors.New("Server did not responded with a suitable client version"))
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
_ = latest
|
// l.appendText(fmt.Sprintf("Downloading version %s", latest.Version))
|
||||||
} else {
|
// data, err := l.connector.DownloadVersion(latest.URL)
|
||||||
l.appendText(fmt.Sprintf("plugin found at %s", libUIPluginFile))
|
// if err != nil {
|
||||||
}
|
// l.appendError(fmt.Errorf("Version %s download error: %w", latest.Version, err))
|
||||||
// implement this
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// err = l.storage.WriteFile(libUIPluginFile, data)
|
||||||
|
// if err != nil {
|
||||||
|
// l.appendFatalError(fmt.Errorf("Write plugin file error: %w", err))
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// l.appendText(fmt.Sprintf("Loading client plugin from %s", libUIPluginFile))
|
||||||
|
// cli, err := loadClientPlugin(s, conn, app, "./client.so", pluginInitSymbol)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loader) startLoading() {
|
func (l *loader) startLoading() {
|
||||||
|
l.fatalError = false
|
||||||
|
fyne.Do(func() {
|
||||||
|
l.textGrid.SetText("")
|
||||||
|
l.btn.Hide()
|
||||||
|
l.btn.Disable()
|
||||||
|
})
|
||||||
l.appendText("Loading...")
|
l.appendText("Loading...")
|
||||||
var err error
|
var err error
|
||||||
l.client, err = l.initUIPlugin()
|
l.client, err = l.initUIPlugin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fyne.Do(func() {
|
||||||
|
if l.fatalError {
|
||||||
|
l.btn.SetText("Quit")
|
||||||
|
l.appendText("Please re-install application.")
|
||||||
|
} else {
|
||||||
|
l.btn.SetText("Retry")
|
||||||
|
}
|
||||||
|
l.btn.Enable()
|
||||||
|
l.btn.Show()
|
||||||
l.window.Show()
|
l.window.Show()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loader) onButtonAction() {
|
func (l *loader) onButtonAction() {
|
||||||
|
if l.fatalError {
|
||||||
l.app.Quit()
|
l.app.Quit()
|
||||||
|
} else {
|
||||||
|
go l.startLoading()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loader) Run(ctx context.Context) error {
|
func (l *loader) Run(ctx context.Context) error {
|
||||||
go l.startLoading()
|
go l.startLoading()
|
||||||
l.app.Run()
|
l.app.Run()
|
||||||
|
|
||||||
// l.window.Show()
|
|
||||||
// l.startLoading()
|
|
||||||
|
|
||||||
// select {
|
|
||||||
// case <-ctx.Done():
|
|
||||||
// return nil
|
|
||||||
// case <-l.await:
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
|
|
||||||
// final := make(chan struct{}, 1)
|
// final := make(chan struct{}, 1)
|
||||||
// if l.connector != nil {
|
// if l.connector != nil {
|
||||||
// go l.backgroundLoop(ctx, final)
|
// go l.backgroundLoop(ctx, final)
|
||||||
@@ -159,12 +180,12 @@ func (l *loader) appendText(v string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *loader) appendError(err error) {
|
func (l *loader) appendError(err error) {
|
||||||
l.appendText(fmt.Sprintf("Error: %s", err))
|
l.appendText(fmt.Sprintf("❌ %s", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loader) appendFatalError(err error) {
|
func (l *loader) appendFatalError(err error) {
|
||||||
l.appendError(err)
|
l.appendError(err)
|
||||||
l.btn.Enable()
|
l.fatalError = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loader) backgroundLoop(ctx context.Context, final <-chan struct{}) {
|
func (l *loader) backgroundLoop(ctx context.Context, final <-chan struct{}) {
|
||||||
|
|||||||
Reference in New Issue
Block a user