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  }