93 lines
1.7 KiB
Go
93 lines
1.7 KiB
Go
package transmission
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"runtime"
|
|
"seanime/internal/util"
|
|
"time"
|
|
)
|
|
|
|
func (c *Transmission) getExecutableName() string {
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
return "transmission-qt.exe"
|
|
default:
|
|
return "transmission-qt"
|
|
}
|
|
}
|
|
|
|
func (c *Transmission) getExecutablePath() string {
|
|
|
|
if len(c.Path) > 0 {
|
|
return c.Path
|
|
}
|
|
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
return "C:/Program Files/Transmission/transmission-qt.exe"
|
|
case "linux":
|
|
return "/usr/bin/transmission-qt" // Default path for Transmission on most Linux distributions
|
|
case "darwin":
|
|
return "/Applications/Transmission.app/Contents/MacOS/transmission-qt"
|
|
// Default path for Transmission on macOS
|
|
default:
|
|
return "C:/Program Files/Transmission/transmission-qt.exe"
|
|
}
|
|
}
|
|
|
|
func (c *Transmission) Start() error {
|
|
|
|
// If the path is empty, do not check if Transmission is running
|
|
if c.Path == "" {
|
|
return nil
|
|
}
|
|
|
|
name := c.getExecutableName()
|
|
if util.ProgramIsRunning(name) {
|
|
return nil
|
|
}
|
|
|
|
exe := c.getExecutablePath()
|
|
cmd := util.NewCmd(exe)
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
return errors.New("failed to start Transmission")
|
|
}
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Transmission) CheckStart() bool {
|
|
if c == nil {
|
|
return false
|
|
}
|
|
|
|
// If the path is empty, assume it's running
|
|
if c.Path == "" {
|
|
return true
|
|
}
|
|
|
|
_, _, _, err := c.Client.RPCVersion(context.Background())
|
|
if err == nil {
|
|
return true
|
|
}
|
|
|
|
err = c.Start()
|
|
timeout := time.After(30 * time.Second)
|
|
ticker := time.Tick(1 * time.Second)
|
|
for {
|
|
select {
|
|
case <-ticker:
|
|
_, _, _, err := c.Client.RPCVersion(context.Background())
|
|
if err == nil {
|
|
return true
|
|
}
|
|
case <-timeout:
|
|
return false
|
|
}
|
|
}
|
|
}
|