starmusic-pc
1package main
2
3import (
4 "embed"
5 "net/http"
6 "os"
7 "path/filepath"
8
9 "github.com/wailsapp/wails/v2"
10 "github.com/wailsapp/wails/v2/pkg/options"
11 "github.com/wailsapp/wails/v2/pkg/options/assetserver"
12 "github.com/wailsapp/wails/v2/pkg/options/windows"
13)
14
15//go:embed all:frontend/dist
16var assets embed.FS
17
18func main() {
19 app := NewApp()
20
21 // 应用数据根目录:%AppData%\starmusic-pc
22 // 若不显式指定 WebviewUserDataPath,WebView2 会默认用 %AppData%\starmusic.exe
23 // (带 .exe 后缀,且与日志目录分离)。这里统一到同一个文件夹,便于用户查找与备份。
24 dataDir := appDataDir()
25 _ = os.MkdirAll(dataDir, 0o755)
26 // WebView2 会在该目录下创建 EBWebView\...(localStorage / IndexedDB / Cache 都在里面)
27 _ = os.MkdirAll(filepath.Join(dataDir, "webview"), 0o755)
28
29 err := wails.Run(&options.App{
30 Title: "星音乐 star-music",
31 // 下面四个尺寸只是"期望值":窗口创建后会在 domReady 里按
32 // 实际屏幕可用区域校准(见 app.go 的 fitWindowToScreen),
33 // 屏幕小的机器会自动收缩,不会超出屏幕范围。
34 Width: designWindowWidth,
35 Height: designWindowHeight,
36 MinWidth: minWindowWidth,
37 MinHeight: minWindowHeight,
38 Frameless: true,
39 DisableResize: false,
40 // 先隐藏,等尺寸校准完成后再显示:
41 // 否则会先按大尺寸弹出来、再缩回去,出现明显闪动
42 StartHidden: true,
43 BackgroundColour: &options.RGBA{R: 245, G: 246, B: 248, A: 1},
44 AssetServer: &assetserver.Options{
45 Assets: assets,
46 // 未命中内嵌资源时交给自定义处理器(/audioproxy 本地音频代理,
47 // 供前端同源拉流以实现真实音频频谱,见 proxy.go)
48 Handler: http.HandlerFunc(app.audioProxy),
49 },
50 Windows: &windows.Options{
51 WebviewUserDataPath: filepath.Join(dataDir, "webview"),
52 },
53 OnStartup: app.startup,
54 OnDomReady: app.domReady,
55 OnShutdown: app.shutdown,
56 Bind: []interface{}{
57 app,
58 },
59 })
60
61 if err != nil {
62 println("Error:", err.Error())
63 }
64}