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 });
                }
            }));
        }
Exemplo n.º 2
0
    /// <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);
    }