This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"cloudsave/cmd/gui/window/about"
|
||||
"cloudsave/cmd/gui/window/credential"
|
||||
"cloudsave/cmd/gui/window/loading"
|
||||
"cloudsave/cmd/gui/window/properties"
|
||||
|
||||
syncdialog "cloudsave/cmd/gui/window/sync"
|
||||
"cloudsave/pkg/data"
|
||||
@@ -36,8 +37,19 @@ func (e *ExtraLabel) SetID(id string) {
|
||||
|
||||
func Make(a fyne.App, d *data.Service) fyne.Window {
|
||||
w := a.NewWindow("CloudSave")
|
||||
w.Resize(fyne.NewSize(1000, 700))
|
||||
w.Resize(fyne.NewSize(1200, 700))
|
||||
w.CenterOnScreen()
|
||||
w.SetFixedSize(true)
|
||||
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
d := dialog.NewError(fmt.Errorf("the application crashed: %s", r), w)
|
||||
d.Show()
|
||||
d.SetOnClosed(func() {
|
||||
os.Exit(1)
|
||||
})
|
||||
}
|
||||
}()
|
||||
|
||||
games, err := d.AllGames()
|
||||
if err != nil {
|
||||
@@ -61,74 +73,29 @@ func Make(a fyne.App, d *data.Service) fyne.Window {
|
||||
})
|
||||
|
||||
list.OnSelected = func(id widget.ListItemID) {
|
||||
fmt.Println(id)
|
||||
properties.Make(a, games[id]).Show()
|
||||
}
|
||||
|
||||
toolbar := widget.NewToolbar(
|
||||
widget.NewToolbarAction(theme.FolderNewIcon(), func() {
|
||||
folderSelection := dialog.NewFolderOpen(func(lu fyne.ListableURI, err error) {
|
||||
if err != nil {
|
||||
d := dialog.NewError(fmt.Errorf("failed to open window: %w", err), w)
|
||||
makeNewButton(d, w, func() {
|
||||
games, err = d.AllGames()
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
d := dialog.NewError(fmt.Errorf("failed to load datastore: %w", err), w)
|
||||
d.Show()
|
||||
return
|
||||
}
|
||||
if lu == nil {
|
||||
return
|
||||
}
|
||||
confirmDialog := dialog.NewConfirm("Add", "Do you want to add and scan '"+lu.Path()+"'?", func(accepted bool) {
|
||||
if !accepted {
|
||||
return
|
||||
}
|
||||
name := filepath.Base(lu.Path())
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
loadingDialog := loading.Make("Scanning directory", w)
|
||||
loadingDialog.Show()
|
||||
|
||||
go func() {
|
||||
gameID, err := d.Add(name, lu.Path(), "")
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
d := dialog.NewError(fmt.Errorf("failed to create metadata the directory: %w", err), w)
|
||||
d.Show()
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
_, err = d.Scan(gameID)
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
d := dialog.NewError(fmt.Errorf("failed to scan the directory: %w", err), w)
|
||||
d.Show()
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
games, err = d.AllGames()
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
d := dialog.NewError(fmt.Errorf("failed to load datastore: %w", err), w)
|
||||
d.Show()
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
fyne.Do(func() {
|
||||
list.Refresh()
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
}()
|
||||
}, w)
|
||||
confirmDialog.Show()
|
||||
}, w)
|
||||
folderSelection.Show()
|
||||
fyne.Do(func() {
|
||||
list.Refresh()
|
||||
})
|
||||
}),
|
||||
widget.NewToolbarSeparator(),
|
||||
widget.NewToolbarAction(theme.UploadIcon(), func() {
|
||||
doSync(d, w)
|
||||
}),
|
||||
makeScanButton(d, w),
|
||||
widget.NewToolbarSpacer(),
|
||||
widget.NewToolbarAction(theme.HelpIcon(), func() {
|
||||
aboutWindow := about.Make(a)
|
||||
@@ -223,3 +190,96 @@ func syncing(it *iterator.Iterator[remote.Remote], d *data.Service, w fyne.Windo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func makeNewButton(d *data.Service, w fyne.Window, callback func()) *widget.ToolbarAction {
|
||||
return widget.NewToolbarAction(theme.FolderNewIcon(), func() {
|
||||
folderSelection := dialog.NewFolderOpen(func(lu fyne.ListableURI, err error) {
|
||||
if err != nil {
|
||||
d := dialog.NewError(fmt.Errorf("failed to open window: %w", err), w)
|
||||
d.Show()
|
||||
return
|
||||
}
|
||||
if lu == nil {
|
||||
return
|
||||
}
|
||||
confirmDialog := dialog.NewConfirm("Add", "Do you want to add and scan '"+lu.Path()+"'?", func(accepted bool) {
|
||||
if !accepted {
|
||||
return
|
||||
}
|
||||
name := filepath.Base(lu.Path())
|
||||
|
||||
loadingDialog := loading.Make("Scanning directory", w)
|
||||
loadingDialog.Show()
|
||||
|
||||
go func() {
|
||||
gameID, err := d.Add(name, lu.Path(), "")
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
d := dialog.NewError(fmt.Errorf("failed to create metadata the directory: %w", err), w)
|
||||
d.Show()
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
_, err = d.Scan(gameID)
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
d := dialog.NewError(fmt.Errorf("failed to scan the directory: %w", err), w)
|
||||
d.Show()
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
loadingDialog.Hide()
|
||||
callback()
|
||||
}()
|
||||
}, w)
|
||||
confirmDialog.Show()
|
||||
}, w)
|
||||
folderSelection.Show()
|
||||
})
|
||||
}
|
||||
|
||||
func makeScanButton(d *data.Service, w fyne.Window) *widget.ToolbarAction {
|
||||
return widget.NewToolbarAction(theme.SearchIcon(), func() {
|
||||
loadingDialog := loading.Make("Scanning directory", w)
|
||||
loadingDialog.Show()
|
||||
|
||||
go func() {
|
||||
datastore, err := d.AllGames()
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
dialog.NewError(fmt.Errorf("failed to load datastore: %w", err), w)
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
}
|
||||
|
||||
updated := 0
|
||||
|
||||
for _, metadata := range datastore {
|
||||
changed, err := d.Scan(metadata.ID)
|
||||
if err != nil {
|
||||
fyne.Do(func() {
|
||||
dialog.NewError(fmt.Errorf("failed to load datastore: %w", err), w)
|
||||
loadingDialog.Hide()
|
||||
})
|
||||
return
|
||||
}
|
||||
if changed {
|
||||
updated++
|
||||
}
|
||||
}
|
||||
|
||||
fyne.Do(func() {
|
||||
loadingDialog.Hide()
|
||||
if updated == 0 {
|
||||
dialog.NewInformation("Scan", "Everything is up to date", w).Show()
|
||||
} else {
|
||||
dialog.NewInformation("Scan", fmt.Sprintf("%d game updated", updated), w).Show()
|
||||
}
|
||||
})
|
||||
}()
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user