golift.io/starr@v1.0.0/sonarr/manualimport.go (about) 1 package sonarr 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/json" 7 "fmt" 8 "net/url" 9 10 "golift.io/starr" 11 ) 12 13 // Define Base Path for Manual Import calls. 14 const bpManualImport = APIver + "/manualimport" 15 16 // ManualImportInput is the input data for a manual import request using a POST request. 17 type ManualImportInput struct { 18 ID int64 `json:"id"` 19 Path string `json:"path"` 20 SeriesID int64 `json:"seriesId"` 21 SeasonNumber int `json:"seasonNumber"` 22 Episodes []*Episode `json:"episodes"` 23 EpisodeIDs []int64 `json:"episodeIds"` 24 Quality *starr.Quality `json:"quality"` 25 Languages []*starr.Value `json:"languages"` 26 ReleaseGroup string `json:"releaseGroup"` 27 DownloadID string `json:"downloadId"` 28 CustomFormats []*CustomFormatInput `json:"customFormats"` 29 CustomFormatScore int64 `json:"customFormatScore"` 30 Rejections []*Rejection `json:"rejections"` 31 } 32 33 // ManualImportOutput is the output data for a manual import request. 34 type ManualImportOutput struct { 35 ID int64 `json:"id"` 36 Path string `json:"path"` 37 RelativePath string `json:"relativePath"` 38 FolderName string `json:"folderName"` 39 Name string `json:"name"` 40 Size int `json:"size"` 41 Series *Series `json:"series"` 42 SeasonNumber int `json:"seasonNumber"` 43 Episodes []*Episode `json:"episodes"` 44 EpisodeFileID int64 `json:"episodeFileId"` 45 Quality *starr.Quality `json:"quality"` 46 Languages []*starr.Value `json:"languages"` 47 ReleaseGroup string `json:"releaseGroup"` 48 QualityWeight int64 `json:"qualityWeight"` 49 DownloadID string `json:"downloadId"` 50 CustomFormats []*CustomFormatOutput `json:"customFormats"` 51 CustomFormatScore int64 `json:"customFormatScore"` 52 Rejections []*Rejection `json:"rejections"` 53 } 54 55 // Rejection is part of the manual import payload. 56 type Rejection struct { 57 Reason string `json:"reason"` 58 // permanent or temporary 59 Type string `json:"type"` 60 } 61 62 // ManualImportParams provides the input parameters for the GET /manualimport API. 63 type ManualImportParams struct { 64 Folder string 65 DownloadID string 66 SeriesID int64 67 SeasonNumber int 68 FilterExistingFiles bool 69 } 70 71 // ManualImport initiates a manual import (GET). 72 func (s *Sonarr) ManualImport(params *ManualImportParams) (*ManualImportOutput, error) { 73 return s.ManualImportContext(context.Background(), params) 74 } 75 76 // ManualImportContext initiates a manual import (GET). 77 func (s *Sonarr) ManualImportContext(ctx context.Context, params *ManualImportParams) (*ManualImportOutput, error) { 78 var output ManualImportOutput 79 80 req := starr.Request{URI: bpManualImport, Query: make(url.Values)} 81 req.Query.Add("folder", params.Folder) 82 req.Query.Add("downloadId", params.DownloadID) 83 req.Query.Add("seriesId", fmt.Sprint(params.SeriesID)) 84 req.Query.Add("seasonNumber", fmt.Sprint(params.SeasonNumber)) 85 req.Query.Add("filterExistingFiles", fmt.Sprint(params.FilterExistingFiles)) 86 87 if err := s.GetInto(ctx, req, &output); err != nil { 88 return nil, fmt.Errorf("api.Get(%s): %w", &req, err) 89 } 90 91 return &output, nil 92 } 93 94 // ManualImportReprocess reprocesses a manual import (POST). 95 func (s *Sonarr) ManualImportReprocess(manualimport *ManualImportInput) error { 96 return s.ManualImportReprocessContext(context.Background(), manualimport) 97 } 98 99 // ManualImportReprocessContext reprocesses a manual import (POST). 100 func (s *Sonarr) ManualImportReprocessContext(ctx context.Context, manualimport *ManualImportInput) error { 101 var output interface{} 102 103 var body bytes.Buffer 104 if err := json.NewEncoder(&body).Encode(manualimport); err != nil { 105 return fmt.Errorf("json.Marshal(%s): %w", bpManualImport, err) 106 } 107 108 req := starr.Request{URI: bpManualImport, Body: &body} 109 if err := s.PostInto(ctx, req, &output); err != nil { 110 return fmt.Errorf("api.Post(%s): %w", &req, err) 111 } 112 113 return nil 114 }