diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PopupWindow.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PopupWindow.cs index cb5edff0eb9e7a5c4a61fe7c628557942d3de74b..5596711ca07c6d6eb654de2a2f5771bbb9ac14f4 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PopupWindow.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PopupWindow.cs @@ -41,9 +41,9 @@ namespace GitHub.Unity popupWindow.ActiveViewType = popupViewType; popupWindow.titleContent = new GUIContent(popupWindow.ActiveView.Title, Styles.SmallLogo); - - popupWindow.InitializeWindow(EntryPoint.ApplicationManager); + popupWindow.OnEnable(); popupWindow.Show(); + popupWindow.Refresh(); return popupWindow; } @@ -64,7 +64,6 @@ namespace GitHub.Unity public override void OnEnable() { base.OnEnable(); - minSize = maxSize = ActiveView.Size; ActiveView.OnEnable(); } @@ -75,6 +74,12 @@ namespace GitHub.Unity ActiveView.OnDisable(); } + public override void OnDataUpdate() + { + base.OnDataUpdate(); + ActiveView.OnDataUpdate(); + } + public override void OnUI() { base.OnUI(); @@ -132,7 +137,14 @@ namespace GitHub.Unity private PopupViewType ActiveViewType { get { return activeViewType; } - set { activeViewType = value; } + set + { + if (activeViewType != value) + { + ActiveView.OnDisable(); + activeViewType = value; + } + } } } } diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs index e6fe206eb79d71a9e68af67f2e2f2144f479e0f5..addb84e6369c101239f6dd015f978cb6122b3069 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using Octokit; using UnityEditor; @@ -23,6 +24,7 @@ namespace GitHub.Unity [SerializeField] private string username; [SerializeField] private string[] owners = { OwnersDefaultText }; + [SerializeField] private IList<Organization> organizations; [SerializeField] private int selectedOwner; [SerializeField] private string repoName = String.Empty; [SerializeField] private string repoDescription = ""; @@ -31,6 +33,7 @@ namespace GitHub.Unity [NonSerialized] private IApiClient client; [NonSerialized] private bool isBusy; [NonSerialized] private string error; + [NonSerialized] private bool organizationsNeedLoading; public IApiClient Client { @@ -56,23 +59,43 @@ namespace GitHub.Unity } } + public override void OnEnable() + { + base.OnEnable(); + organizationsNeedLoading = organizations == null && !isBusy; + } + + public override void OnDataUpdate() + { + base.OnDataUpdate(); + MaybeUpdateData(); + } + + private void MaybeUpdateData() + { + if (organizationsNeedLoading) + { + organizationsNeedLoading = false; + LoadOrganizations(); + } + } + public override void InitializeView(IView parent) { base.InitializeView(parent); Title = WindowTitle; Size = viewSize; - PopulateView(); } - private void PopulateView() + private void LoadOrganizations() { - try + var keychainConnections = Platform.Keychain.Connections; + //TODO: ONE_USER_LOGIN This assumes only ever one user can login + if (keychainConnections.Any()) { - var keychainConnections = Platform.Keychain.Connections; - //TODO: ONE_USER_LOGIN This assumes only ever one user can login - if (keychainConnections.Any()) + try { - Logger.Trace("GetCurrentUser"); + Logger.Trace("Loading Keychain"); isBusy = true; @@ -87,12 +110,14 @@ namespace GitHub.Unity //TODO: ONE_USER_LOGIN This assumes only ever one user can login username = keychainConnections.First().Username; - Client.GetOrganizations(organizations => { + Logger.Trace("Loading Organizations"); + + Client.GetOrganizations(orgs => { + organizations = orgs; Logger.Trace("Loaded {0} organizations", organizations.Count); var organizationLogins = organizations - .OrderBy(organization => organization.Login) - .Select(organization => organization.Login); + .OrderBy(organization => organization.Login).Select(organization => organization.Login); owners = new[] { OwnersDefaultText, username }.Union(organizationLogins).ToArray(); @@ -100,15 +125,15 @@ namespace GitHub.Unity }); }); } - else + catch (Exception e) { - Logger.Warning("No Keychain connections to use"); + Logger.Error(e, "Error PopulateView & GetOrganizations"); + isBusy = false; } } - catch (Exception e) + else { - Logger.Error(e, "Error PopulateView & GetOrganizations"); - throw; + Logger.Warning("No Keychain connections to use"); } } @@ -196,6 +221,7 @@ namespace GitHub.Unity EditorGUI.BeginDisabledGroup(!IsFormValid); if (GUILayout.Button(PublishViewCreateButton)) { + GUI.FocusControl(null); isBusy = true; var organization = owners[selectedOwner] == username ? null : owners[selectedOwner];