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  }