57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
|
package handler
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/loveuer/nf-disk/ndh"
|
||
|
"github.com/samber/lo"
|
||
|
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||
|
)
|
||
|
|
||
|
func DialogOpen(ctx context.Context) ndh.Handler {
|
||
|
return func(c *ndh.Ctx) error {
|
||
|
type Req struct {
|
||
|
Title string `json:"title"`
|
||
|
Type string `json:"type"` // "dir", "multi", ""
|
||
|
Filters []string `json:"filters"`
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
err error
|
||
|
req = new(Req)
|
||
|
opt = runtime.OpenDialogOptions{
|
||
|
Title: "请选择文件",
|
||
|
}
|
||
|
result any
|
||
|
)
|
||
|
|
||
|
if err = c.ReqParse(req); err != nil {
|
||
|
return c.Send400(err.Error())
|
||
|
}
|
||
|
|
||
|
if req.Title != "" {
|
||
|
opt.Title = req.Title
|
||
|
}
|
||
|
|
||
|
if len(req.Filters) > 0 {
|
||
|
opt.Filters = lo.Map(req.Filters, func(item string, index int) runtime.FileFilter {
|
||
|
return runtime.FileFilter{Pattern: item}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
switch req.Type {
|
||
|
case "dir":
|
||
|
result, err = runtime.OpenDirectoryDialog(ctx, opt)
|
||
|
case "multi":
|
||
|
result, err = runtime.OpenMultipleFilesDialog(ctx, opt)
|
||
|
default:
|
||
|
result, err = runtime.OpenFileDialog(ctx, opt)
|
||
|
}
|
||
|
|
||
|
if err != nil {
|
||
|
return c.Send500(err.Error())
|
||
|
}
|
||
|
|
||
|
return c.Send200(map[string]interface{}{"result": result})
|
||
|
}
|
||
|
}
|