public static Task UpdateClip(string clipUUID, ClipPatch patch, Callback.Simple callback) { string uri = apiUri + "/projects/" + Settings.projectUUID + "/clips/" + clipUUID; string data = patch.ToJson(); return(EnqueueTask(uri, data, Task.Type.Patch, (string content, Error error) => { if (error) { callback.Method.Invoke(callback.Target, new object[] { null, error }); } else { callback.Method.Invoke(callback.Target, new object[] { content, Error.None }); } })); }
/// <summary> Build a async request for a clip. This request handles patching, downloading and notifications. </summary> public static AsyncRequest Make(Clip clip) { //Build request AsyncRequest request = new AsyncRequest(); request.status = Status.BuildRequest; string savePath = clip.GetSavePath(); request.saveDirectory = Path.GetDirectoryName(savePath); request.fileName = Path.GetFileName(savePath); request.requestName = clip.speech.name + " > " + clip.clipName; request.clipUUID = clip.uuid; request.notificationLink = clip; //Generate place holder request.status = Status.GeneratePlaceHolder; clip.clip = request.GeneratePlaceHolder(); //Phonemes stuff bool includePhonemes = clip.speech.includePhonemes; string voiceUUID = clip.speech.voiceUUID; if (includePhonemes) { request.phonemeCallback = clip.SetPhonemesRaw; } //No UUID - Create new clip request.status = Status.SendDataToAPI; if (string.IsNullOrEmpty(request.clipUUID)) { //Create new clip ClipPatch.Data data = new ClipPatch.Data(clip.clipName, clip.text.BuildResembleString(), voiceUUID); request.currentTask = APIBridge.CreateClip(data, includePhonemes, (ClipStatus status, Error error) => { request.clipUUID = clip.uuid = status.id; RegisterRequestToPool(request); }); } else { ClipPatch patch = new ClipPatch(clip.clipName, clip.text.BuildResembleString(), voiceUUID, clip.speech.includePhonemes); //Bypass the api check for similarities. if (Settings.forceGeneration) { //Patch clip request.currentTask = APIBridge.UpdateClip(request.clipUUID, patch, (string content, Error patchError) => { RegisterRequestToPool(request); }); } //Check the api for similarities else { //Get existing clip APIBridge.GetClip(clip.uuid, (ResembleClip apiClip, Error error) => { //Handle error if (error) { request.SetError(error); } else { //No changes - Download existing clip if (apiClip.finished && patch.CompareContent(apiClip)) { APIBridge.DownloadClip(apiClip.link, (byte[] data, Error downloadError) => { OnDownloaded(request, data, downloadError); RegisterRequestToPool(request); }); } //Changes - Patch existing clip else { request.currentTask = APIBridge.UpdateClip(request.clipUUID, patch, (string content, Error patchError) => { RegisterRequestToPool(request); }); } } }); } } //Return the request return(request); }