golift.io/starr@v1.0.0/readarr/manualimport.go (about) 1 package readarr 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 Name string `json:"name"` 21 AuthorID int64 `json:"authorID"` 22 BookID int64 `json:"bookID"` 23 ForeignEditionID int64 `json:"foreignEditionId"` 24 Quality *starr.Quality `json:"quality"` 25 ReleaseGroup string `json:"releaseGroup"` 26 DownloadID string `json:"downloadId"` 27 AdditionalFile bool `json:"additionalFile"` 28 ReplaceExistingFiles bool `json:"replaceExistingFiles"` 29 DisableReleaseSwitching bool `json:"disableReleaseSwitching"` 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 Name string `json:"name"` 38 Size int `json:"size"` 39 Author *Author `json:"author"` 40 Book *Book `json:"book"` 41 ForeignEditionID int64 `json:"foreignEditionId"` 42 Quality *starr.Quality `json:"quality"` 43 ReleaseGroup string `json:"releaseGroup"` 44 QualityWeight int64 `json:"qualityWeight"` 45 DownloadID string `json:"downloadId"` 46 AudioTags *AudioTags `json:"audioTags"` 47 AdditionalFile bool `json:"additionalFile"` 48 ReplaceExistingFiles bool `json:"replaceExistingFiles"` 49 DisableReleaseSwitching bool `json:"disableReleaseSwitching"` 50 Rejections []*Rejection `json:"rejections"` 51 } 52 53 // Rejection is part of the manual import payload. 54 type Rejection struct { 55 Reason string `json:"reason"` 56 // permanent or temporary 57 Type string `json:"type"` 58 } 59 60 // ManualImportParams provides the input parameters for the GET /manualimport API. 61 type ManualImportParams struct { 62 Folder string 63 DownloadID string 64 AuthorID int64 65 ReplaceExistingFiles bool 66 FilterExistingFiles bool 67 } 68 69 // ManualImport initiates a manual import (GET). 70 func (r *Readarr) ManualImport(params *ManualImportParams) (*ManualImportOutput, error) { 71 return r.ManualImportContext(context.Background(), params) 72 } 73 74 // ManualImportContext initiates a manual import (GET). 75 func (r *Readarr) ManualImportContext(ctx context.Context, params *ManualImportParams) (*ManualImportOutput, error) { 76 req := starr.Request{URI: bpManualImport, Query: make(url.Values)} 77 req.Query.Add("folder", params.Folder) 78 req.Query.Add("downloadId", params.DownloadID) 79 req.Query.Add("authorId", fmt.Sprint(params.AuthorID)) 80 req.Query.Add("replaceExistingFiles", fmt.Sprint(params.ReplaceExistingFiles)) 81 req.Query.Add("filterExistingFiles", fmt.Sprint(params.FilterExistingFiles)) 82 83 var output ManualImportOutput 84 if err := r.GetInto(ctx, req, &output); err != nil { 85 return nil, fmt.Errorf("api.Get(%s): %w", &req, err) 86 } 87 88 return &output, nil 89 } 90 91 // ManualImportReprocess reprocesses a manual import (POST). 92 func (r *Readarr) ManualImportReprocess(manualimport *ManualImportInput) error { 93 return r.ManualImportReprocessContext(context.Background(), manualimport) 94 } 95 96 // ManualImportReprocessContext reprocesses a manual import (POST). 97 func (r *Readarr) ManualImportReprocessContext(ctx context.Context, manualimport *ManualImportInput) error { 98 var output interface{} 99 100 var body bytes.Buffer 101 if err := json.NewEncoder(&body).Encode(manualimport); err != nil { 102 return fmt.Errorf("json.Marshal(%s): %w", bpManualImport, err) 103 } 104 105 req := starr.Request{URI: bpManualImport, Body: &body} 106 if err := r.PostInto(ctx, req, &output); err != nil { 107 return fmt.Errorf("api.Post(%s): %w", &req, err) 108 } 109 110 return nil 111 }