golift.io/starr@v1.0.0/sonarr/mediamanagement.go (about)

     1  package sonarr
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"encoding/json"
     7  	"fmt"
     8  
     9  	"golift.io/starr"
    10  )
    11  
    12  // Define Base Path for MediaManagement calls.
    13  const bpMediaManagement = APIver + "/config/mediaManagement"
    14  
    15  // MediaManagement represents the /config/mediamanagement endpoint.
    16  type MediaManagement struct {
    17  	AutoUnmonitorPreviouslyDownloadedEpisodes bool   `json:"autoUnmonitorPreviouslyDownloadedEpisodes,omitempty"`
    18  	CopyUsingHardlinks                        bool   `json:"copyUsingHardlinks,omitempty"`
    19  	CreateEmptySeriesFolders                  bool   `json:"createEmptySeriesFolders,omitempty"`
    20  	DeleteEmptyFolders                        bool   `json:"deleteEmptyFolders,omitempty"`
    21  	EnableMediaInfo                           bool   `json:"enableMediaInfo,omitempty"`
    22  	ImportExtraFiles                          bool   `json:"importExtraFiles,omitempty"`
    23  	SetPermissionsLinux                       bool   `json:"setPermissionsLinux,omitempty"`
    24  	SkipFreeSpaceCheckWhenImporting           bool   `json:"skipFreeSpaceCheckWhenImporting,omitempty"`
    25  	ID                                        int64  `json:"id"`
    26  	MinimumFreeSpaceWhenImporting             int64  `json:"minimumFreeSpaceWhenImporting"` // 0 or empty not allowed
    27  	RecycleBinCleanupDays                     int64  `json:"recycleBinCleanupDays,omitempty"`
    28  	ChmodFolder                               string `json:"chmodFolder,omitempty"`
    29  	ChownGroup                                string `json:"chownGroup"` // empty string is valid
    30  	DownloadPropersAndRepacks                 string `json:"downloadPropersAndRepacks,omitempty"`
    31  	EpisodeTitleRequired                      string `json:"episodeTitleRequired,omitempty"`
    32  	ExtraFileExtensions                       string `json:"extraFileExtensions,omitempty"`
    33  	FileDate                                  string `json:"fileDate,omitempty"`
    34  	RecycleBin                                string `json:"recycleBin"` // empty string is valid
    35  	RescanAfterRefresh                        string `json:"rescanAfterRefresh,omitempty"`
    36  }
    37  
    38  // GetMediaManagement returns the mediaManagement.
    39  func (s *Sonarr) GetMediaManagement() (*MediaManagement, error) {
    40  	return s.GetMediaManagementContext(context.Background())
    41  }
    42  
    43  // GetMediaManagement returns the Media Management.
    44  func (s *Sonarr) GetMediaManagementContext(ctx context.Context) (*MediaManagement, error) {
    45  	var output MediaManagement
    46  
    47  	req := starr.Request{URI: bpMediaManagement}
    48  	if err := s.GetInto(ctx, req, &output); err != nil {
    49  		return nil, fmt.Errorf("api.Get(%s): %w", &req, err)
    50  	}
    51  
    52  	return &output, nil
    53  }
    54  
    55  // UpdateMediaManagement updates the Media Management.
    56  func (s *Sonarr) UpdateMediaManagement(mMgt *MediaManagement) (*MediaManagement, error) {
    57  	return s.UpdateMediaManagementContext(context.Background(), mMgt)
    58  }
    59  
    60  // UpdateMediaManagementContext updates the Media Management.
    61  func (s *Sonarr) UpdateMediaManagementContext(ctx context.Context, mMgt *MediaManagement) (*MediaManagement, error) {
    62  	var output MediaManagement
    63  
    64  	var body bytes.Buffer
    65  	if err := json.NewEncoder(&body).Encode(mMgt); err != nil {
    66  		return nil, fmt.Errorf("json.Marshal(%s): %w", bpMediaManagement, err)
    67  	}
    68  
    69  	req := starr.Request{URI: bpMediaManagement, Body: &body}
    70  	if err := s.PutInto(ctx, req, &output); err != nil {
    71  		return nil, fmt.Errorf("api.Put(%s): %w", &req, err)
    72  	}
    73  
    74  	return &output, nil
    75  }