monorepo/native/desktop/maplefile/main.go

76 lines
2 KiB
Go

package main
import (
"embed"
"flag"
"log"
"os"
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
"github.com/wailsapp/wails/v2/pkg/options/mac"
"github.com/wailsapp/wails/v2/pkg/options/windows"
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/app"
)
//go:embed all:frontend/dist
var assets embed.FS
func main() {
// Parse command-line flags
mode := flag.String("mode", "", "Application mode: dev or production (default: production)")
flag.Parse()
// Validate mode (empty means use default which is production)
if *mode != "" && *mode != "dev" && *mode != "development" && *mode != "production" {
log.Fatalf("Invalid mode: %s. Must be 'dev' or 'production'", *mode)
}
// Set environment variable for the application to use
os.Setenv("MAPLEFILE_MODE", *mode)
log.Printf("MapleFile starting in %s mode", *mode)
// Initialize application with Wire DI
application, err := app.InitializeApplication()
if err != nil {
log.Fatalf("Failed to initialize application: %v", err)
}
// Create Wails application with options
err = wails.Run(&options.App{
Title: "MapleFile",
Width: 1440,
Height: 900,
AssetServer: &assetserver.Options{
Assets: assets,
},
BackgroundColour: &options.RGBA{R: 236, G: 240, B: 241, A: 1},
OnStartup: application.Startup,
OnShutdown: application.Shutdown,
Bind: []interface{}{
application,
},
// Disable browser-style right-click context menu to prevent
// "Refresh" from crashing the app
EnableDefaultContextMenu: false,
// Platform-specific options
Mac: &mac.Options{
// Use default title bar for standard macOS window behavior
// (draggable title bar, proper traffic light buttons)
TitleBar: mac.TitleBarDefault(),
WebviewIsTransparent: false,
WindowIsTranslucent: false,
},
Windows: &windows.Options{
WebviewIsTransparent: false,
WindowIsTranslucent: false,
},
})
if err != nil {
log.Fatalf("Failed to run application: %v", err)
}
}