2024-05-10 05:24:24 +02:00
|
|
|
// Copyright 2024, Command Line Inc.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
// Note, main.go needs to be in the root of the project for the go:embed directive to work.
|
|
|
|
|
|
|
|
import (
|
|
|
|
"embed"
|
|
|
|
"log"
|
|
|
|
|
2024-05-12 18:52:12 +02:00
|
|
|
"github.com/wavetermdev/thenextwave/pkg/blockstore"
|
2024-05-14 22:34:41 +02:00
|
|
|
"github.com/wavetermdev/thenextwave/pkg/eventbus"
|
|
|
|
"github.com/wavetermdev/thenextwave/pkg/service/blockservice"
|
2024-05-14 18:37:41 +02:00
|
|
|
"github.com/wavetermdev/thenextwave/pkg/service/fileservice"
|
2024-05-12 18:52:12 +02:00
|
|
|
"github.com/wavetermdev/thenextwave/pkg/wavebase"
|
|
|
|
|
2024-05-10 05:24:24 +02:00
|
|
|
"github.com/wailsapp/wails/v3/pkg/application"
|
2024-05-16 23:00:39 +02:00
|
|
|
"github.com/wailsapp/wails/v3/pkg/events"
|
2024-05-10 05:24:24 +02:00
|
|
|
)
|
|
|
|
|
2024-05-14 06:42:25 +02:00
|
|
|
//go:embed dist
|
2024-05-10 05:24:24 +02:00
|
|
|
var assets embed.FS
|
|
|
|
|
|
|
|
//go:embed build/appicon.png
|
|
|
|
var appIcon []byte
|
|
|
|
|
2024-05-16 23:00:39 +02:00
|
|
|
func createAppMenu(app *application.App) *application.Menu {
|
|
|
|
menu := application.NewMenu()
|
|
|
|
menu.AddRole(application.AppMenu)
|
|
|
|
fileMenu := menu.AddSubmenu("File")
|
|
|
|
newWindow := fileMenu.Add("New Window")
|
|
|
|
newWindow.OnClick(func(appContext *application.Context) {
|
|
|
|
createWindow(app)
|
|
|
|
})
|
|
|
|
closeWindow := fileMenu.Add("Close Window")
|
|
|
|
closeWindow.OnClick(func(appContext *application.Context) {
|
|
|
|
app.CurrentWindow().Close()
|
|
|
|
})
|
|
|
|
menu.AddRole(application.EditMenu)
|
|
|
|
menu.AddRole(application.ViewMenu)
|
|
|
|
menu.AddRole(application.WindowMenu)
|
|
|
|
menu.AddRole(application.HelpMenu)
|
|
|
|
return menu
|
|
|
|
}
|
|
|
|
|
|
|
|
func createWindow(app *application.App) {
|
|
|
|
window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
|
|
|
|
Title: "Wave Terminal",
|
|
|
|
Mac: application.MacWindow{
|
|
|
|
InvisibleTitleBarHeight: 50,
|
|
|
|
Backdrop: application.MacBackdropTranslucent,
|
|
|
|
TitleBar: application.MacTitleBarHiddenInset,
|
|
|
|
},
|
|
|
|
BackgroundColour: application.NewRGB(27, 38, 54),
|
|
|
|
URL: "/public/index.html",
|
|
|
|
})
|
|
|
|
eventbus.RegisterWailsWindow(window)
|
|
|
|
window.On(events.Common.WindowClosing, func(event *application.WindowEvent) {
|
|
|
|
eventbus.UnregisterWailsWindow(window.ID())
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2024-05-10 05:24:24 +02:00
|
|
|
func main() {
|
2024-05-12 18:52:12 +02:00
|
|
|
err := wavebase.EnsureWaveHomeDir()
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("error ensuring wave home dir: %v\n", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
log.Printf("wave home dir: %s\n", wavebase.GetWaveHomeDir())
|
|
|
|
err = blockstore.InitBlockstore()
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("error initializing blockstore: %v\n", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-10 05:24:24 +02:00
|
|
|
app := application.New(application.Options{
|
|
|
|
Name: "NextWave",
|
|
|
|
Description: "The Next Wave Terminal",
|
|
|
|
Bind: []any{
|
2024-05-14 18:37:41 +02:00
|
|
|
&fileservice.FileService{},
|
2024-05-14 22:34:41 +02:00
|
|
|
&blockservice.BlockService{},
|
2024-05-10 05:24:24 +02:00
|
|
|
},
|
|
|
|
Icon: appIcon,
|
|
|
|
Assets: application.AssetOptions{
|
|
|
|
Handler: application.AssetFileServerFS(assets),
|
|
|
|
},
|
|
|
|
Mac: application.MacOptions{
|
|
|
|
ApplicationShouldTerminateAfterLastWindowClosed: true,
|
|
|
|
},
|
|
|
|
})
|
2024-05-16 23:00:39 +02:00
|
|
|
menu := createAppMenu(app)
|
|
|
|
app.SetMenu(menu)
|
2024-05-14 22:34:41 +02:00
|
|
|
eventbus.RegisterWailsApp(app)
|
2024-05-10 05:24:24 +02:00
|
|
|
|
2024-05-16 23:00:39 +02:00
|
|
|
createWindow(app)
|
2024-05-14 22:34:41 +02:00
|
|
|
|
|
|
|
eventbus.Start()
|
|
|
|
defer eventbus.Shutdown()
|
2024-05-10 05:24:24 +02:00
|
|
|
|
|
|
|
// blocking
|
2024-05-12 18:52:12 +02:00
|
|
|
err = app.Run()
|
2024-05-10 05:24:24 +02:00
|
|
|
|
|
|
|
// If an error occurred while running the application, log it and exit.
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("run error: %v\n", err)
|
|
|
|
}
|
|
|
|
}
|