golift.io/starr@v1.0.0/radarr/manualimport.go (about) 1 package radarr 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 MovieID int64 `json:"movieId"` 21 Movie *Movie `json:"movie"` 22 Quality *starr.Quality `json:"quality"` 23 Languages []*starr.Value `json:"languages"` 24 ReleaseGroup string `json:"releaseGroup"` 25 DownloadID string `json:"downloadId"` 26 CustomFormats []*CustomFormatInput `json:"customFormats"` 27 CustomFormatScore int64 `json:"customFormatScore"` 28 Rejections []*Rejection `json:"rejections"` 29 } 30 31 // ManualImportOutput is the output data for a manual import request. 32 type ManualImportOutput struct { 33 ID int64 `json:"id"` 34 Path string `json:"path"` 35 RelativePath string `json:"relativePath"` 36 FolderName string `json:"folderName"` 37 Name string `json:"name"` 38 Size int `json:"size"` 39 Movie *Movie `json:"movie"` 40 Quality *starr.Quality `json:"quality"` 41 Languages []*starr.Value `json:"languages"` 42 ReleaseGroup string `json:"releaseGroup"` 43 QualityWeight int64 `json:"qualityWeight"` 44 DownloadID string `json:"downloadId"` 45 CustomFormats []*CustomFormatOutput `json:"customFormats"` 46 CustomFormatScore int64 `json:"customFormatScore"` 47 Rejections []*Rejection `json:"rejections"` 48 } 49 50 // Rejection is part of the manual import payload. 51 type Rejection struct { 52 Reason string `json:"reason"` 53 // permanent or temporary 54 Type string `json:"type"` 55 } 56 57 // ManualImportParams provides the input parameters for the GET /manualimport API. 58 type ManualImportParams struct { 59 Folder string 60 DownloadID string 61 MovieID int64 62 FilterExistingFiles bool 63 } 64 65 // ManualImport initiates a manual import (GET). 66 func (r *Radarr) ManualImport(params *ManualImportParams) (*ManualImportOutput, error) { 67 return r.ManualImportContext(context.Background(), params) 68 } 69 70 // ManualImportContext initiates a manual import (GET). 71 func (r *Radarr) ManualImportContext(ctx context.Context, params *ManualImportParams) (*ManualImportOutput, error) { 72 var output ManualImportOutput 73 74 req := starr.Request{URI: bpManualImport, Query: make(url.Values)} 75 req.Query.Add("folder", params.Folder) 76 req.Query.Add("downloadId", params.DownloadID) 77 req.Query.Add("movieId", fmt.Sprint(params.MovieID)) 78 req.Query.Add("filterExistingFiles", fmt.Sprint(params.FilterExistingFiles)) 79 80 if err := r.GetInto(ctx, req, &output); err != nil { 81 return nil, fmt.Errorf("api.Get(%s): %w", &req, err) 82 } 83 84 return &output, nil 85 } 86 87 // ManualImportReprocess reprocesses a manual import (POST). 88 func (r *Radarr) ManualImportReprocess(manualimport *ManualImportInput) error { 89 return r.ManualImportReprocessContext(context.Background(), manualimport) 90 } 91 92 // ManualImportReprocessContext reprocesses a manual import (POST). 93 func (r *Radarr) ManualImportReprocessContext(ctx context.Context, manualimport *ManualImportInput) error { 94 var output interface{} 95 96 var body bytes.Buffer 97 if err := json.NewEncoder(&body).Encode(manualimport); err != nil { 98 return fmt.Errorf("json.Marshal(%s): %w", bpManualImport, err) 99 } 100 101 req := starr.Request{URI: bpManualImport, Body: &body} 102 if err := r.PostInto(ctx, req, &output); err != nil { 103 return fmt.Errorf("api.Post(%s): %w", &req, err) 104 } 105 106 return nil 107 }