1
1
using System ;
2
+ using System . Collections . Generic ;
2
3
using System . Linq ;
3
4
using Octokit ;
4
5
using UnityEditor ;
@@ -23,6 +24,7 @@ class PublishView : Subview
23
24
24
25
[ SerializeField ] private string username ;
25
26
[ SerializeField ] private string [ ] owners = { OwnersDefaultText } ;
27
+ [ SerializeField ] private IList < Organization > organizations ;
26
28
[ SerializeField ] private int selectedOwner ;
27
29
[ SerializeField ] private string repoName = String . Empty ;
28
30
[ SerializeField ] private string repoDescription = "" ;
@@ -31,6 +33,7 @@ class PublishView : Subview
31
33
[ NonSerialized ] private IApiClient client ;
32
34
[ NonSerialized ] private bool isBusy ;
33
35
[ NonSerialized ] private string error ;
36
+ [ NonSerialized ] private bool organizationsNeedLoading ;
34
37
35
38
public IApiClient Client
36
39
{
@@ -56,23 +59,43 @@ public IApiClient Client
56
59
}
57
60
}
58
61
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
+
59
83
public override void InitializeView ( IView parent )
60
84
{
61
85
base . InitializeView ( parent ) ;
62
86
Title = WindowTitle ;
63
87
Size = viewSize ;
64
- PopulateView ( ) ;
65
88
}
66
89
67
- private void PopulateView ( )
90
+ private void LoadOrganizations ( )
68
91
{
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 ( ) )
70
95
{
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
74
97
{
75
- Logger . Trace ( "GetCurrentUser " ) ;
98
+ Logger . Trace ( "Loading Keychain " ) ;
76
99
77
100
isBusy = true ;
78
101
@@ -87,28 +110,30 @@ private void PopulateView()
87
110
//TODO: ONE_USER_LOGIN This assumes only ever one user can login
88
111
username = keychainConnections . First ( ) . Username ;
89
112
90
- Client . GetOrganizations ( organizations => {
113
+ Logger . Trace ( "Loading Organizations" ) ;
114
+
115
+ Client . GetOrganizations ( orgs => {
116
+ organizations = orgs ;
91
117
Logger . Trace ( "Loaded {0} organizations" , organizations . Count ) ;
92
118
93
119
var organizationLogins = organizations
94
- . OrderBy ( organization => organization . Login )
95
- . Select ( organization => organization . Login ) ;
120
+ . OrderBy ( organization => organization . Login ) . Select ( organization => organization . Login ) ;
96
121
97
122
owners = new [ ] { OwnersDefaultText , username } . Union ( organizationLogins ) . ToArray ( ) ;
98
123
99
124
isBusy = false ;
100
125
} ) ;
101
126
} ) ;
102
127
}
103
- else
128
+ catch ( Exception e )
104
129
{
105
- Logger . Warning ( "No Keychain connections to use" ) ;
130
+ Logger . Error ( e , "Error PopulateView & GetOrganizations" ) ;
131
+ isBusy = false ;
106
132
}
107
133
}
108
- catch ( Exception e )
134
+ else
109
135
{
110
- Logger . Error ( e , "Error PopulateView & GetOrganizations" ) ;
111
- throw ;
136
+ Logger . Warning ( "No Keychain connections to use" ) ;
112
137
}
113
138
}
114
139
@@ -196,6 +221,7 @@ public override void OnGUI()
196
221
EditorGUI . BeginDisabledGroup ( ! IsFormValid ) ;
197
222
if ( GUILayout . Button ( PublishViewCreateButton ) )
198
223
{
224
+ GUI . FocusControl ( null ) ;
199
225
isBusy = true ;
200
226
201
227
var organization = owners [ selectedOwner ] == username ? null : owners [ selectedOwner ] ;
0 commit comments