60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
"seanime/internal/util"
|
|
"strings"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
// HandleOpenInExplorer
|
|
//
|
|
// @summary opens the given directory in the file explorer.
|
|
// @desc It returns 'true' whether the operation was successful or not.
|
|
// @route /api/v1/open-in-explorer [POST]
|
|
// @returns bool
|
|
func (h *Handler) HandleOpenInExplorer(c echo.Context) error {
|
|
|
|
type body struct {
|
|
Path string `json:"path"`
|
|
}
|
|
|
|
p := new(body)
|
|
if err := c.Bind(p); err != nil {
|
|
return h.RespondWithError(c, err)
|
|
}
|
|
|
|
OpenDirInExplorer(p.Path)
|
|
|
|
return h.RespondWithData(c, true)
|
|
}
|
|
|
|
func OpenDirInExplorer(dir string) {
|
|
if dir == "" {
|
|
return
|
|
}
|
|
|
|
cmd := ""
|
|
var args []string
|
|
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
cmd = "explorer"
|
|
args = []string{strings.ReplaceAll(strings.ToLower(dir), "/", "\\")}
|
|
case "darwin":
|
|
cmd = "open"
|
|
args = []string{dir}
|
|
case "linux":
|
|
cmd = "xdg-open"
|
|
args = []string{dir}
|
|
default:
|
|
return
|
|
}
|
|
cmdObj := util.NewCmd(cmd, args...)
|
|
cmdObj.Stdout = os.Stdout
|
|
cmdObj.Stderr = os.Stderr
|
|
_ = cmdObj.Run()
|
|
}
|