118 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
 | |
| #if NETFX_CORE
 | |
| using System.Threading.Tasks;
 | |
| #endif
 | |
| 
 | |
| namespace SRDebugger.Services.Implementation
 | |
| {
 | |
|     using System;
 | |
|     using Internal;
 | |
|     using SRF;
 | |
|     using SRF.Service;
 | |
|     using UnityEngine;
 | |
| 
 | |
|     [Service(typeof (IBugReportService))]
 | |
|     public class BugReportApiService : SRServiceBase<IBugReportService>, IBugReportService
 | |
|     {
 | |
|         public const float Timeout = 12f;
 | |
|         private BugReportCompleteCallback _completeCallback;
 | |
|         private string _errorMessage;
 | |
|         private bool _isBusy;
 | |
|         private float _previousProgress;
 | |
|         private BugReportProgressCallback _progressCallback;
 | |
|         private BugReportApi _reportApi;
 | |
| 
 | |
|         public void SendBugReport(BugReport report, BugReportCompleteCallback completeHandler,
 | |
|             BugReportProgressCallback progressCallback = null)
 | |
|         {
 | |
|             if (report == null)
 | |
|             {
 | |
|                 throw new ArgumentNullException("report");
 | |
|             }
 | |
| 
 | |
|             if (completeHandler == null)
 | |
|             {
 | |
|                 throw new ArgumentNullException("completeHandler");
 | |
|             }
 | |
| 
 | |
|             if (_isBusy)
 | |
|             {
 | |
|                 completeHandler(false, "BugReportApiService is already sending a bug report");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (Application.internetReachability == NetworkReachability.NotReachable)
 | |
|             {
 | |
|                 completeHandler(false, "No Internet Connection");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             _errorMessage = "";
 | |
|             enabled = true;
 | |
| 
 | |
|             _isBusy = true;
 | |
| 
 | |
|             _completeCallback = completeHandler;
 | |
|             _progressCallback = progressCallback;
 | |
| 
 | |
|             _reportApi = new BugReportApi(report, Settings.Instance.ApiKey);
 | |
| 
 | |
|             StartCoroutine(_reportApi.Submit());
 | |
|         }
 | |
| 
 | |
|         protected override void Awake()
 | |
|         {
 | |
|             base.Awake();
 | |
| 
 | |
|             CachedTransform.SetParent(Hierarchy.Get("SRDebugger"));
 | |
|         }
 | |
| 
 | |
|         private void OnProgress(float progress)
 | |
|         {
 | |
|             if (_progressCallback != null)
 | |
|             {
 | |
|                 _progressCallback(progress);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void OnComplete()
 | |
|         {
 | |
|             _isBusy = false;
 | |
| 
 | |
|             enabled = false;
 | |
| 
 | |
|             _completeCallback(_reportApi.WasSuccessful,
 | |
|                 string.IsNullOrEmpty(_reportApi.ErrorMessage) ? _errorMessage : _reportApi.ErrorMessage);
 | |
| 
 | |
|             _completeCallback = null;
 | |
|         }
 | |
| 
 | |
|         protected override void Update()
 | |
|         {
 | |
|             base.Update();
 | |
| 
 | |
|             if (!_isBusy)
 | |
|             {
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (_reportApi == null)
 | |
|             {
 | |
|                 _isBusy = false;
 | |
|             }
 | |
| 
 | |
|             if (_reportApi.IsComplete)
 | |
|             {
 | |
|                 OnComplete();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (_previousProgress != _reportApi.Progress)
 | |
|             {
 | |
|                 OnProgress(_reportApi.Progress);
 | |
|                 _previousProgress = _reportApi.Progress;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |