| 
									
										
										
										
											2024-06-24 01:28:57 +00:00
										 |  |  |  | using System; | 
					
						
							| 
									
										
										
										
											2023-12-26 03:47:44 +00:00
										 |  |  |  | using System.Collections; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using System.IO; | 
					
						
							|  |  |  |  | using System.Linq; | 
					
						
							|  |  |  |  | using System.Reflection; | 
					
						
							|  |  |  |  | using AmazonInternal.ThirdParty; | 
					
						
							|  |  |  |  | using UnityEditor; | 
					
						
							|  |  |  |  | using UnityEditor.PackageManager; | 
					
						
							|  |  |  |  | using UnityEditor.PackageManager.Requests; | 
					
						
							|  |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | using UnityEngine.Networking; | 
					
						
							|  |  |  |  | public class AmazonSDKManager : EditorWindow { | 
					
						
							|  |  |  |  |     static string AmazonSdkVersion; | 
					
						
							|  |  |  |  |     static AddRequest Request; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     static void AddEditorCoroutine () { | 
					
						
							|  |  |  |  |         // Add a package to the Project | 
					
						
							|  |  |  |  |         Request = Client.Add ("com.unity.editorcoroutine"); | 
					
						
							|  |  |  |  |         EditorApplication.update += Progress; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     static void Progress () { | 
					
						
							|  |  |  |  |         if (Request.IsCompleted) { | 
					
						
							|  |  |  |  |             if (Request.Status == StatusCode.Success) | 
					
						
							|  |  |  |  |                 Debug.Log ("Installed: " + Request.Result.packageId); | 
					
						
							|  |  |  |  |             else if (Request.Status >= StatusCode.Failure) | 
					
						
							|  |  |  |  |                 Debug.Log (Request.Error.message); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             EditorApplication.update -= Progress; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-24 01:28:57 +00:00
										 |  |  |  |     [MenuItem ("Amazon/About Amazon SDK", false, 0)] | 
					
						
							| 
									
										
										
										
											2023-12-26 03:47:44 +00:00
										 |  |  |  |     public static void About () { | 
					
						
							|  |  |  |  |         AmazonAboutDialog.ShowDialog (); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-24 01:28:57 +00:00
										 |  |  |  |     [MenuItem ("Amazon/Documentation...", false, 1)] | 
					
						
							| 
									
										
										
										
											2023-12-26 03:47:44 +00:00
										 |  |  |  |     public static void Documentation () { | 
					
						
							|  |  |  |  |         Application.OpenURL (AmazonConstants.docUrl); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-24 01:28:57 +00:00
										 |  |  |  |     [MenuItem ("Amazon/Manage SDKs...", false, 4)] | 
					
						
							| 
									
										
										
										
											2023-12-26 03:47:44 +00:00
										 |  |  |  |     public static void SdkManagerProd () { | 
					
						
							|  |  |  |  |         AmazonSDKManager.ShowSDKManager (); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private const string downloadDir = "Assets/Amazon"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private struct SdkInfo { | 
					
						
							|  |  |  |  |         public string Name; | 
					
						
							|  |  |  |  |         public string Key; | 
					
						
							|  |  |  |  |         public string Url; | 
					
						
							|  |  |  |  |         public string LatestVersion; | 
					
						
							|  |  |  |  |         public string CurrentVersion; | 
					
						
							|  |  |  |  |         public string Filename; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public bool FromJson (string name, Dictionary<string, object> dict) { | 
					
						
							|  |  |  |  |             if (string.IsNullOrEmpty (name) || dict == null) | 
					
						
							|  |  |  |  |                 return false; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             object obj; | 
					
						
							|  |  |  |  |             Key = name; | 
					
						
							|  |  |  |  |             if (dict.TryGetValue ("name", out obj)) | 
					
						
							|  |  |  |  |                 Name = obj as string; | 
					
						
							|  |  |  |  |             if (dict.TryGetValue ("link", out obj)) | 
					
						
							|  |  |  |  |                 Url = obj as string; | 
					
						
							|  |  |  |  |             if (dict.TryGetValue ("version", out obj)) | 
					
						
							|  |  |  |  |                 LatestVersion = obj as string; | 
					
						
							|  |  |  |  |             if (!string.IsNullOrEmpty (Url)) { | 
					
						
							|  |  |  |  |                 var uri = new Uri (Url); | 
					
						
							|  |  |  |  |                 var path = uri.IsAbsoluteUri ? uri.AbsolutePath : uri.LocalPath; | 
					
						
							|  |  |  |  |                 Filename = Path.GetFileName (path); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             return true; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public bool FromConfig(AmazonPackageConfig config) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (config == null || string.IsNullOrEmpty(config.Name) || !string.IsNullOrEmpty(Key) && Key != config.Name) | 
					
						
							|  |  |  |  |                 return false; | 
					
						
							|  |  |  |  |             CurrentVersion = config.Version; | 
					
						
							|  |  |  |  |             return true; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Version and download info for the SDK and network mediation adapters. | 
					
						
							|  |  |  |  |     private static SdkInfo amazonSdkInfo; | 
					
						
							|  |  |  |  |     private static readonly SortedDictionary<string, SdkInfo> sdkInfo = new SortedDictionary<string, SdkInfo> (); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Async download operations tracked here. | 
					
						
							|  |  |  |  |     private AmazonCoroutines.AmazonCoroutine coroutine; | 
					
						
							|  |  |  |  |     private UnityWebRequest downloader; | 
					
						
							|  |  |  |  |     private string activity; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Custom style for LabelFields.  (Don't make static or the dialog doesn't recover well from Unity compiling | 
					
						
							|  |  |  |  |     // a new or changed editor script.) | 
					
						
							|  |  |  |  |     private GUIStyle labelStyle; | 
					
						
							|  |  |  |  |     private GUIStyle labelStyleArea; | 
					
						
							|  |  |  |  |     private GUIStyle labelStyleLink; | 
					
						
							|  |  |  |  |     private GUIStyle headerStyle; | 
					
						
							|  |  |  |  |     private readonly GUILayoutOption fieldWidth = GUILayout.Width (60); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private Vector2 scrollPos; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public static void ShowSDKManager () { | 
					
						
							|  |  |  |  |         var win = GetWindow<AmazonSDKManager> (true); | 
					
						
							|  |  |  |  |         win.titleContent = new GUIContent ("Amazon SDK Manager"); | 
					
						
							|  |  |  |  |         win.Focus (); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void Awake () { | 
					
						
							|  |  |  |  |         labelStyle = new GUIStyle (EditorStyles.label) { | 
					
						
							|  |  |  |  |             fontSize = 14, | 
					
						
							|  |  |  |  |             fontStyle = FontStyle.Bold | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         labelStyleArea = new GUIStyle (EditorStyles.label) { | 
					
						
							|  |  |  |  |             wordWrap = true | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         labelStyleLink = new GUIStyle (EditorStyles.label) { | 
					
						
							|  |  |  |  |             normal = { textColor = Color.blue }, | 
					
						
							|  |  |  |  |             active = { textColor = Color.white }, | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         headerStyle = new GUIStyle (EditorStyles.label) { | 
					
						
							|  |  |  |  |             fontSize = 12, | 
					
						
							|  |  |  |  |             fontStyle = FontStyle.Bold, | 
					
						
							|  |  |  |  |             fixedHeight = 18 | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         CancelOperation (); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnEnable () { | 
					
						
							|  |  |  |  |         coroutine = this.StartCoroutine (GetSDKVersions ()); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnDisable () { | 
					
						
							|  |  |  |  |         CancelOperation (); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public void deleteUnwantedFiles() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         String[] filesToDel = | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Internal/AdResponce.cs", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Internal/AdResponce.cs.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Plugins/Android/aps-sdk.aar", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Plugins/Android/aps-sdk.aar.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Mediations/AdMobMediation/Plugins/Android/aps-admob-adapter.aar", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Mediations/AdMobMediation/Plugins/Android/aps-admob-adapter.aar.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Mediations/APSConnectionUtil", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Mediations/APSConnectionUtil.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Mediations/MoPubMediation", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Scripts/Mediations/MoPubMediation.meta", | 
					
						
							|  |  |  |  |                 "Assets/APSConnectionUtil", | 
					
						
							|  |  |  |  |                 "Assets/APSConnectionUtil.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Sample/AmazonMoPubDemo.cs", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Sample/AmazonMoPubDemo.cs.meta", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Sample/APSMoPubMediation.unity", | 
					
						
							|  |  |  |  |                 "Assets/Amazon/Sample/APSMoPubMediation.unity.meta" | 
					
						
							|  |  |  |  |             }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         foreach (String fileToDel in filesToDel) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (Directory.Exists(fileToDel)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 Directory.Delete(fileToDel, true); | 
					
						
							|  |  |  |  |             } else if (File.Exists(fileToDel)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 File.Delete(fileToDel); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |              | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private IEnumerator GetSDKVersions () { | 
					
						
							|  |  |  |  |         // Wait one frame so that we don't try to show the progress bar in the middle of OnGUI(). | 
					
						
							|  |  |  |  |         yield return null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         activity = "Downloading SDK version manifest..."; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         UnityWebRequest www = new UnityWebRequest (AmazonConstants.manifestURL) { | 
					
						
							|  |  |  |  |             downloadHandler = new DownloadHandlerBuffer (), | 
					
						
							|  |  |  |  |             timeout = 10, // seconds | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         yield return www.SendWebRequest (); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (!string.IsNullOrEmpty (www.error)) { | 
					
						
							|  |  |  |  |             Debug.LogError (www.error); | 
					
						
							|  |  |  |  |             EditorUtility.DisplayDialog ( | 
					
						
							|  |  |  |  |                 "SDK Manager Service", | 
					
						
							|  |  |  |  |                 "The services we need are not accessible. Please consider integrating manually.\n\n" + | 
					
						
							|  |  |  |  |                 "For instructions, see " + AmazonConstants.helpLink, | 
					
						
							|  |  |  |  |                 "OK"); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         var json = www.downloadHandler.text; | 
					
						
							|  |  |  |  |         if (string.IsNullOrEmpty (json)) { | 
					
						
							|  |  |  |  |             json = "{}"; | 
					
						
							|  |  |  |  |             Debug.LogError ("Unable to retrieve SDK version manifest.  Showing installed SDKs only."); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         www.Dispose (); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Got the file.  Now extract info on latest SDKs available. | 
					
						
							|  |  |  |  |         amazonSdkInfo = new SdkInfo (); | 
					
						
							|  |  |  |  |         sdkInfo.Clear (); | 
					
						
							|  |  |  |  |         var dict = Json.Deserialize (json) as Dictionary<string, object>; | 
					
						
							|  |  |  |  |         if (dict != null) { | 
					
						
							|  |  |  |  |             object obj; | 
					
						
							|  |  |  |  |             if (dict.TryGetValue ("sdk", out obj)) { | 
					
						
							|  |  |  |  |                 amazonSdkInfo.FromJson ("sdk", obj as Dictionary<string, object>); | 
					
						
							|  |  |  |  |                 amazonSdkInfo.CurrentVersion = AmazonConstants.VERSION; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (dict.TryGetValue ("adapters", out obj)){ | 
					
						
							|  |  |  |  |                 var info = new SdkInfo (); | 
					
						
							|  |  |  |  |                 foreach (var item in obj as Dictionary<string, object>) { | 
					
						
							|  |  |  |  |                     if (info.FromJson (item.Key, item.Value as Dictionary<string, object>)) | 
					
						
							|  |  |  |  |                             sdkInfo[info.Key] = info; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         var baseType = typeof(AmazonPackageConfig); | 
					
						
							|  |  |  |  |         var configs = from t in Assembly.GetExecutingAssembly().GetTypes() | 
					
						
							|  |  |  |  |                       where t.IsSubclassOf(baseType) && !t.IsAbstract | 
					
						
							|  |  |  |  |                       select Activator.CreateInstance(t) as AmazonPackageConfig; | 
					
						
							|  |  |  |  |         foreach (var config in configs) { | 
					
						
							|  |  |  |  |             SdkInfo info; | 
					
						
							|  |  |  |  |             sdkInfo.TryGetValue(config.Name, out info); | 
					
						
							|  |  |  |  |             if (info.FromConfig(config) && info.Key != null) | 
					
						
							|  |  |  |  |                 sdkInfo[info.Key] = info; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         coroutine = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         deleteUnwantedFiles(); | 
					
						
							|  |  |  |  |         Repaint (); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     void OnGUI () { | 
					
						
							|  |  |  |  |         // Is any async job in progress? | 
					
						
							|  |  |  |  |         var stillWorking = coroutine != null || downloader != null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         GUILayout.Space (5); | 
					
						
							|  |  |  |  |         EditorGUILayout.LabelField ("Amazon SDKs", labelStyle, GUILayout.Height (20)); | 
					
						
							|  |  |  |  |         using (new EditorGUILayout.VerticalScope("box")) { | 
					
						
							|  |  |  |  |             SdkHeaders(); | 
					
						
							|  |  |  |  |             SdkRow(amazonSdkInfo); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (sdkInfo.Count > 0) { | 
					
						
							|  |  |  |  |             GUILayout.Space (5); | 
					
						
							|  |  |  |  |             EditorGUILayout.LabelField ("Mediated Networks", labelStyle, GUILayout.Height (20)); | 
					
						
							|  |  |  |  |             using (new EditorGUILayout.VerticalScope ("box")) | 
					
						
							|  |  |  |  |             using (var s = new EditorGUILayout.ScrollViewScope (scrollPos, false, false)) { | 
					
						
							|  |  |  |  |                 scrollPos = s.scrollPosition; | 
					
						
							|  |  |  |  |                 SdkHeaders (); | 
					
						
							|  |  |  |  |                 foreach (var item in sdkInfo) | 
					
						
							|  |  |  |  |                     SdkRow (item.Value); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Indicate async operation in progress. | 
					
						
							|  |  |  |  |         using (new EditorGUILayout.HorizontalScope (GUILayout.ExpandWidth (false))) | 
					
						
							|  |  |  |  |         EditorGUILayout.LabelField (stillWorking ? activity : " "); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         using (new EditorGUILayout.HorizontalScope ()) { | 
					
						
							|  |  |  |  |             GUILayout.Space (10); | 
					
						
							|  |  |  |  |             if (!stillWorking) { | 
					
						
							|  |  |  |  |                 if (GUILayout.Button ("Done", fieldWidth)) | 
					
						
							|  |  |  |  |                     Close (); | 
					
						
							|  |  |  |  |             } else { | 
					
						
							|  |  |  |  |                 if (GUILayout.Button ("Cancel", fieldWidth)) | 
					
						
							|  |  |  |  |                     CancelOperation (); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (GUILayout.Button ("Help", fieldWidth)) | 
					
						
							|  |  |  |  |                 Application.OpenURL (AmazonConstants.helpLink); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void SdkHeaders () { | 
					
						
							|  |  |  |  |         using (new EditorGUILayout.HorizontalScope (GUILayout.ExpandWidth (false))) { | 
					
						
							|  |  |  |  |             GUILayout.Space (10); | 
					
						
							|  |  |  |  |             EditorGUILayout.LabelField ("Package", headerStyle); | 
					
						
							|  |  |  |  |             GUILayout.Button ("Version", headerStyle); | 
					
						
							|  |  |  |  |             GUILayout.Space (3); | 
					
						
							|  |  |  |  |             GUILayout.Button ("Action", headerStyle, fieldWidth); | 
					
						
							|  |  |  |  |             GUILayout.Button (" ", headerStyle, GUILayout.Width (1)); | 
					
						
							|  |  |  |  |             GUILayout.Space (5); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         GUILayout.Space (4); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void SdkRow (SdkInfo info, Func<bool, bool> customButton = null) { | 
					
						
							|  |  |  |  |         var lat = info.LatestVersion; | 
					
						
							|  |  |  |  |         var cur = info.CurrentVersion; | 
					
						
							|  |  |  |  |         var isInst = !string.IsNullOrEmpty (cur); | 
					
						
							|  |  |  |  |         var canInst = !string.IsNullOrEmpty (lat) && (!isInst || AmazonUtils.CompareVersions (cur, lat) < 0); | 
					
						
							|  |  |  |  |         // Is any async job in progress? | 
					
						
							|  |  |  |  |         var stillWorking = coroutine != null || downloader != null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         string tooltip = string.Empty; | 
					
						
							|  |  |  |  |         if (isInst && (AmazonUtils.CompareVersions (cur, lat) != 0)) | 
					
						
							|  |  |  |  |             tooltip += "\n  Installed:  " + cur; | 
					
						
							|  |  |  |  |         if (!string.IsNullOrEmpty (tooltip)) | 
					
						
							|  |  |  |  |             tooltip = info.Name + "\n  Package:  " + (lat ?? "n/a") + tooltip; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         GUILayout.Space (4); | 
					
						
							|  |  |  |  |         using (new EditorGUILayout.HorizontalScope (GUILayout.ExpandWidth (false))) { | 
					
						
							|  |  |  |  |             GUILayout.Space (10); | 
					
						
							|  |  |  |  |             EditorGUILayout.LabelField (new GUIContent { text = info.Name, tooltip = tooltip }); | 
					
						
							|  |  |  |  |             GUILayout.Button (new GUIContent { | 
					
						
							|  |  |  |  |                 text = lat ?? "--", | 
					
						
							|  |  |  |  |                     tooltip = tooltip | 
					
						
							|  |  |  |  |             }, canInst ? EditorStyles.boldLabel : EditorStyles.label); | 
					
						
							|  |  |  |  |             GUILayout.Space (3); | 
					
						
							|  |  |  |  |             if (customButton == null || !customButton (canInst)) { | 
					
						
							|  |  |  |  |                 GUI.enabled = !stillWorking && (canInst); | 
					
						
							|  |  |  |  |                 if (GUILayout.Button (new GUIContent { | 
					
						
							|  |  |  |  |                         text = isInst ? "Upgrade" : "Install", | 
					
						
							|  |  |  |  |                             tooltip = tooltip | 
					
						
							|  |  |  |  |                     }, fieldWidth)) | 
					
						
							|  |  |  |  |                     this.StartCoroutine (DownloadSDK (info)); | 
					
						
							|  |  |  |  |                 GUI.enabled = true; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |                 // Need to fill space so that the Install/Upgrade buttons all line up nicely. | 
					
						
							|  |  |  |  |             GUILayout.Button (" ", EditorStyles.label, GUILayout.Width (17)); | 
					
						
							|  |  |  |  |             GUILayout.Space (5); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         GUILayout.Space (4); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void CancelOperation () { | 
					
						
							|  |  |  |  |         // Stop any async action taking place. | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (downloader != null) { | 
					
						
							|  |  |  |  |             downloader.Abort (); // The coroutine should resume and clean up. | 
					
						
							|  |  |  |  |             return; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (coroutine != null) | 
					
						
							|  |  |  |  |             this.StopCoroutine (coroutine.routine); | 
					
						
							|  |  |  |  |         coroutine = null; | 
					
						
							|  |  |  |  |         downloader = null; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private IEnumerator DownloadSDK (SdkInfo info) { | 
					
						
							|  |  |  |  |         var path = Path.Combine (downloadDir, info.Filename); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         activity = string.Format ("Downloading {0}...", info.Filename); | 
					
						
							|  |  |  |  |         Debug.Log (activity); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Start the async download job. | 
					
						
							|  |  |  |  |         downloader = new UnityWebRequest (info.Url) { | 
					
						
							|  |  |  |  |             downloadHandler = new DownloadHandlerFile (path), | 
					
						
							|  |  |  |  |             timeout = 60, // seconds | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         downloader.SendWebRequest (); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Pause until download done/cancelled/fails, keeping progress bar up to date. | 
					
						
							|  |  |  |  |         while (!downloader.isDone) { | 
					
						
							|  |  |  |  |             yield return null; | 
					
						
							|  |  |  |  |             var progress = Mathf.FloorToInt (downloader.downloadProgress * 100); | 
					
						
							|  |  |  |  |             if (EditorUtility.DisplayCancelableProgressBar ("Amazon SDK Manager", activity, progress)) | 
					
						
							|  |  |  |  |                 downloader.Abort (); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         EditorUtility.ClearProgressBar (); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (string.IsNullOrEmpty (downloader.error)) | 
					
						
							|  |  |  |  |             AssetDatabase.ImportPackage (path, true); // OK, got the file, so let the user import it if they want. | 
					
						
							|  |  |  |  |         else { | 
					
						
							|  |  |  |  |             var error = downloader.error; | 
					
						
							|  |  |  |  |             if (downloader.isNetworkError) { | 
					
						
							|  |  |  |  |                 if (error.EndsWith ("destination host")) | 
					
						
							|  |  |  |  |                     error += ": " + info.Url; | 
					
						
							|  |  |  |  |             } else if (downloader.isHttpError) { | 
					
						
							|  |  |  |  |                 switch (downloader.responseCode) { | 
					
						
							|  |  |  |  |                     case 404: | 
					
						
							|  |  |  |  |                         var file = Path.GetFileName (new Uri (info.Url).LocalPath); | 
					
						
							|  |  |  |  |                         error = string.Format ("File {0} not found on server.", file); | 
					
						
							|  |  |  |  |                         break; | 
					
						
							|  |  |  |  |                     default: | 
					
						
							|  |  |  |  |                         error = downloader.responseCode + "\n" + error; | 
					
						
							|  |  |  |  |                         break; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Debug.LogError (error); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Reset async state so the GUI is operational again. | 
					
						
							|  |  |  |  |         downloader.Dispose (); | 
					
						
							|  |  |  |  |         downloader = null; | 
					
						
							|  |  |  |  |         coroutine = null; | 
					
						
							|  |  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-06-24 01:28:57 +00:00
										 |  |  |  | } |