11using System ;
2+ using System . Collections . Generic ;
23using System . Linq ;
34using Octokit ;
45using UnityEditor ;
@@ -23,6 +24,7 @@ class PublishView : Subview
2324
2425 [ SerializeField ] private string username ;
2526 [ SerializeField ] private string [ ] owners = { OwnersDefaultText } ;
27+ [ SerializeField ] private IList < Organization > organizations ;
2628 [ SerializeField ] private int selectedOwner ;
2729 [ SerializeField ] private string repoName = String . Empty ;
2830 [ SerializeField ] private string repoDescription = "" ;
@@ -31,6 +33,7 @@ class PublishView : Subview
3133 [ NonSerialized ] private IApiClient client ;
3234 [ NonSerialized ] private bool isBusy ;
3335 [ NonSerialized ] private string error ;
36+ [ NonSerialized ] private bool organizationsNeedLoading ;
3437
3538 public IApiClient Client
3639 {
@@ -56,23 +59,43 @@ public IApiClient Client
5659 }
5760 }
5861
62+ public override void OnEnable ( )
63+ {
64+ base . OnEnable ( ) ;
65+ organizationsNeedLoading = organizations == null && ! isBusy ;
66+ }
67+
68+ public override void OnDataUpdate ( )
69+ {
70+ base . OnDataUpdate ( ) ;
71+ MaybeUpdateData ( ) ;
72+ }
73+
74+ private void MaybeUpdateData ( )
75+ {
76+ if ( organizationsNeedLoading )
77+ {
78+ organizationsNeedLoading = false ;
79+ LoadOrganizations ( ) ;
80+ }
81+ }
82+
5983 public override void InitializeView ( IView parent )
6084 {
6185 base . InitializeView ( parent ) ;
6286 Title = WindowTitle ;
6387 Size = viewSize ;
64- PopulateView ( ) ;
6588 }
6689
67- private void PopulateView ( )
90+ private void LoadOrganizations ( )
6891 {
69- try
92+ var keychainConnections = Platform . Keychain . Connections ;
93+ //TODO: ONE_USER_LOGIN This assumes only ever one user can login
94+ if ( keychainConnections . Any ( ) )
7095 {
71- var keychainConnections = Platform . Keychain . Connections ;
72- //TODO: ONE_USER_LOGIN This assumes only ever one user can login
73- if ( keychainConnections . Any ( ) )
96+ try
7497 {
75- Logger . Trace ( "GetCurrentUser " ) ;
98+ Logger . Trace ( "Loading Keychain " ) ;
7699
77100 isBusy = true ;
78101
@@ -87,28 +110,30 @@ private void PopulateView()
87110 //TODO: ONE_USER_LOGIN This assumes only ever one user can login
88111 username = keychainConnections . First ( ) . Username ;
89112
90- Client . GetOrganizations ( organizations => {
113+ Logger . Trace ( "Loading Organizations" ) ;
114+
115+ Client . GetOrganizations ( orgs => {
116+ organizations = orgs ;
91117 Logger . Trace ( "Loaded {0} organizations" , organizations . Count ) ;
92118
93119 var organizationLogins = organizations
94- . OrderBy ( organization => organization . Login )
95- . Select ( organization => organization . Login ) ;
120+ . OrderBy ( organization => organization . Login ) . Select ( organization => organization . Login ) ;
96121
97122 owners = new [ ] { OwnersDefaultText , username } . Union ( organizationLogins ) . ToArray ( ) ;
98123
99124 isBusy = false ;
100125 } ) ;
101126 } ) ;
102127 }
103- else
128+ catch ( Exception e )
104129 {
105- Logger . Warning ( "No Keychain connections to use" ) ;
130+ Logger . Error ( e , "Error PopulateView & GetOrganizations" ) ;
131+ isBusy = false ;
106132 }
107133 }
108- catch ( Exception e )
134+ else
109135 {
110- Logger . Error ( e , "Error PopulateView & GetOrganizations" ) ;
111- throw ;
136+ Logger . Warning ( "No Keychain connections to use" ) ;
112137 }
113138 }
114139
@@ -196,6 +221,7 @@ public override void OnGUI()
196221 EditorGUI . BeginDisabledGroup ( ! IsFormValid ) ;
197222 if ( GUILayout . Button ( PublishViewCreateButton ) )
198223 {
224+ GUI . FocusControl ( null ) ;
199225 isBusy = true ;
200226
201227 var organization = owners [ selectedOwner ] == username ? null : owners [ selectedOwner ] ;
0 commit comments