public async Task SaveMisskeyAccount(MisskeyAccount accountData, CancellationToken cancellationToken) { await _storage.SaveMisskeyAccountData(new MisskeyAccountData(accountData.Username.Value, accountData.Instance.Value, accountData.DisplayName.Value, accountData.AccessToken.Token, accountData.IconUrl.IconUrl, accountData.IsReadingPostsFromThisAccount.Value), cancellationToken); }
public async Task Login(string host, CancellationToken cancellationToken) { string secret; try { secret = await _registerClient.RegisterClient(host, cancellationToken); } catch { _showRegisterClientError.ShowRegisterClientError(); throw; } var(sessionToken, authorizeUrl) = await _getAuthorizeUrl.GetAuthorizeUri(host, secret, cancellationToken); _showAuthUrl.ShowAuthUrl(authorizeUrl); while (true) { try { await _waitAuthorize.WaitAuthorize(cancellationToken); break; } catch { _showAuthorizeError.ShowAuthorizeError(); } } var(accessTokenData, user) = await _getAccessToken.GetAccessToken(host, secret, sessionToken, cancellationToken); var username = new Username(user.Username); var instance = new Instance(host); var displayName = new DisplayName(user.DisplayName); var identifier = new AccountIdentifier(username, instance); var accessToken = new MisskeyAccessToken(accessTokenData); var iconUrl = new AccountIconUrl(user.IconUrl); var account = await _accountRepository.FindMisskeyAccount(identifier, cancellationToken); if (account is not null) { account = account with { AccessToken = accessToken, IconUrl = iconUrl }; } else { account = new MisskeyAccount(username, instance, displayName, accessToken, iconUrl, new IsReadingPostsFromThisAccount(true)); } await _accountRepository.SaveMisskeyAccount(account, cancellationToken); var connection = _makeMisskeyConnection.MakeConnection(account.Username.Value, account.Instance.Value, account.AccessToken.Token); _connectionRepository.AddConnection(new Connection(account.AccountIdentifier, connection)); }
public ApiManager(MisskeyAccount account = null) { this.Account = account; }
private async void button1_Click(object sender, EventArgs e) { this.button1.Enabled = false; if (string.IsNullOrEmpty(this.hostBox.Text)) { this.button1.Enabled = true; MessageBox.Show("ホスト名が無効です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } Uri uri; try { uri = new Uri($"https://{this.hostBox.Text}"); } catch { this.button1.Enabled = true; MessageBox.Show("ホスト名が無効です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } // 既に保存されているインスタンスを取得 var instance = this.instances.FindByHost(uri.Host); var isNewInstance = (instance == null); // 新しいインスタンスだったとき if (isNewInstance) { Debug.WriteLine($"register app of new instance: {uri.Scheme}://{uri.Host}"); try { // 連携アプリを新規登録 instance = await MisskeyInstance.Register(uri.Host, "Misqru", "An desktop app to prepare user-followings", new[] { "following-write" }); } catch { this.button1.Enabled = true; MessageBox.Show("連携アプリの登録に失敗しました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } // Instancesに追加 this.instances.Add(instance); await this.setting.SaveAsync(); } this.label2.Visible = true; var account = await MisskeyAccount.Authorize(instance); this.label2.Visible = false; // 新しいインスタンスだったとき or Accountsに存在しなければ if (isNewInstance || this.accounts.FindIndex(i => i.Token == account.Token && i.Host == instance.Host) == -1) { // Accountsに追加 this.accounts.Add(account); await this.setting.SaveAsync(); this.Data = account; } this.DialogResult = DialogResult.OK; this.Close(); }