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 }