golift.io/starr@v1.0.0/lidarr/manualimport.go (about) 1 package lidarr 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 ArtistID int64 `json:"artistID"` 22 AlbumID int64 `json:"albumID"` 23 AlbumReleaseID int64 `json:"albumReleaseId"` 24 Tracks []*Track `json:"tracks"` 25 TrackIDs []int64 `json:"trackIds"` 26 Quality *starr.Quality `json:"quality"` 27 ReleaseGroup string `json:"releaseGroup"` 28 DownloadID string `json:"downloadId"` 29 AdditionalFile bool `json:"additionalFile"` 30 ReplaceExistingFiles bool `json:"replaceExistingFiles"` 31 DisableReleaseSwitching bool `json:"disableReleaseSwitching"` 32 Rejections []*Rejection `json:"rejections"` 33 } 34 35 // ManualImportOutput is the output data for a manual import request. 36 type ManualImportOutput struct { 37 ID int64 `json:"id"` 38 Path string `json:"path"` 39 Name string `json:"name"` 40 Size int `json:"size"` 41 Artist *Artist `json:"artist"` 42 Album *Album `json:"album"` 43 AlbumReleaseID int64 `json:"albumReleaseId"` 44 Tracks []*Track `json:"tracks"` 45 Quality *starr.Quality `json:"quality"` 46 ReleaseGroup string `json:"releaseGroup"` 47 QualityWeight int64 `json:"qualityWeight"` 48 DownloadID string `json:"downloadId"` 49 AudioTags *AudioTags `json:"audioTags"` 50 AdditionalFile bool `json:"additionalFile"` 51 ReplaceExistingFiles bool `json:"replaceExistingFiles"` 52 DisableReleaseSwitching bool `json:"disableReleaseSwitching"` 53 Rejections []*Rejection `json:"rejections"` 54 } 55 56 // Rejection is part of the manual import payload. 57 type Rejection struct { 58 Reason string `json:"reason"` 59 // permanent or temporary 60 Type string `json:"type"` 61 } 62 63 // ManualImportParams provides the input parameters for the GET /manualimport API. 64 type ManualImportParams struct { 65 Folder string 66 DownloadID string 67 ArtistID int64 68 ReplaceExistingFiles bool 69 FilterExistingFiles bool 70 } 71 72 // ManualImport initiates a manual import (GET). 73 func (l *Lidarr) ManualImport(params *ManualImportParams) (*ManualImportOutput, error) { 74 return l.ManualImportContext(context.Background(), params) 75 } 76 77 // ManualImportContext initiates a manual import (GET). 78 func (l *Lidarr) ManualImportContext(ctx context.Context, params *ManualImportParams) (*ManualImportOutput, error) { 79 req := starr.Request{URI: bpManualImport, Query: make(url.Values)} 80 req.Query.Add("folder", params.Folder) 81 req.Query.Add("downloadId", params.DownloadID) 82 req.Query.Add("artistId", fmt.Sprint(params.ArtistID)) 83 req.Query.Add("replaceExistingFiles", fmt.Sprint(params.ReplaceExistingFiles)) 84 req.Query.Add("filterExistingFiles", fmt.Sprint(params.FilterExistingFiles)) 85 86 var output ManualImportOutput 87 if err := l.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 (l *Lidarr) ManualImportReprocess(manualimport *ManualImportInput) error { 96 return l.ManualImportReprocessContext(context.Background(), manualimport) 97 } 98 99 // ManualImportReprocessContext reprocesses a manual import (POST). 100 func (l *Lidarr) 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 := l.PostInto(ctx, req, &output); err != nil { 110 return fmt.Errorf("api.Post(%s): %w", &req, err) 111 } 112 113 return nil 114 }