fix(actions): watch folder (#780)

* fix(macros): Download torrent for watchfolders

* use in-memory torrent for watchfolder

* Update run.go
This commit is contained in:
Kyle Sanderson 2023-03-22 13:57:18 -07:00 committed by GitHub
parent 81d494ec5c
commit 0564f0bf7a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 9 deletions

View file

@ -163,12 +163,9 @@ func (s *service) watchFolder(ctx context.Context, action *domain.Action, releas
s.log.Trace().Msgf("action WATCH_FOLDER: %v file: %v", action.WatchFolder, release.TorrentTmpFile) s.log.Trace().Msgf("action WATCH_FOLDER: %v file: %v", action.WatchFolder, release.TorrentTmpFile)
// Open original file if len(release.TorrentDataRawBytes) < 1 {
original, err := os.Open(release.TorrentTmpFile) return fmt.Errorf("watch_folder: missing torrent %s", release.TorrentName)
if err != nil {
return errors.Wrap(err, "could not open temp file: %v", release.TorrentTmpFile)
} }
defer original.Close()
// default dir to watch folder // default dir to watch folder
// /mnt/watch/{{.Indexer}} // /mnt/watch/{{.Indexer}}
@ -188,7 +185,7 @@ func (s *service) watchFolder(ctx context.Context, action *domain.Action, releas
} }
// Create folder // Create folder
if err = os.MkdirAll(dir, os.ModePerm); err != nil { if err := os.MkdirAll(dir, os.ModePerm); err != nil {
return errors.Wrap(err, "could not create new folders %v", dir) return errors.Wrap(err, "could not create new folders %v", dir)
} }
@ -200,7 +197,7 @@ func (s *service) watchFolder(ctx context.Context, action *domain.Action, releas
defer newFile.Close() defer newFile.Close()
// Copy file // Copy file
if _, err := io.Copy(newFile, original); err != nil { if _, err := io.Copy(newFile, bytes.NewReader(release.TorrentDataRawBytes)); err != nil {
return errors.Wrap(err, "could not copy file %v to watch folder", newFileName) return errors.Wrap(err, "could not copy file %v to watch folder", newFileName)
} }

View file

@ -59,7 +59,7 @@ func (a *Action) ParseMacros(release *Release) error {
if release.TorrentTmpFile == "" && if release.TorrentTmpFile == "" &&
(strings.Contains(a.ExecArgs, "TorrentPathName") || strings.Contains(a.ExecArgs, "TorrentDataRawBytes") || (strings.Contains(a.ExecArgs, "TorrentPathName") || strings.Contains(a.ExecArgs, "TorrentDataRawBytes") ||
strings.Contains(a.WebhookData, "TorrentPathName") || strings.Contains(a.WebhookData, "TorrentDataRawBytes") || strings.Contains(a.WebhookData, "TorrentPathName") || strings.Contains(a.WebhookData, "TorrentDataRawBytes") ||
strings.Contains(a.SavePath, "TorrentPathName")) { strings.Contains(a.SavePath, "TorrentPathName") || a.Type == ActionTypeWatchFolder) {
if err := release.DownloadTorrentFile(); err != nil { if err := release.DownloadTorrentFile(); err != nil {
return errors.Wrap(err, "webhook: could not download torrent file for release: %v", release.TorrentName) return errors.Wrap(err, "webhook: could not download torrent file for release: %v", release.TorrentName)
} }
@ -67,7 +67,8 @@ func (a *Action) ParseMacros(release *Release) error {
// if webhook data contains TorrentDataRawBytes, lets read the file into bytes we can then use in the macro // if webhook data contains TorrentDataRawBytes, lets read the file into bytes we can then use in the macro
if len(release.TorrentDataRawBytes) == 0 && if len(release.TorrentDataRawBytes) == 0 &&
(strings.Contains(a.ExecArgs, "TorrentDataRawBytes") || strings.Contains(a.WebhookData, "TorrentDataRawBytes")) { (strings.Contains(a.ExecArgs, "TorrentDataRawBytes") || strings.Contains(a.WebhookData, "TorrentDataRawBytes") ||
a.Type == ActionTypeWatchFolder) {
t, err := os.ReadFile(release.TorrentTmpFile) t, err := os.ReadFile(release.TorrentTmpFile)
if err != nil { if err != nil {
return errors.Wrap(err, "could not read torrent file: %v", release.TorrentTmpFile) return errors.Wrap(err, "could not read torrent file: %v", release.TorrentTmpFile)