node build fixed

This commit is contained in:
ra_ma
2025-09-20 14:08:38 +01:00
parent c6ebbe069d
commit 3d298fa434
1516 changed files with 535727 additions and 2 deletions

View File

@@ -0,0 +1,92 @@
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
}
}
}

View File

@@ -0,0 +1,62 @@
package transmission
import (
"fmt"
"github.com/hekmon/transmissionrpc/v3"
"github.com/rs/zerolog"
"net/url"
"strings"
)
type (
Transmission struct {
Client *transmissionrpc.Client
Path string
Logger *zerolog.Logger
}
NewTransmissionOptions struct {
Path string
Logger *zerolog.Logger
Username string
Password string
Host string // Default: 127.0.0.1
Port int
}
)
func New(options *NewTransmissionOptions) (*Transmission, error) {
// Set default host
if options.Host == "" {
options.Host = "127.0.0.1"
}
baseUrl := fmt.Sprintf("http://%s:%s@%s:%d/transmission/rpc",
options.Username,
url.QueryEscape(options.Password),
options.Host,
options.Port,
)
if strings.HasPrefix(options.Host, "https://") {
options.Host = strings.TrimPrefix(options.Host, "https://")
baseUrl = fmt.Sprintf("https://%s:%s@%s:%d/transmission/rpc",
options.Username,
url.QueryEscape(options.Password),
options.Host,
options.Port,
)
}
_url, err := url.Parse(baseUrl)
if err != nil {
return nil, err
}
client, _ := transmissionrpc.New(_url, nil)
return &Transmission{
Client: client,
Path: options.Path,
Logger: options.Logger,
}, nil
}

View File

@@ -0,0 +1,106 @@
package transmission
import (
"context"
"github.com/davecgh/go-spew/spew"
"github.com/hekmon/transmissionrpc/v3"
"github.com/stretchr/testify/assert"
"seanime/internal/test_utils"
"seanime/internal/util"
"testing"
"time"
)
//func TestGetActiveTorrents(t *testing.T) {
// t.Skip("Provide magnets")
// test_utils.InitTestProvider(t, test_utils.TorrentClient())
//
// trans, err := New(&NewTransmissionOptions{
// Host: test_utils.ConfigData.Provider.TransmissionHost,
// Path: test_utils.ConfigData.Provider.TransmissionPath,
// Port: test_utils.ConfigData.Provider.TransmissionPort,
// Username: test_utils.ConfigData.Provider.TransmissionUsername,
// Password: test_utils.ConfigData.Provider.TransmissionPassword,
// Logger: util.NewLogger(),
// })
// if err != nil {
// t.Fatal(err)
// }
//
//}
func TestGetFiles(t *testing.T) {
t.Skip("Provide magnets")
test_utils.InitTestProvider(t, test_utils.TorrentClient())
tempDir := t.TempDir()
tests := []struct {
name string
url string
magnet string
mediaId int
expectedNbFiles int
}{
{
name: "[EMBER] Demon Slayer (2023) (Season 3)",
url: "https://animetosho.org/view/ember-demon-slayer-2023-season-3-bdrip-1080p.n1778316",
magnet: "",
mediaId: 145139,
expectedNbFiles: 11,
},
{
name: "[Tenrai-Sensei] Kakegurui (Season 1-2 + OVAs)",
url: "https://nyaa.si/view/1553978",
magnet: "",
mediaId: 98314,
expectedNbFiles: 27,
},
}
trans, err := New(&NewTransmissionOptions{
Host: test_utils.ConfigData.Provider.TransmissionHost,
Path: test_utils.ConfigData.Provider.TransmissionPath,
Port: test_utils.ConfigData.Provider.TransmissionPort,
Username: test_utils.ConfigData.Provider.TransmissionUsername,
Password: test_utils.ConfigData.Provider.TransmissionPassword,
Logger: util.NewLogger(),
})
if err != nil {
t.Fatal(err)
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
to, err := trans.Client.TorrentAdd(context.Background(), transmissionrpc.TorrentAddPayload{
Filename: &tt.magnet,
DownloadDir: &tempDir,
})
if assert.NoError(t, err) {
time.Sleep(20 * time.Second)
// Get files
torrents, err := trans.Client.TorrentGetAllFor(context.Background(), []int64{*to.ID})
to = torrents[0]
spew.Dump(to.Files)
// Remove torrent
err = trans.Client.TorrentRemove(context.Background(), transmissionrpc.TorrentRemovePayload{
IDs: []int64{*to.ID},
DeleteLocalData: true,
})
assert.NoError(t, err)
}
})
}
}