196 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
 | |
| #if NETFX_CORE
 | |
| using UnityEngine.Windows;
 | |
| #endif
 | |
| 
 | |
| namespace SRDebugger.UI.Other
 | |
| {
 | |
|     using System;
 | |
|     using System.Collections;
 | |
|     using System.Linq;
 | |
|     using Internal;
 | |
|     using Services;
 | |
|     using SRF;
 | |
|     using SRF.Service;
 | |
|     using UnityEngine;
 | |
|     using UnityEngine.EventSystems;
 | |
|     using UnityEngine.UI;
 | |
| 
 | |
|     public class BugReportSheetController : SRMonoBehaviourEx
 | |
|     {
 | |
|         [RequiredField] public GameObject ButtonContainer;
 | |
| 
 | |
|         [RequiredField] public Text ButtonText;
 | |
| 
 | |
|         [RequiredField] public UnityEngine.UI.Button CancelButton;
 | |
| 
 | |
|         public Action CancelPressed;
 | |
| 
 | |
|         [RequiredField] public InputField DescriptionField;
 | |
| 
 | |
|         [RequiredField] public InputField EmailField;
 | |
| 
 | |
|         [RequiredField] public Slider ProgressBar;
 | |
| 
 | |
|         [RequiredField] public Text ResultMessageText;
 | |
| 
 | |
|         public Action ScreenshotComplete;
 | |
| 
 | |
|         [RequiredField] public UnityEngine.UI.Button SubmitButton;
 | |
| 
 | |
|         public Action<bool, string> SubmitComplete;
 | |
|         public Action TakingScreenshot;
 | |
| 
 | |
|         public bool IsCancelButtonEnabled
 | |
|         {
 | |
|             get { return CancelButton.gameObject.activeSelf; }
 | |
|             set { CancelButton.gameObject.SetActive(value); }
 | |
|         }
 | |
| 
 | |
|         protected override void Start()
 | |
|         {
 | |
|             base.Start();
 | |
| 
 | |
|             SetLoadingSpinnerVisible(false);
 | |
|             ClearErrorMessage();
 | |
|             ClearForm();
 | |
|         }
 | |
| 
 | |
|         public void Submit()
 | |
|         {
 | |
|             EventSystem.current.SetSelectedGameObject(null);
 | |
| 
 | |
|             ProgressBar.value = 0;
 | |
|             ClearErrorMessage();
 | |
|             SetLoadingSpinnerVisible(true);
 | |
|             SetFormEnabled(false);
 | |
| 
 | |
|             if (!string.IsNullOrEmpty(EmailField.text))
 | |
|             {
 | |
|                 SetDefaultEmailFieldContents(EmailField.text);
 | |
|             }
 | |
| 
 | |
|             StartCoroutine(SubmitCo());
 | |
|         }
 | |
| 
 | |
|         public void Cancel()
 | |
|         {
 | |
|             if (CancelPressed != null)
 | |
|             {
 | |
|                 CancelPressed();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private IEnumerator SubmitCo()
 | |
|         {
 | |
|             if (BugReportScreenshotUtil.ScreenshotData == null)
 | |
|             {
 | |
|                 if (TakingScreenshot != null)
 | |
|                 {
 | |
|                     TakingScreenshot();
 | |
|                 }
 | |
| 
 | |
|                 yield return new WaitForEndOfFrame();
 | |
| 
 | |
|                 yield return StartCoroutine(BugReportScreenshotUtil.ScreenshotCaptureCo());
 | |
| 
 | |
|                 if (ScreenshotComplete != null)
 | |
|                 {
 | |
|                     ScreenshotComplete();
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             var s = SRServiceManager.GetService<IBugReportService>();
 | |
| 
 | |
|             var r = new BugReport();
 | |
| 
 | |
|             r.Email = EmailField.text;
 | |
|             r.UserDescription = DescriptionField.text;
 | |
| 
 | |
|             r.ConsoleLog = Service.Console.AllEntries.ToList();
 | |
|             r.SystemInformation = SRServiceManager.GetService<ISystemInformationService>().CreateReport();
 | |
|             r.ScreenshotData = BugReportScreenshotUtil.ScreenshotData;
 | |
| 
 | |
|             BugReportScreenshotUtil.ScreenshotData = null;
 | |
| 
 | |
|             s.SendBugReport(r, OnBugReportComplete, OnBugReportProgress);
 | |
|         }
 | |
| 
 | |
|         private void OnBugReportProgress(float progress)
 | |
|         {
 | |
|             ProgressBar.value = progress;
 | |
|         }
 | |
| 
 | |
|         private void OnBugReportComplete(bool didSucceed, string errorMessage)
 | |
|         {
 | |
|             if (!didSucceed)
 | |
|             {
 | |
|                 ShowErrorMessage("Error sending bug report", errorMessage);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 ClearForm();
 | |
|                 ShowErrorMessage("Bug report submitted successfully");
 | |
|             }
 | |
| 
 | |
|             SetLoadingSpinnerVisible(false);
 | |
|             SetFormEnabled(true);
 | |
| 
 | |
|             if (SubmitComplete != null)
 | |
|             {
 | |
|                 SubmitComplete(didSucceed, errorMessage);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected void SetLoadingSpinnerVisible(bool visible)
 | |
|         {
 | |
|             ProgressBar.gameObject.SetActive(visible);
 | |
|             ButtonContainer.SetActive(!visible);
 | |
|         }
 | |
| 
 | |
|         protected void ClearForm()
 | |
|         {
 | |
|             EmailField.text = GetDefaultEmailFieldContents();
 | |
|             DescriptionField.text = "";
 | |
|         }
 | |
| 
 | |
|         protected void ShowErrorMessage(string userMessage, string serverMessage = null)
 | |
|         {
 | |
|             var txt = userMessage;
 | |
| 
 | |
|             if (!string.IsNullOrEmpty(serverMessage))
 | |
|             {
 | |
|                 txt += " (<b>{0}</b>)".Fmt(serverMessage);
 | |
|             }
 | |
| 
 | |
|             ResultMessageText.text = txt;
 | |
|             ResultMessageText.gameObject.SetActive(true);
 | |
|         }
 | |
| 
 | |
|         protected void ClearErrorMessage()
 | |
|         {
 | |
|             ResultMessageText.text = "";
 | |
|             ResultMessageText.gameObject.SetActive(false);
 | |
|         }
 | |
| 
 | |
|         protected void SetFormEnabled(bool e)
 | |
|         {
 | |
|             SubmitButton.interactable = e;
 | |
|             CancelButton.interactable = e;
 | |
|             EmailField.interactable = e;
 | |
|             DescriptionField.interactable = e;
 | |
|         }
 | |
| 
 | |
|         private string GetDefaultEmailFieldContents()
 | |
|         {
 | |
|             return PlayerPrefs.GetString("SRDEBUGGER_BUG_REPORT_LAST_EMAIL", "");
 | |
|         }
 | |
| 
 | |
|         private void SetDefaultEmailFieldContents(string value)
 | |
|         {
 | |
|             PlayerPrefs.SetString("SRDEBUGGER_BUG_REPORT_LAST_EMAIL", value);
 | |
|             PlayerPrefs.Save();
 | |
|         }
 | |
|     }
 | |
| }
 |