feat: optimize software installation on windows and add information splash screen on startup

This commit is contained in:
Patryk Hegenberg 2025-03-21 15:12:48 +01:00
parent 111756ffe5
commit d851c1b628
4 changed files with 50 additions and 12 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
.settings/
MacOSX11.3.sdk
MacOSX11.3.sdk.tar.xz
packages

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 259 KiB

Before After
Before After

View file

@ -1,4 +1,3 @@
// cmd/jws/main.go
package main
import (
@ -16,8 +15,10 @@ import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
//go:embed all:projects
@ -47,19 +48,56 @@ func main() {
os.Exit(1)
}
logger.Logger.Info("Applikation started")
logger.Logger.Info("Application started")
a := app.New()
showSplashScreen(a, func() {
createMainWindow(a, config)
})
a.Run()
}
func showSplashScreen(a fyne.App, onComplete func()) {
splash := a.NewWindow("Important Information")
splash.SetFixedSize(true)
splash.CenterOnScreen()
splash.SetPadded(true)
title := widget.NewLabel("JakartaEE & Spring Boot Starter")
title.TextStyle = fyne.TextStyle{Bold: true}
title.Alignment = fyne.TextAlignCenter
infoText := widget.NewLabel("Please note:\n\n" +
"• On Windows, a functional Winget installation is required.\n" +
"• Administrator rights may be needed at some points.\n\n" +
"Click 'Continue' when you're ready to proceed.")
infoText.Wrapping = fyne.TextWrapWord
continueButton := widget.NewButton("Continue", func() {
splash.Close()
onComplete()
})
content := container.NewVBox(
title,
infoText,
continueButton,
)
splash.SetContent(content)
splash.Show()
}
func createMainWindow(a fyne.App, config *config.Config) {
mainWindow = a.NewWindow("JakartaEE & Spring Boot Starter")
mainWindow.Resize(fyne.NewSize(600, 600))
// mainWindow.SetFixedSize(true)
// Initialize dependencies
dependencies = []dependency.Dependency{
{Name: "Visual Studio Code", Installed: false, Icon: theme.DocumentIcon()},
{Name: "Docker", Installed: false, Icon: theme.MediaPlayIcon()},
}
// Standard projects
standartProjects := []project.Project{
{
Name: "JakartaEE Todo-App mit Servlet",
@ -83,7 +121,6 @@ func main() {
},
}
// Load additional projects from projects.json
pluginProjects, err := loadProjects(filepath.Join(config.ProjectsPath, "projects.json"))
if err != nil {
dialog.ShowError(fmt.Errorf("error loading projects: %v", err), mainWindow)
@ -92,11 +129,9 @@ func main() {
projects = append(standartProjects, pluginProjects...)
// Initialize packages
gui.Init(mainWindow, dependencies, projects, projectsFS)
project.Init(projects, config)
// Check dependencies
dependency.CheckDependencies(dependencies)
allInstalled := true
for _, dep := range dependencies {
@ -106,14 +141,13 @@ func main() {
}
}
// Show appropriate screen
if allInstalled {
gui.ShowProjectScreen()
} else {
gui.ShowDependencyScreen()
}
mainWindow.ShowAndRun()
mainWindow.Show()
}
func loadProjects(filePath string) ([]project.Project, error) {

View file

@ -126,7 +126,7 @@ func installWindowsDependencies(index int, cmd *exec.Cmd, mainWindow *fyne.Windo
switch index {
case 0: // VSCode
cmd = tools.CommandInShell("winget", "install", "-e", "--id",
"Microsoft.VisualStudioCode")
"Microsoft.VisualStudioCode", "--accept-package-agreements", "--accept-source-agreements", "--silent")
case 1: // Docker Desktop
wslCheckCmd := tools.CommandInShell("wsl", "--status")
err := wslCheckCmd.Run()
@ -154,7 +154,7 @@ func installWindowsDependencies(index int, cmd *exec.Cmd, mainWindow *fyne.Windo
return nil, err
}
cmd = tools.CommandInShell("winget", "install", "-e", "--id",
"Docker.DockerDesktop")
"Docker.DockerDesktop", "--accept-package-agreements", "--accept-source-agreements", "--silent")
}
return cmd, nil
}