golift.io/starr@v1.0.0/sonarr/qualitydefinition.go (about) 1 package sonarr 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/json" 7 "fmt" 8 "path" 9 10 "golift.io/starr" 11 ) 12 13 // Define Base Path for Quality Definition calls. 14 const bpQualityDefinition = APIver + "/qualityDefinition" 15 16 // QualityDefinition is the /api/v3/qualitydefinition endpoint. 17 type QualityDefinition struct { 18 ID int64 `json:"id,omitempty"` 19 Weight int64 `json:"weight"` // This should not be changed. 20 MinSize float64 `json:"minSize"` 21 MaxSize float64 `json:"maxSize"` 22 PrefSize float64 `json:"preferredSize"` // v4 only. 23 Title string `json:"title"` 24 Quality *starr.BaseQuality `json:"quality"` 25 } 26 27 // GetQualityDefinitions returns all configured quality definitions. 28 func (s *Sonarr) GetQualityDefinitions() ([]*QualityDefinition, error) { 29 return s.GetQualityDefinitionsContext(context.Background()) 30 } 31 32 // GetQualityDefinitionsContext returns all configured quality definitions. 33 func (s *Sonarr) GetQualityDefinitionsContext(ctx context.Context) ([]*QualityDefinition, error) { 34 var output []*QualityDefinition 35 36 req := starr.Request{URI: bpQualityDefinition} 37 if err := s.GetInto(ctx, req, &output); err != nil { 38 return nil, fmt.Errorf("api.Get(%s): %w", &req, err) 39 } 40 41 return output, nil 42 } 43 44 // GetQualityDefinition returns a single quality definition. 45 func (s *Sonarr) GetQualityDefinition(qualityDefinitionID int64) (*QualityDefinition, error) { 46 return s.GetQualityDefinitionContext(context.Background(), qualityDefinitionID) 47 } 48 49 // GetQualityDefinitionContext returns a single quality definition. 50 func (s *Sonarr) GetQualityDefinitionContext(ctx context.Context, qdID int64) (*QualityDefinition, error) { 51 var output QualityDefinition 52 53 req := starr.Request{URI: path.Join(bpQualityDefinition, fmt.Sprint(qdID))} 54 if err := s.GetInto(ctx, req, &output); err != nil { 55 return nil, fmt.Errorf("api.Get(%s): %w", &req, err) 56 } 57 58 return &output, nil 59 } 60 61 // UpdateQualityDefinition updates a quality definition. 62 func (s *Sonarr) UpdateQualityDefinition(definition *QualityDefinition) (*QualityDefinition, error) { 63 return s.UpdateQualityDefinitionContext(context.Background(), definition) 64 } 65 66 // UpdateQualityDefinitionContext updates a quality definition. 67 func (s *Sonarr) UpdateQualityDefinitionContext( 68 ctx context.Context, 69 definition *QualityDefinition, 70 ) (*QualityDefinition, error) { 71 var output QualityDefinition 72 73 var body bytes.Buffer 74 if err := json.NewEncoder(&body).Encode(definition); err != nil { 75 return nil, fmt.Errorf("json.Marshal(%s): %w", bpQualityDefinition, err) 76 } 77 78 req := starr.Request{URI: path.Join(bpQualityDefinition, fmt.Sprint(definition.ID)), Body: &body} 79 if err := s.PutInto(ctx, req, &output); err != nil { 80 return nil, fmt.Errorf("api.Put(%s): %w", &req, err) 81 } 82 83 return &output, nil 84 } 85 86 // UpdateQualityDefinition updates all quality definitions. 87 func (s *Sonarr) UpdateQualityDefinitions(definitions []*QualityDefinition) ([]*QualityDefinition, error) { 88 return s.UpdateQualityDefinitionsContext(context.Background(), definitions) 89 } 90 91 // UpdateQualityDefinitionsContext updates all quality definitions. 92 func (s *Sonarr) UpdateQualityDefinitionsContext( 93 ctx context.Context, 94 definitions []*QualityDefinition, 95 ) ([]*QualityDefinition, error) { 96 var output []*QualityDefinition 97 98 var body bytes.Buffer 99 if err := json.NewEncoder(&body).Encode(definitions); err != nil { 100 return nil, fmt.Errorf("json.Marshal(%s): %w", bpQualityDefinition, err) 101 } 102 103 req := starr.Request{URI: path.Join(bpQualityDefinition, "update"), Body: &body} 104 if err := s.PutInto(ctx, req, &output); err != nil { 105 return nil, fmt.Errorf("api.Put(%s): %w", &req, err) 106 } 107 108 return output, nil 109 }