114 lines
2.4 KiB
Go
114 lines
2.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"github.com/loveuer/nf-disk/ndh"
|
|
"github.com/samber/lo"
|
|
"github.com/wailsapp/wails/v2/pkg/runtime"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
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})
|
|
}
|
|
}
|
|
|
|
func DialogSave(ctx context.Context) ndh.Handler {
|
|
return func(c *ndh.Ctx) error {
|
|
type Req struct {
|
|
Title string `json:"title"`
|
|
Filters []string `json:"filters"`
|
|
DefaultDirectory string `json:"default_directory"`
|
|
DefaultFilename string `json:"default_filename"`
|
|
}
|
|
|
|
var (
|
|
err error
|
|
req = new(Req)
|
|
opt = runtime.SaveDialogOptions{
|
|
Title: "将文件保存到",
|
|
}
|
|
result any
|
|
)
|
|
|
|
if err = c.ReqParse(req); err != nil {
|
|
return c.Send400(err.Error())
|
|
}
|
|
|
|
if req.Title != "" {
|
|
opt.Title = req.Title
|
|
}
|
|
|
|
if req.DefaultFilename != "" {
|
|
opt.DefaultFilename = req.DefaultFilename
|
|
}
|
|
|
|
if req.DefaultDirectory != "" {
|
|
opt.DefaultDirectory = req.DefaultDirectory
|
|
}
|
|
|
|
if opt.DefaultDirectory == "" {
|
|
var home string
|
|
if home, err = os.UserHomeDir(); err != nil {
|
|
opt.DefaultDirectory = filepath.Join(home, "Downloads")
|
|
}
|
|
}
|
|
|
|
if len(req.Filters) > 0 {
|
|
opt.Filters = lo.Map(req.Filters, func(item string, index int) runtime.FileFilter {
|
|
return runtime.FileFilter{Pattern: item}
|
|
})
|
|
}
|
|
|
|
if result, err = runtime.SaveFileDialog(ctx, opt); err != nil {
|
|
return c.Send500(err.Error())
|
|
}
|
|
|
|
return c.Send200(map[string]interface{}{"result": result})
|
|
}
|
|
}
|