Exemple #1
0
        public static ShareState reducer(ShareState old, object action)
        {
            switch (action)
            {
            case BuildFinishAction build:
                return(old.CopyWith(
                           buildOutputDir: build.outputDir,
                           buildGUID: build.buildGUID
                           ));

            case ZipPathChangeAction zip:
                return(old.CopyWith(
                           zipPath: zip.zipPath,
                           step: ShareStep.Zip
                           ));

            case UploadStartAction upload: return(old.CopyWith(step: ShareStep.Upload));

            case QueryProgressAction query:

                return(old.CopyWith(
                           step: ShareStep.Process,
                           key: query.key
                           ));

            case UploadProgressAction upload:

                ConnectShareEditorWindow.OnUploadProgress(upload.progress);

                return(old);

            case QueryProgressResponseAction queryResponse:
                ShareStep?step = null;
                if (queryResponse.response.progress == 100)
                {
                    step = ShareStep.Idle;
                }

                ConnectShareEditorWindow.OnProcessingProgress(queryResponse.response.progress);

                return(old.CopyWith(
                           url: queryResponse.response.url,
                           step: step
                           ));

            case TitleChangeAction titleChangeAction: return(old.CopyWith(title: titleChangeAction.title));

            case DestroyAction destroyAction: return(new ShareState(buildOutputDir: old.buildOutputDir, buildGUID: old.buildGUID));

            case OnErrorAction errorAction: return(old.CopyWith(errorMsg: errorAction.errorMsg));

            case StopUploadAction stopUploadAction: return(new ShareState(buildOutputDir: old.buildOutputDir, buildGUID: old.buildGUID));

            case NotLoginAction login: return(old.CopyWith(step: ShareStep.Login));

            case LoginAction login: return(old.CopyWith(step: ShareStep.Idle));
            }
            return(old);
        }
Exemple #2
0
        private static void Upload(Store <AppState> store)
        {
            var token = UnityConnectSession.instance.GetAccessToken();

            if (token.Length == 0)
            {
                CheckLoginStatus(store);
                return;
            }

            var path         = store.state.shareState.zipPath;
            var title        = store.state.shareState.title;
            var baseUrl      = getAPIBaseUrl();
            var projectId    = GetProjectId();
            var formSections = new List <IMultipartFormSection>();

            formSections.Add(new MultipartFormDataSection("title", title));

            if (projectId.Length > 0)
            {
                formSections.Add(new MultipartFormDataSection("projectId", projectId));
            }

            formSections.Add(new MultipartFormFileSection("file",
                                                          File.ReadAllBytes(path), Path.GetFileName(path), "application/zip"));

            uploadRequest = UnityWebRequest.Post(baseUrl + uploadEndpoint, formSections);
            uploadRequest.SetRequestHeader("Authorization", $"Bearer {token}");
            uploadRequest.SetRequestHeader("X-Requested-With", "XMLHTTPREQUEST");

            var op = uploadRequest.SendWebRequest();

            ConnectShareEditorWindow.StartCoroutine(updateProgress(store, uploadRequest));

            op.completed += operation =>
            {
                if (uploadRequest.isNetworkError || uploadRequest.isHttpError)
                {
                    Debug.Log(uploadRequest.error);
                    if (uploadRequest.error != "Request aborted")
                    {
                        store.Dispatch(new OnErrorAction {
                            errorMsg = "Internal server error"
                        });
                    }
                }
                else
                {
                    var response = JsonUtility.FromJson <UploadResponse>(op.webRequest.downloadHandler.text);
                    if (!string.IsNullOrEmpty(response.key))
                    {
                        store.Dispatch(new QueryProgressAction {
                            key = response.key
                        });
                    }
                }
            };
        }
        private static void CheckLoginStatus(Store <AppState> store)
        {
            var token = UnityConnectSession.instance.GetAccessToken();

            if (token.Length == 0)
            {
                ConnectShareEditorWindow.StartCoroutine(wait(2f)).promise.Then((obj) =>
                {
                    store.Dispatch(new NotLoginAction());
                });
            }
            else
            {
                store.Dispatch(new LoginAction());
            }
        }
        private static void CheckProgress(Store <AppState> store, string key)
        {
            var token = UnityConnectSession.instance.GetAccessToken();

            if (token.Length == 0)
            {
                CheckLoginStatus(store);
                return;
            }

            key = key ?? store.state.shareState.key;
            var baseUrl       = getAPIBaseUrl();
            var uploadRequest = UnityWebRequest.Get($"{baseUrl + queryProgressEndpoint}?key={key}");

            uploadRequest.SetRequestHeader("Authorization", $"Bearer {token}");
            uploadRequest.SetRequestHeader("X-Requested-With", "XMLHTTPREQUEST");
            var op = uploadRequest.SendWebRequest();

            op.completed += operation =>
            {
                if (uploadRequest.isNetworkError || uploadRequest.isHttpError)
                {
                    Debug.Log(uploadRequest.error);
                }
                else
                {
                    var response = JsonUtility.FromJson <GetProgressResponse>(op.webRequest.downloadHandler.text);

                    store.Dispatch(new QueryProgressResponseAction {
                        response = response
                    });
                    if (response.progress == 100 || !string.IsNullOrEmpty(response.error))
                    {
                        SaveProjectID(response.projectId);
                        return;
                    }
                }

                ConnectShareEditorWindow.StartCoroutine(wait(1.5f)).promise.Then((obj) =>
                {
                    store.Dispatch(new QueryProgressAction());
                });
            };
        }