diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15486c1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.settings/ +MacOSX11.3.sdk +MacOSX11.3.sdk.tar.xz +packages diff --git a/cmd/jws/Icon.png b/cmd/jws/Icon.png index b9c666c..b978900 100644 Binary files a/cmd/jws/Icon.png and b/cmd/jws/Icon.png differ diff --git a/cmd/jws/main.go b/cmd/jws/main.go index e3fcdf0..7a48054 100644 --- a/cmd/jws/main.go +++ b/cmd/jws/main.go @@ -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) { diff --git a/internal/dependency/dependency.go b/internal/dependency/dependency.go index 95516c8..c6d43ed 100644 --- a/internal/dependency/dependency.go +++ b/internal/dependency/dependency.go @@ -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 }