-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmain.go
More file actions
108 lines (92 loc) · 2.32 KB
/
main.go
File metadata and controls
108 lines (92 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"embed"
"fmt"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"github.com/shirou/gopsutil/v3/process"
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
)
// go:embed all:frontend/dist
var assets embed.FS
func isProcessRunning(name string) (bool, error) {
processes, err := process.Processes()
if err != nil {
return false, err
}
for _, p := range processes {
exe, err := p.Name()
if err == nil && strings.EqualFold(exe, name) {
return true, nil
}
}
return false, nil
}
func startAria2c(downloadDir string) (*exec.Cmd, error) {
running, err := isProcessRunning("aria2c")
if err != nil {
return nil, err
}
if running {
err := fmt.Errorf("aria2c is already running")
return nil, err
} else {
args := []string{"--enable-rpc", "--rpc-listen-all"}
// add download dir if specified
if downloadDir != "" {
args = append(args, "--dir="+downloadDir)
}
cmd := exec.Command("aria2c", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Start(); err != nil {
return nil, fmt.Errorf("aria2c start failed: %v", err)
}
println("✅ aria2c started")
return cmd, nil
}
}
func main() {
// set default download dir(user's home download folder)
homeDir, _ := os.UserHomeDir()
defaultDir := filepath.Join(homeDir, "Downloads")
// if dir doesnt exist, back to home dir
if _, err := os.Stat(defaultDir); os.IsNotExist(err) {
defaultDir = homeDir
}
aria2cCmd, err := startAria2c(defaultDir)
if err != nil {
if err.Error() == "aria2c is already running" {
println("✅ aria2c is already running")
} else {
log.Printf("Error: aria2c couldn't start: %v", err)
os.Exit(1)
}
}
if aria2cCmd != nil {
defer func() {
// Stop aria2c, if it was started by the app
fmt.Println("❌ Stopping Aria2c...")
aria2cCmd.Process.Kill()
}()
}
app := NewApp()
app.downloadDir = defaultDir
if err := wails.Run(&options.App{
Title: "orion",
Width: 800,
Height: 510,
DisableResize: true,
AssetServer: &assetserver.Options{Assets: assets},
BackgroundColour: &options.RGBA{R: 0, G: 0, B: 0, A: 1},
OnStartup: app.startup,
Bind: []interface{}{app},
}); err != nil {
log.Printf("Error: %v", err)
}
}