/// <summary> /// Gets the dropbox access token. /// <para> /// This fetches the access token from the applications settings, if it is not found there /// (or if the user chooses to reset the settings) then the UI in <see cref="LoginForm"/> is /// displayed to authorize the user. /// </para> /// </summary> /// <returns>A valid access token or null.</returns> private async Task<string> GetAccessToken() { Console.Write("Reset settings (Y/N) "); if (Console.ReadKey().Key == ConsoleKey.Y) { Settings.Default.Reset(); } Console.WriteLine(); var accessToken = Settings.Default.AccessToken; if (string.IsNullOrEmpty(accessToken)) { Console.WriteLine("Waiting for credentials."); var completion = new TaskCompletionSource<Tuple<string, string>>(); var thread = new Thread(() => { try { var app = new Application(); var login = new LoginForm(ApiKey); app.Run(login); if (login.Result) { completion.TrySetResult(Tuple.Create(login.AccessToken, login.Uid)); } else { completion.TrySetCanceled(); } } catch(Exception e) { completion.TrySetException(e); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); try { var result = await completion.Task; Console.WriteLine("and back..."); accessToken = result.Item1; var uid = result.Item2; Console.WriteLine("Uid: {0}", uid); Settings.Default.AccessToken = accessToken; Settings.Default.Uid = uid; Settings.Default.Save(); } catch (Exception e) { e = e.InnerException ?? e; Console.WriteLine("Error: {0}", e.Message); return null; } } return accessToken; }
/// <summary> /// Gets the dropbox access token. /// <para> /// This fetches the access token from the applications settings, if it is not found there /// (or if the user chooses to reset the settings) then the UI in <see cref="LoginForm"/> is /// displayed to authorize the user. /// </para> /// </summary> /// <returns>A valid access token or null.</returns> private async Task <string> GetAccessToken() { Console.Write("Reset settings (Y/N) "); if (Console.ReadKey().Key == ConsoleKey.Y) { Settings.Default.Reset(); } Console.WriteLine(); var accessToken = Settings.Default.AccessToken; if (string.IsNullOrEmpty(accessToken)) { Console.WriteLine("Waiting for credentials."); var completion = new TaskCompletionSource <Tuple <string, string> >(); var thread = new Thread(() => { try { var app = new Application(); var login = new LoginForm(ApiKey); app.Run(login); if (login.Result) { completion.TrySetResult(Tuple.Create(login.AccessToken, login.Uid)); } else { completion.TrySetCanceled(); } } catch (Exception e) { completion.TrySetException(e); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); try { var result = await completion.Task; Console.WriteLine("and back..."); accessToken = result.Item1; var uid = result.Item2; Console.WriteLine("Uid: {0}", uid); Settings.Default.AccessToken = accessToken; Settings.Default.Uid = uid; Settings.Default.Save(); } catch (Exception e) { e = e.InnerException ?? e; Console.WriteLine("Error: {0}", e.Message); return(null); } } return(accessToken); }