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; | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |