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  }