Add hooks functionality
This commit is contained in:
@@ -17,6 +17,7 @@ type ConfigInterface interface {
|
|||||||
GetPort() string
|
GetPort() string
|
||||||
GetDirectories() []string
|
GetDirectories() []string
|
||||||
MeetsConditions(directory, torrentID, torrentName string, fileNames []string) bool
|
MeetsConditions(directory, torrentID, torrentName string, fileNames []string) bool
|
||||||
|
GetOnLibraryUpdate() string
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadZurgConfig(filename string) (ConfigInterface, error) {
|
func LoadZurgConfig(filename string) (ConfigInterface, error) {
|
||||||
|
|||||||
@@ -8,4 +8,37 @@ type ZurgConfig struct {
|
|||||||
RefreshEverySeconds int `yaml:"check_for_changes_every_secs"`
|
RefreshEverySeconds int `yaml:"check_for_changes_every_secs"`
|
||||||
CacheTimeHours int `yaml:"info_cache_time_hours"`
|
CacheTimeHours int `yaml:"info_cache_time_hours"`
|
||||||
CanRepair bool `yaml:"enable_repair"`
|
CanRepair bool `yaml:"enable_repair"`
|
||||||
|
OnLibraryUpdate string `yaml:"on_library_update"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetVersion() string {
|
||||||
|
return "v1"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetToken() string {
|
||||||
|
return z.Token
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetPort() string {
|
||||||
|
return z.Port
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetNumOfWorkers() int {
|
||||||
|
return z.NumOfWorkers
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetRefreshEverySeconds() int {
|
||||||
|
return z.RefreshEverySeconds
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetCacheTimeHours() int {
|
||||||
|
return z.CacheTimeHours
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) EnableRepair() bool {
|
||||||
|
return z.CanRepair
|
||||||
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) GetOnLibraryUpdate() string {
|
||||||
|
return z.OnLibraryUpdate
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,34 +17,6 @@ func loadV1Config(content []byte) (*ZurgConfigV1, error) {
|
|||||||
return &configV1, nil
|
return &configV1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetVersion() string {
|
|
||||||
return "v1"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetToken() string {
|
|
||||||
return z.Token
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetPort() string {
|
|
||||||
return z.Port
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetNumOfWorkers() int {
|
|
||||||
return z.NumOfWorkers
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetRefreshEverySeconds() int {
|
|
||||||
return z.RefreshEverySeconds
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetCacheTimeHours() int {
|
|
||||||
return z.CacheTimeHours
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) EnableRepair() bool {
|
|
||||||
return z.CanRepair
|
|
||||||
}
|
|
||||||
|
|
||||||
func (z *ZurgConfigV1) GetDirectories() []string {
|
func (z *ZurgConfigV1) GetDirectories() []string {
|
||||||
rootDirectories := make([]string, len(z.Directories))
|
rootDirectories := make([]string, len(z.Directories))
|
||||||
i := 0
|
i := 0
|
||||||
|
|||||||
44
internal/torrent/hooks.go
Normal file
44
internal/torrent/hooks.go
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package torrent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/debridmediamanager.com/zurg/internal/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ScriptExecutor struct {
|
||||||
|
Script string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (se *ScriptExecutor) Execute() (string, error) {
|
||||||
|
if se.Script == "" {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
cmd := exec.Command("/bin/sh", "-c", se.Script)
|
||||||
|
var out bytes.Buffer
|
||||||
|
var stderr bytes.Buffer
|
||||||
|
cmd.Stdout = &out
|
||||||
|
cmd.Stderr = &stderr
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("error executing script: %v; stderr: %s", err, stderr.String())
|
||||||
|
}
|
||||||
|
return out.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func OnLibraryUpdateHook(config config.ConfigInterface) {
|
||||||
|
executor := &ScriptExecutor{
|
||||||
|
Script: config.GetOnLibraryUpdate(),
|
||||||
|
}
|
||||||
|
output, err := executor.Execute()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed to execute hook on_library_update:\n%v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if output != "" {
|
||||||
|
log.Printf("Output of hook on_library_update:\n%s\n", output)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -202,6 +202,7 @@ func (t *TorrentManager) startRefreshJob() {
|
|||||||
go t.repairAll(&wg)
|
go t.repairAll(&wg)
|
||||||
}
|
}
|
||||||
go t.mapToDirectories()
|
go t.mapToDirectories()
|
||||||
|
go OnLibraryUpdateHook(t.config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user