BugReportSheetController.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. 
  2. #if NETFX_CORE
  3. using UnityEngine.Windows;
  4. #endif
  5. namespace SRDebugger.UI.Other
  6. {
  7. using System;
  8. using System.Collections;
  9. using System.Linq;
  10. using Internal;
  11. using Services;
  12. using SRF;
  13. using SRF.Service;
  14. using UnityEngine;
  15. using UnityEngine.EventSystems;
  16. using UnityEngine.UI;
  17. public class BugReportSheetController : SRMonoBehaviourEx
  18. {
  19. [RequiredField] public GameObject ButtonContainer;
  20. [RequiredField] public Text ButtonText;
  21. [RequiredField] public UnityEngine.UI.Button CancelButton;
  22. public Action CancelPressed;
  23. [RequiredField] public InputField DescriptionField;
  24. [RequiredField] public InputField EmailField;
  25. [RequiredField] public Slider ProgressBar;
  26. [RequiredField] public Text ResultMessageText;
  27. public Action ScreenshotComplete;
  28. [RequiredField] public UnityEngine.UI.Button SubmitButton;
  29. public Action<bool, string> SubmitComplete;
  30. public Action TakingScreenshot;
  31. public bool IsCancelButtonEnabled
  32. {
  33. get { return CancelButton.gameObject.activeSelf; }
  34. set { CancelButton.gameObject.SetActive(value); }
  35. }
  36. protected override void Start()
  37. {
  38. base.Start();
  39. SetLoadingSpinnerVisible(false);
  40. ClearErrorMessage();
  41. ClearForm();
  42. }
  43. public void Submit()
  44. {
  45. EventSystem.current.SetSelectedGameObject(null);
  46. ProgressBar.value = 0;
  47. ClearErrorMessage();
  48. SetLoadingSpinnerVisible(true);
  49. SetFormEnabled(false);
  50. if (!string.IsNullOrEmpty(EmailField.text))
  51. {
  52. SetDefaultEmailFieldContents(EmailField.text);
  53. }
  54. StartCoroutine(SubmitCo());
  55. }
  56. public void Cancel()
  57. {
  58. if (CancelPressed != null)
  59. {
  60. CancelPressed();
  61. }
  62. }
  63. private IEnumerator SubmitCo()
  64. {
  65. if (BugReportScreenshotUtil.ScreenshotData == null && Settings.Instance.EnableBugReportScreenshot)
  66. {
  67. if (TakingScreenshot != null)
  68. {
  69. TakingScreenshot();
  70. }
  71. yield return new WaitForEndOfFrame();
  72. yield return StartCoroutine(BugReportScreenshotUtil.ScreenshotCaptureCo());
  73. if (ScreenshotComplete != null)
  74. {
  75. ScreenshotComplete();
  76. }
  77. }
  78. var s = SRServiceManager.GetService<IBugReportService>();
  79. var r = new BugReport();
  80. r.Email = EmailField.text;
  81. r.UserDescription = DescriptionField.text;
  82. r.ConsoleLog = Service.Console.AllEntries.ToList();
  83. r.SystemInformation = SRServiceManager.GetService<ISystemInformationService>().CreateReport();
  84. r.ScreenshotData = BugReportScreenshotUtil.ScreenshotData;
  85. BugReportScreenshotUtil.ScreenshotData = null;
  86. s.SendBugReport(r, OnBugReportComplete, new Progress<float>(OnBugReportProgress));
  87. }
  88. private void OnBugReportProgress(float progress)
  89. {
  90. ProgressBar.value = progress;
  91. }
  92. private void OnBugReportComplete(bool didSucceed, string errorMessage)
  93. {
  94. if (!didSucceed)
  95. {
  96. ShowErrorMessage("Error sending bug report", errorMessage);
  97. }
  98. else
  99. {
  100. ClearForm();
  101. ShowErrorMessage("Bug report submitted successfully");
  102. }
  103. SetLoadingSpinnerVisible(false);
  104. SetFormEnabled(true);
  105. if (SubmitComplete != null)
  106. {
  107. SubmitComplete(didSucceed, errorMessage);
  108. }
  109. }
  110. protected void SetLoadingSpinnerVisible(bool visible)
  111. {
  112. ProgressBar.gameObject.SetActive(visible);
  113. ButtonContainer.SetActive(!visible);
  114. }
  115. protected void ClearForm()
  116. {
  117. EmailField.text = GetDefaultEmailFieldContents();
  118. DescriptionField.text = "";
  119. }
  120. protected void ShowErrorMessage(string userMessage, string serverMessage = null)
  121. {
  122. var txt = userMessage;
  123. if (!string.IsNullOrEmpty(serverMessage))
  124. {
  125. txt += " (<b>{0}</b>)".Fmt(serverMessage);
  126. }
  127. ResultMessageText.text = txt;
  128. ResultMessageText.gameObject.SetActive(true);
  129. }
  130. protected void ClearErrorMessage()
  131. {
  132. ResultMessageText.text = "";
  133. ResultMessageText.gameObject.SetActive(false);
  134. }
  135. protected void SetFormEnabled(bool e)
  136. {
  137. SubmitButton.interactable = e;
  138. CancelButton.interactable = e;
  139. EmailField.interactable = e;
  140. DescriptionField.interactable = e;
  141. }
  142. private string GetDefaultEmailFieldContents()
  143. {
  144. return PlayerPrefs.GetString("SRDEBUGGER_BUG_REPORT_LAST_EMAIL", "");
  145. }
  146. private void SetDefaultEmailFieldContents(string value)
  147. {
  148. PlayerPrefs.SetString("SRDEBUGGER_BUG_REPORT_LAST_EMAIL", value);
  149. PlayerPrefs.Save();
  150. }
  151. }
  152. }