// // Build Options // private JSONNode BuildStartCloudBuildOptions() { JSONNode result = JSON.Parse("{}"); result["projectUuid"] = Utils.GetProjectId(); result["type"] = "BUILD"; result["uploadType"] = transferModeOptions[transferModeFlag]; result["parameters"]["unityVersion"] = unityVersion; result["parameters"]["displayName"] = string.Format(@"{0}(v{1})", PlayerSettings.productName, PlayerSettings.bundleVersion); result["parameters"]["productName"] = PlayerSettings.productName; result["parameters"]["bundleVersion"] = PlayerSettings.bundleVersion; if (!string.IsNullOrEmpty(PathHelper.ProjectZipFullPath)) { result["parameters"]["projectHash"] = Utils.GetProjectHash(PathHelper.ProjectZipFullPath); } for (int i = 0; i < ContextForMode[transferModeFlag].buildTargetSelection.Length; i++) { if (ContextForMode[transferModeFlag].buildTargetSelection[i]) { result["parameters"]["buildTargets"][-1] = Enum.GetName(typeof(BuildTarget), i); } } if (transferModeFlag == (int)TransferMode.FTP) { result["parameters"]["ftpServer"] = ftpHost; result["parameters"]["ftpPort"] = ftpPort; result["parameters"]["ftpUser"] = ftpUserName; result["parameters"]["ftpPwd"] = ftpPassword; } if (TransferModeUtils.IsRepository(transferModeFlag)) { result["parameters"]["repoUrl"] = ContextForMode[transferModeFlag].repoUrl; result["parameters"]["repoBranch"] = ContextForMode[transferModeFlag].repoBranch; result["parameters"]["relativePath"] = ContextForMode[transferModeFlag].relativePath; if (TransferModeUtils.IsGit(transferModeFlag) && !string.IsNullOrEmpty(ContextForMode[transferModeFlag].repoToken)) { result["parameters"]["repoToken"] = ContextForMode[transferModeFlag].repoToken; } else { result["parameters"]["repoUser"] = ContextForMode[transferModeFlag].repoUsername; result["parameters"]["repoPwd"] = ContextForMode[transferModeFlag].repoPassword; } } return(result); }
// // UI // void OnGUI() { scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height)); EditorGUILayout.LabelField("Mode", EditorStyles.boldLabel); EditorGUI.indentLevel++; int newMode = EditorGUILayout.Popup("Cloud Build Mode:", transferModeFlag, transferModeOptions, EditorStyles.popup); if (newMode != transferModeFlag) { transferModeFlag = newMode; OnTransferModeChange(); } if (TransferMode.FTP.Equals(ContextForMode[transferModeFlag].transferMode)) { EditorGUILayout.LabelField("* for internal use only"); } EditorGUI.indentLevel--; // // Upload // if (TransferModeUtils.IsRepository(transferModeFlag)) { EditorGUILayout.Separator(); EditorGUI.indentLevel++; ContextForMode[transferModeFlag].repoUrl = EditorGUILayout.TextField("Repository URL:", ContextForMode[transferModeFlag].repoUrl); if (transferModeFlag == (int)TransferMode.GIT) { ContextForMode[transferModeFlag].repoBranch = EditorGUILayout.TextField("Branch name:", ContextForMode[transferModeFlag].repoBranch); gitCredentialModeFlag = EditorGUILayout.Popup("Credential Mode:", gitCredentialModeFlag, gitCredentialOptions, EditorStyles.popup); } ContextForMode[transferModeFlag].relativePath = EditorGUILayout.TextField(new GUIContent("Relative Path (?):", "Unity project path relative to repository root"), ContextForMode[transferModeFlag].relativePath); if (transferModeFlag == (int)TransferMode.GIT && gitCredentialModeFlag == (int)GitCredentialMode.GitToken) { ContextForMode[transferModeFlag].repoToken = EditorGUILayout.TextField("Git Token:", ContextForMode[transferModeFlag].repoToken); } else { ContextForMode[transferModeFlag].repoUsername = EditorGUILayout.TextField("Repo Username:"******"Repo Password:"******"Upload", EditorStyles.boldLabel); EditorGUI.indentLevel++; GUIStyle wraptStyle = new GUIStyle(EditorStyles.label); wraptStyle.wordWrap = true; EditorGUILayout.LabelField("* Remember to config Build-Settings for your build target(s), and SAVE project before packing.", wraptStyle); if (GUILayout.Button("Config Packing Directories")) { UcbPackDirectoriesWindow.showWindow(); } if (GUILayout.Button("Pack")) { if (UcbFacade.GetInstance().CheckUnityVersion(unityVersion)) { StartPackingProject(); } else { ShowNotification(new GUIContent("Unsupported Unity version")); } } if (!string.IsNullOrEmpty(PathHelper.ProjectZipFullPath)) { EditorGUILayout.LabelField("Latest Local Pack:", File.GetLastWriteTime(PathHelper.ProjectZipFullPath).ToString()); } if (transferModeFlag == (int)TransferMode.FTP) { ftpHost = EditorGUILayout.TextField("FTP Host:", ftpHost); ftpPort = EditorGUILayout.TextField("FTP Port:", ftpPort); ftpUserName = EditorGUILayout.TextField("FTP Username:"******"FTP Password:"******"Upload Mode:", ContextForMode[transferModeFlag].cosUploadModeFlag, cosUploadModeOptions, EditorStyles.popup); } string uploadBtnText = "Upload"; if (ContextForMode[transferModeFlag].isUploading || string.IsNullOrEmpty(PathHelper.ProjectZipFullPath)) { GUI.enabled = false; if (ContextForMode[transferModeFlag].isUploading) { uploadBtnText = "Uploading..."; } } if (GUILayout.Button(uploadBtnText)) { StartUploadProject(); } GUI.enabled = true; EditorGUI.indentLevel--; } // // Build // EditorGUILayout.Separator(); EditorGUILayout.LabelField("Build", EditorStyles.boldLabel); EditorGUI.indentLevel++; string latestBuildTime = GetLatestBuildTimeString(); EditorGUILayout.LabelField("Select Build Target(s)"); EditorGUI.indentLevel++; for (int i = 0; i < ContextForMode[transferModeFlag].buildTargetSelection.Length; i++) { string buildTargetName = Enum.GetNames(typeof(BuildTarget))[i]; Rect statusRect = EditorGUILayout.BeginHorizontal(GUILayout.Width(290)); EditorGUILayout.LabelField(buildTargetName); ContextForMode[transferModeFlag].buildTargetSelection[i] = EditorGUILayout.Toggle(ContextForMode[transferModeFlag].buildTargetSelection[i]); EditorGUILayout.EndHorizontal(); } EditorGUI.indentLevel--; if (ContextForMode[transferModeFlag].IsBuildTaskRunning()) { if (GUILayout.Button("Cancel Cloud Build")) { CancelCloudBuildAction(); } } else { if (GUILayout.Button("Start Cloud Build")) { if (!TransferModeUtils.IsRepository(transferModeFlag) && !ContextForMode[transferModeFlag].projectUploaded) { ShowNotification(new GUIContent("No Project Uploaded")); } else if (!IsBuildTargetSelected()) { ShowNotification(new GUIContent("Select Build Target")); } else { StartCloudBuildAction(); } } } if (!string.IsNullOrEmpty(latestBuildTime)) { EditorGUILayout.LabelField("Latest Build:", latestBuildTime); } if (string.IsNullOrEmpty(ContextForMode[transferModeFlag].taskId) || ContextForMode[transferModeFlag].taskInfo == null) { EditorGUILayout.LabelField("Build Status", "Not Started"); } else { EditorGUILayout.LabelField("Build Status"); EditorGUI.indentLevel++; JSONArray jobs = ContextForMode[transferModeFlag].taskInfo["jobs"].AsArray; for (int i = 0; i < jobs.Count; i++) { string statusString = jobs[i]["status"]; if (statusString == "FAILED") { GUI.color = new Color(255, 0, 0); } Rect statusRect = EditorGUILayout.BeginHorizontal(GUILayout.Width(290)); EditorGUILayout.LabelField(jobs[i]["buildTarget"], GUILayout.Width(170)); EditorGUILayout.LabelField(statusString, GUILayout.Width(100)); GUI.color = guiDefaultColor; if (IsBuildJobDone(i)) { if (GUILayout.Button("Actions", GUILayout.Width(60), GUILayout.Height(14))) { if (!ContextForMode[transferModeFlag].jobActionOpened.ContainsKey(jobs[i]["name"])) { ContextForMode[transferModeFlag].jobActionOpened[jobs[i]["name"]] = true; } else { ContextForMode[transferModeFlag].jobActionOpened[jobs[i]["name"]] = !ContextForMode[transferModeFlag].jobActionOpened[jobs[i]["name"]]; } } } EditorGUILayout.EndHorizontal(); if (ContextForMode[transferModeFlag].jobActionOpened.ContainsKey(jobs[i]["name"]) && ContextForMode[transferModeFlag].jobActionOpened[jobs[i]["name"]] == true) { //download button group try { if (jobs[i]["downloadLink"] != null) { if (GUILayout.Button("Download")) { Application.OpenURL(jobs[i]["downloadLink"]); EditorUtility.ClearProgressBar(); } if (GUILayout.Button("Copy Download URL")) { EditorGUIUtility.systemCopyBuffer = jobs[i]["downloadLink"]; ShowNotification(new GUIContent("Copied URL" + Environment.NewLine + " to clipboard")); EditorUtility.ClearProgressBar(); } if (jobs[i]["downloadLink"].ToString().Contains(".apk")) { if (GUILayout.Button("QR Code")) { UcbQrPopup.Open(jobs[i]["downloadLink"], "Cloud Build Download Apk", "Scan QR code to download apk" + Environment.NewLine + "direct into your mobile devices"); } } } // //build just finished // if (jobs[i]["exectionLog"] != null || jobs[i]["logLink"] != null) { if (GUILayout.Button("Print Log")) { ShowNotification(new GUIContent("Printed to" + Environment.NewLine + "console")); if (jobs[i]["exectionLog"] != null) { Debug.Info("Build Execution Log :" + jobs[i]["exectionLog"]); } if (jobs[i]["logLink"] != null) { Debug.Info("Editor Log in Link:" + jobs[i]["logLink"]); Debug.Info("Editor Log Content:" + ftpInstance.GetEditorLog(jobs[i]["logLink"])); } } EditorGUILayout.Separator(); } } catch (NullReferenceException ex) { } } } EditorGUI.indentLevel--; } if (ContextForMode[transferModeFlag].taskId != null) { if (GUILayout.Button("Track This Task by WeChat")) { string url = Constants.WEAPP_QR_PREFIX + ContextForMode[transferModeFlag].taskId; UcbQrPopup.Open(url, "QR for WeApp Monitor", "Scan QR code by WeChat" + Environment.NewLine + "to monitor this task"); } } EditorGUI.indentLevel--; if (ContextForMode[transferModeFlag].isProgressBarVisible) { string text = ContextForMode[transferModeFlag].progressTitle; if (1 - ContextForMode[transferModeFlag].progressValue > 0.0001) { text += String.Format(" [ {0}% ]", (int)(ContextForMode[transferModeFlag].progressValue * 100)); } EditorGUI.ProgressBar(new Rect(3, position.height - 30, position.width - 6, 20), ContextForMode[transferModeFlag].progressValue, text); } EditorGUILayout.Separator(); GUIStyle foldOutStyle = new GUIStyle(EditorStyles.foldout); foldOutStyle.fontStyle = FontStyle.Bold; showAdvancedSettings = EditorGUILayout.Foldout(showAdvancedSettings, "Advanced Settings", foldOutStyle); if (showAdvancedSettings) { EditorGUI.indentLevel++; apiHost = EditorGUILayout.TextField("API Host:", apiHost); apiPort = EditorGUILayout.TextField("API Port:", apiPort); cosEndPoint = EditorGUILayout.TextField("COS Host:", cosEndPoint); EditorGUI.indentLevel--; } EditorGUILayout.EndScrollView(); }