github.com/CyCoreSystems/ari@v4.8.4+incompatible/client/native/storedRecording.go (about)

     1  package native
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/CyCoreSystems/ari"
     7  )
     8  
     9  // StoredRecording provides the ARI StoredRecording accessors for the native client
    10  type StoredRecording struct {
    11  	client *Client
    12  }
    13  
    14  // List lists the current stored recordings and returns a list of handles
    15  func (sr *StoredRecording) List(filter *ari.Key) (sx []*ari.Key, err error) {
    16  	var recs []struct {
    17  		Name string `json:"name"`
    18  	}
    19  
    20  	if filter == nil {
    21  		filter = sr.client.stamp(ari.NewKey(ari.StoredRecordingKey, ""))
    22  	}
    23  
    24  	err = sr.client.get("/recordings/stored", &recs)
    25  	for _, rec := range recs {
    26  		k := sr.client.stamp(ari.NewKey(ari.StoredRecordingKey, rec.Name))
    27  		if filter.Match(k) {
    28  			sx = append(sx, k)
    29  		}
    30  	}
    31  
    32  	return
    33  }
    34  
    35  // Get gets a lazy handle for the given stored recording name
    36  func (sr *StoredRecording) Get(key *ari.Key) *ari.StoredRecordingHandle {
    37  	return ari.NewStoredRecordingHandle(key, sr, nil)
    38  }
    39  
    40  // Data retrieves the state of the stored recording
    41  func (sr *StoredRecording) Data(key *ari.Key) (*ari.StoredRecordingData, error) {
    42  	if key == nil || key.ID == "" {
    43  		return nil, errors.New("storedRecording key not supplied")
    44  	}
    45  
    46  	var data = new(ari.StoredRecordingData)
    47  	if err := sr.client.get("/recordings/stored/"+key.ID, data); err != nil {
    48  		return nil, dataGetError(err, "storedRecording", "%v", key.ID)
    49  	}
    50  
    51  	data.Key = sr.client.stamp(key)
    52  	return data, nil
    53  }
    54  
    55  // Copy copies a stored recording and returns the new handle
    56  func (sr *StoredRecording) Copy(key *ari.Key, dest string) (*ari.StoredRecordingHandle, error) {
    57  	h, err := sr.StageCopy(key, dest)
    58  	if err != nil {
    59  		// NOTE: return the handle even on failure so that it can be used to
    60  		//   delete the existing stored recording, should the Copy fail.
    61  		//   ARI provides no facility to force-copy a recording.
    62  		return h, err
    63  	}
    64  
    65  	return h, h.Exec()
    66  }
    67  
    68  // StageCopy creates a `StoredRecordingHandle` with a `Copy` operation staged.
    69  func (sr *StoredRecording) StageCopy(key *ari.Key, dest string) (*ari.StoredRecordingHandle, error) {
    70  
    71  	var resp struct {
    72  		Name string `json:"name"`
    73  	}
    74  
    75  	req := struct {
    76  		Dest string `json:"destinationRecordingName"`
    77  	}{
    78  		Dest: dest,
    79  	}
    80  
    81  	destKey := sr.client.stamp(ari.NewKey(ari.StoredRecordingKey, dest))
    82  	return ari.NewStoredRecordingHandle(destKey, sr, func(h *ari.StoredRecordingHandle) error {
    83  		return sr.client.post("/recordings/stored/"+key.ID+"/copy", &resp, &req)
    84  	}), nil
    85  }
    86  
    87  // Delete deletes the stored recording
    88  func (sr *StoredRecording) Delete(key *ari.Key) error {
    89  	return sr.client.del("/recordings/stored/"+key.ID, nil, "")
    90  }