diff --git a/src/GitHub.Api/Application/ApiClient.cs b/src/GitHub.Api/Application/ApiClient.cs index 415872b07..83b6603a1 100644 --- a/src/GitHub.Api/Application/ApiClient.cs +++ b/src/GitHub.Api/Application/ApiClient.cs @@ -50,7 +50,7 @@ private async Task LogoutInternal(UriString host) await loginManager.Logout(host); } - public async Task CreateRepository(NewRepository newRepository, Action callback, string organization = null) + public async Task CreateRepository(NewRepository newRepository, Action callback, string organization = null) { Guard.ArgumentNotNull(callback, "callback"); try @@ -64,7 +64,7 @@ public async Task CreateRepository(NewRepository newRepository, Action> onSuccess, Action onError = null) + public async Task GetOrganizations(Action onSuccess, Action onError = null) { Guard.ArgumentNotNull(onSuccess, nameof(onSuccess)); await GetOrganizationInternal(onSuccess, onError); @@ -84,7 +84,7 @@ public async Task ValidateCurrentUser(Action onSuccess, Action onErro } } - public async Task GetCurrentUser(Action callback) + public async Task GetCurrentUser(Action callback) { Guard.ArgumentNotNull(callback, "callback"); var user = await GetCurrentUserInternal(); @@ -187,7 +187,7 @@ public async Task ContinueLoginAsync(LoginResult loginResult, Func CreateRepositoryInternal(NewRepository newRepository, string organization) + private async Task CreateRepositoryInternal(NewRepository newRepository, string organization) { try { @@ -196,18 +196,18 @@ public async Task ContinueLoginAsync(LoginResult loginResult, Func ContinueLoginAsync(LoginResult loginResult, Func> onSuccess, Action onError = null) + private async Task GetOrganizationInternal(Action onSuccess, Action onError = null) { try { @@ -235,7 +235,11 @@ private async Task GetOrganizationInternal(Action> onSuccess if (organizations != null) { - onSuccess(organizations.ToArray()); + var array = organizations.Select(organization => new Organization() { + Name = organization.Name, + Login = organization.Login + }).ToArray(); + onSuccess(array); } } catch(Exception ex) @@ -245,14 +249,14 @@ private async Task GetOrganizationInternal(Action> onSuccess } } - private async Task GetCurrentUserInternal() + private async Task GetCurrentUserInternal() { try { logger.Trace("Getting Current User"); await ValidateKeychain(); - return await githubClient.User.Current(); + return (await githubClient.User.Current()).ToGitHubUser(); } catch (Exception ex) { @@ -311,6 +315,18 @@ private async Task ValidateKeychain() } } + class GitHubUser + { + public string Name { get; set; } + public string Login { get; set; } + } + + class GitHubRepository + { + public string Name { get; set; } + public string CloneUrl { get; set; } + } + class ApiClientException : Exception { public ApiClientException() diff --git a/src/GitHub.Api/Application/IApiClient.cs b/src/GitHub.Api/Application/IApiClient.cs index 77819e3f5..d4a87e3e2 100644 --- a/src/GitHub.Api/Application/IApiClient.cs +++ b/src/GitHub.Api/Application/IApiClient.cs @@ -9,13 +9,13 @@ interface IApiClient { HostAddress HostAddress { get; } UriString OriginalUrl { get; } - Task CreateRepository(NewRepository newRepository, Action callback, string organization = null); - Task GetOrganizations(Action> onSuccess, Action onError = null); + Task CreateRepository(NewRepository newRepository, Action callback, string organization = null); + Task GetOrganizations(Action onSuccess, Action onError = null); Task Login(string username, string password, Action need2faCode, Action result); Task ContinueLogin(LoginResult loginResult, string code); Task LoginAsync(string username, string password, Func need2faCode); Task Logout(UriString host); - Task GetCurrentUser(Action callback); + Task GetCurrentUser(Action callback); Task ValidateCurrentUser(Action onSuccess, Action onError = null); } } diff --git a/src/GitHub.Api/Application/OctokitExtensions.cs b/src/GitHub.Api/Application/OctokitExtensions.cs new file mode 100644 index 000000000..c53101c74 --- /dev/null +++ b/src/GitHub.Api/Application/OctokitExtensions.cs @@ -0,0 +1,21 @@ +namespace GitHub.Unity +{ + static class OctokitExtensions + { + public static GitHubUser ToGitHubUser(this Octokit.User user) + { + return new GitHubUser() { + Name = user.Name, + Login = user.Login, + }; + } + + public static GitHubRepository ToGitHubRepository(this Octokit.Repository repository) + { + return new GitHubRepository { + Name = repository.Name, + CloneUrl = repository.CloneUrl + }; + } + } +} \ No newline at end of file diff --git a/src/GitHub.Api/Application/Organization.cs b/src/GitHub.Api/Application/Organization.cs new file mode 100644 index 000000000..e78849dd6 --- /dev/null +++ b/src/GitHub.Api/Application/Organization.cs @@ -0,0 +1,8 @@ +namespace GitHub.Unity +{ + class Organization + { + public string Name { get; set; } + public string Login { get; set; } + } +} \ No newline at end of file diff --git a/src/GitHub.Api/GitHub.Api.csproj b/src/GitHub.Api/GitHub.Api.csproj index a87766cee..87f8e2c30 100644 --- a/src/GitHub.Api/GitHub.Api.csproj +++ b/src/GitHub.Api/GitHub.Api.csproj @@ -99,6 +99,8 @@ + + diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs index 27f933f05..61d19e8c8 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PublishView.cs @@ -29,7 +29,7 @@ class PublishView : Subview [SerializeField] private string username; [SerializeField] private string[] owners = { OwnersDefaultText }; - [SerializeField] private IList organizations; + [SerializeField] private string[] publishOwners; [SerializeField] private int selectedOwner; [SerializeField] private string repoName = String.Empty; [SerializeField] private string repoDescription = ""; @@ -67,7 +67,7 @@ public IApiClient Client public override void OnEnable() { base.OnEnable(); - ownersNeedLoading = organizations == null && !isBusy; + ownersNeedLoading = publishOwners == null && !isBusy; } public override void OnDataUpdate() @@ -106,14 +106,14 @@ private void LoadOwners() Client.GetOrganizations(orgs => { - organizations = orgs; - Logger.Trace("Loaded {0} Owners", organizations.Count); + Logger.Trace("Loaded {0} Owners", orgs.Length); - var organizationLogins = organizations + publishOwners = orgs .OrderBy(organization => organization.Login) - .Select(organization => organization.Login); + .Select(organization => organization.Login) + .ToArray(); - owners = new[] { OwnersDefaultText, username }.Union(organizationLogins).ToArray(); + owners = new[] { OwnersDefaultText, username }.Union(publishOwners).ToArray(); isBusy = false; }, exception =>