package main import ( "context" "encoding/json" "fmt" "io/fs" "os" "github.com/estebangarcia21/subprocess" "github.com/wailsapp/wails/v2/pkg/runtime" ) type Server struct { Name string `json:"name"` Dir string `json:"dir"` Cmd string `json:"cmd"` Url string `json:"url"` Port string `json:"port"` Run string `json:"run"` } func (s *Server) Start() { os.Chdir(s.Dir) //s := subprocess.New(".\\"+name+".exe") p := subprocess.New(s.Cmd) p.ExecAsync() } // App struct type App struct { ctx context.Context } // NewApp creates a new App application struct func NewApp() *App { return &App{} } // startup is called when the app starts. The context is saved // so we can call the runtime methods func (a *App) startup(ctx context.Context) { a.ctx = ctx // runtime.WindowFullscreen(ctx) } // Greet returns a greeting for the given name func (a *App) Greet(name string) string { return fmt.Sprintf("Hello %s, It's show time!", name) } func startLocalServer(name, dir, cmd string) { //os.Chdir("d:\\projects\\" + name); os.Chdir(dir) //s := subprocess.New(".\\"+name+".exe") s := subprocess.New(cmd) s.ExecAsync() } // StartServer - запускает сервер на выполнение func (a *App) StartServer(s string) string { runtime.LogInfo(a.ctx, s) var server Server if err := json.Unmarshal([]byte(s), &server); err != nil { runtime.LogError(a.ctx, err.Error()) } runtime.LogInfo(a.ctx, fmt.Sprintf("server: %v", server)) server.Url = fmt.Sprintf("http://localhost:%s", server.Port) server.Start() runtime.BrowserOpenURL(a.ctx, server.Url) return "starting server" } func (a *App) Weed() { os.Chdir("d:\\projects\\sw4-nano\\util") //s := subprocess.New(".\\"+name+".exe") cmd := "py scanpics.py" s := subprocess.New(cmd) err := s.Exec() if err != nil { runtime.LogError(a.ctx, err.Error()) } runtime.LogInfo(a.ctx, fmt.Sprintf("команда выполнена успешно")) } func getCountPics(dir string) int { pics, err := os.ReadDir("d:\\pics") if err != nil { return -1 } return len(pics) } // The `getCountReady` function is counting the number of files (excluding directories) in a // specified directory. It uses the `fs.WalkDir` function to walk through the file tree starting // from the given directory within a file system. For each file encountered during the walk, it // increments a counter if the file is not a directory. Finally, it returns the total count of // files found in the directory. func getCountReady(ctx context.Context, dir string) int { root := dir fileSystem := os.DirFS(root) cnt := 0 fs.WalkDir(fileSystem, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { runtime.LogError(ctx, err.Error()) } if !d.IsDir() { cnt += 1 } return nil }) return cnt } func (a *App) GetStatus() string { pics := getCountPics("d:\\pics") ready := getCountReady(a.ctx, "d:\\pics-move") return fmt.Sprintf("%d/%d", pics, ready) }