golift.io/starr@v1.0.0/radarr/qualitydefinition.go (about)

     1  package radarr
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"encoding/json"
     7  	"fmt"
     8  	"path"
     9  
    10  	"golift.io/starr"
    11  )
    12  
    13  // QualityDefinition is the /api/v3/qualitydefinition endpoint.
    14  type QualityDefinition struct {
    15  	ID       int64              `json:"id,omitempty"`
    16  	Weight   int64              `json:"weight"` // This should not be changed.
    17  	MinSize  float64            `json:"minSize"`
    18  	MaxSize  float64            `json:"maxSize"`
    19  	PrefSize float64            `json:"preferredSize"`
    20  	Title    string             `json:"title"`
    21  	Quality  *starr.BaseQuality `json:"quality"`
    22  }
    23  
    24  // Define Base Path for Quality Definition calls.
    25  const bpQualityDefinition = APIver + "/qualityDefinition"
    26  
    27  // GetQualityDefinitions returns all configured quality definitions.
    28  func (r *Radarr) GetQualityDefinitions() ([]*QualityDefinition, error) {
    29  	return r.GetQualityDefinitionsContext(context.Background())
    30  }
    31  
    32  // GetQualityDefinitionsContext returns all configured quality definitions.
    33  func (r *Radarr) GetQualityDefinitionsContext(ctx context.Context) ([]*QualityDefinition, error) {
    34  	var output []*QualityDefinition
    35  
    36  	req := starr.Request{URI: bpQualityDefinition}
    37  	if err := r.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 (r *Radarr) GetQualityDefinition(qualityDefinitionID int64) (*QualityDefinition, error) {
    46  	return r.GetQualityDefinitionContext(context.Background(), qualityDefinitionID)
    47  }
    48  
    49  // GetQualityDefinitionContext returns a single quality definition.
    50  func (r *Radarr) 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 := r.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 (r *Radarr) UpdateQualityDefinition(definition *QualityDefinition) (*QualityDefinition, error) {
    63  	return r.UpdateQualityDefinitionContext(context.Background(), definition)
    64  }
    65  
    66  // UpdateQualityDefinitionContext updates a quality definition.
    67  func (r *Radarr) 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 := r.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  // UpdateQualityDefinitions updates all quality definitions.
    87  func (r *Radarr) UpdateQualityDefinitions(definition []*QualityDefinition) ([]*QualityDefinition, error) {
    88  	return r.UpdateQualityDefinitionsContext(context.Background(), definition)
    89  }
    90  
    91  // UpdateQualityDefinitionsContext updates all quality definitions.
    92  func (r *Radarr) UpdateQualityDefinitionsContext(
    93  	ctx context.Context,
    94  	definition []*QualityDefinition,
    95  ) ([]*QualityDefinition, error) {
    96  	var output []*QualityDefinition
    97  
    98  	var body bytes.Buffer
    99  	if err := json.NewEncoder(&body).Encode(definition); 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 := r.PutInto(ctx, req, &output); err != nil {
   105  		return nil, fmt.Errorf("api.Put(%s): %w", &req, err)
   106  	}
   107  
   108  	return output, nil
   109  }