using System.Data;
using System.Drawing;
using System.Linq;
+using System.Net.Http;
using System.Text;
using System.Windows.Forms;
using System.Threading;
internal Twitter tw;
internal TwitterApi twitterApi;
- private bool _ValidationError = false;
-
public AppendSettingDialog()
{
this.InitializeComponent();
{
var u = settingCommon.UserAccounts[userAccountIdx];
this.tw.Initialize(u.Token, u.TokenSecret, u.Username, u.UserId);
- this.twitterApi.Initialize(u.Token, u.TokenSecret);
-
- if (u.UserId == 0)
- {
- this.tw.VerifyCredentials();
- u.UserId = this.tw.UserId;
- }
}
else
{
}
}
- private void Save_Click(object sender, EventArgs e)
- {
- if (MyCommon.IsNetworkAvailable() &&
- (this.ShortUrlPanel.ComboBoxAutoShortUrlFirst.SelectedIndex == (int)MyCommon.UrlConverter.Bitly || this.ShortUrlPanel.ComboBoxAutoShortUrlFirst.SelectedIndex == (int)MyCommon.UrlConverter.Jmp))
- {
- // bit.ly 短縮機能実装のプライバシー問題の暫定対応
- // bit.ly 使用時はログインIDとAPIキーの指定を必須とする
- // 参照: http://sourceforge.jp/projects/opentween/lists/archive/dev/2012-January/000020.html
- if (string.IsNullOrEmpty(this.ShortUrlPanel.TextBitlyId.Text) || string.IsNullOrEmpty(this.ShortUrlPanel.TextBitlyPw.Text))
- {
- MessageBox.Show("bit.ly のログイン名とAPIキーの指定は必須項目です。", Application.ProductName);
- _ValidationError = true;
- TreeViewSetting.SelectedNode = TreeViewSetting.Nodes["ConnectionNode"].Nodes["ShortUrlNode"]; // 動作タブを選択
- TreeViewSetting.Select();
- this.ShortUrlPanel.TextBitlyId.Focus();
- return;
- }
-
- if (!BitlyValidation(this.ShortUrlPanel.TextBitlyId.Text, this.ShortUrlPanel.TextBitlyPw.Text))
- {
- MessageBox.Show(Properties.Resources.SettingSave_ClickText1);
- _ValidationError = true;
- TreeViewSetting.SelectedNode = TreeViewSetting.Nodes["ConnectionNode"].Nodes["ShortUrlNode"]; // 動作タブを選択
- TreeViewSetting.Select();
- this.ShortUrlPanel.TextBitlyId.Focus();
- return;
- }
- else
- {
- _ValidationError = false;
- }
- }
- else
- {
- _ValidationError = false;
- }
- }
-
private void Setting_FormClosing(object sender, FormClosingEventArgs e)
{
if (MyCommon._endingFlag) return;
e.Cancel = true;
}
}
- if (_ValidationError)
- {
- e.Cancel = true;
- }
if (e.Cancel == false && TreeViewSetting.SelectedNode != null)
{
var curPanel = (SettingPanelBase)TreeViewSetting.SelectedNode.Tag;
}
}
- private void StartAuthButton_Click(object sender, EventArgs e)
+ private async void StartAuthButton_Click(object sender, EventArgs e)
{
- try
+ using (ControlTransaction.Disabled(this.BasedPanel.StartAuthButton))
{
- this.ApplyNetworkSettings();
+ try
+ {
+ this.ApplyNetworkSettings();
- var newAccount = this.PinAuth();
- if (newAccount == null)
- return;
+ var newAccount = await this.PinAuth();
+ if (newAccount == null)
+ return;
- var authUserCombo = this.BasedPanel.AuthUserCombo;
+ var authUserCombo = this.BasedPanel.AuthUserCombo;
- var oldAccount = authUserCombo.Items.Cast<UserAccount>()
- .FirstOrDefault(x => x.UserId == this.tw.UserId);
+ var oldAccount = authUserCombo.Items.Cast<UserAccount>()
+ .FirstOrDefault(x => x.UserId == newAccount.UserId);
- int idx;
- if (oldAccount != null)
- {
- idx = authUserCombo.Items.IndexOf(oldAccount);
- authUserCombo.Items[idx] = newAccount;
+ int idx;
+ if (oldAccount != null)
+ {
+ idx = authUserCombo.Items.IndexOf(oldAccount);
+ authUserCombo.Items[idx] = newAccount;
+ }
+ else
+ {
+ idx = authUserCombo.Items.Add(newAccount);
+ }
+
+ authUserCombo.SelectedIndex = idx;
+
+ MessageBox.Show(this, Properties.Resources.AuthorizeButton_Click1,
+ "Authenticate", MessageBoxButtons.OK);
}
- else
+ catch (WebApiException ex)
{
- idx = authUserCombo.Items.Add(newAccount);
+ var message = Properties.Resources.AuthorizeButton_Click2 + Environment.NewLine + ex.Message;
+ MessageBox.Show(this, message, "Authenticate", MessageBoxButtons.OK);
}
-
- authUserCombo.SelectedIndex = idx;
-
- MessageBox.Show(this, Properties.Resources.AuthorizeButton_Click1,
- "Authenticate", MessageBoxButtons.OK);
- }
- catch (WebApiException ex)
- {
- var message = Properties.Resources.AuthorizeButton_Click2 + Environment.NewLine + ex.Message;
- MessageBox.Show(this, message, "Authenticate", MessageBoxButtons.OK);
}
}
var timeout = int.Parse(this.ConnectionPanel.ConnectionTimeOut.Text.Trim());
Networking.DefaultTimeout = TimeSpan.FromSeconds(timeout);
+ var uploadImageTimeout = int.Parse(this.ConnectionPanel.UploadImageTimeout.Text.Trim());
+ Networking.UploadImageTimeout = TimeSpan.FromSeconds(uploadImageTimeout);
+
Networking.ForceIPv4 = this.ConnectionPanel.checkBoxForceIPv4.Checked;
- HttpTwitter.TwitterUrl = this.ConnectionPanel.TwitterAPIText.Text.Trim();
+ TwitterApiConnection.RestApiHost = this.ConnectionPanel.TwitterAPIText.Text.Trim();
}
- private UserAccount PinAuth()
+ private async Task<UserAccount> PinAuth()
{
- this.tw.Initialize("", "", "", 0);
+ var requestToken = await TwitterApiConnection.GetRequestTokenAsync();
- var pinPageUrl = this.tw.StartAuthentication();
+ var pinPageUrl = TwitterApiConnection.GetAuthorizeUri(requestToken);
var pin = AuthDialog.DoAuth(this, pinPageUrl);
if (string.IsNullOrEmpty(pin))
return null; // キャンセルされた場合
- this.tw.Authenticate(pin);
+ var accessTokenResponse = await TwitterApiConnection.GetAccessTokenAsync(requestToken, pin);
return new UserAccount
{
- Username = this.tw.Username,
- UserId = this.tw.UserId,
- Token = this.tw.AccessToken,
- TokenSecret = this.tw.AccessTokenSecret,
+ Username = accessTokenResponse["screen_name"],
+ UserId = long.Parse(accessTokenResponse["user_id"]),
+ Token = accessTokenResponse["oauth_token"],
+ TokenSecret = accessTokenResponse["oauth_token_secret"],
};
}
private void CheckPostAndGet_CheckedChanged(object sender, EventArgs e)
- {
- this.GetPeriodPanel.LabelPostAndGet.Visible = this.GetPeriodPanel.CheckPostAndGet.Checked && !tw.UserStreamEnabled;
- }
+ => this.GetPeriodPanel.LabelPostAndGet.Visible = this.GetPeriodPanel.CheckPostAndGet.Checked && !tw.UserStreamActive;
private void Setting_Shown(object sender, EventArgs e)
{
} while (!this.IsHandleCreated);
this.TopMost = this.PreviewPanel.CheckAlwaysTop.Checked;
- this.GetPeriodPanel.LabelPostAndGet.Visible = this.GetPeriodPanel.CheckPostAndGet.Checked && !tw.UserStreamEnabled;
- this.GetPeriodPanel.LabelUserStreamActive.Visible = tw.UserStreamEnabled;
- }
-
- private bool BitlyValidation(string id, string apikey)
- {
- if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(apikey))
- {
- return false;
- }
-
- string req = "http://api.bit.ly/v3/validate";
- string content = "";
- Dictionary<string, string> param = new Dictionary<string, string>();
-
- param.Add("login", ApplicationSettings.BitlyLoginId);
- param.Add("apiKey", ApplicationSettings.BitlyApiKey);
- param.Add("x_login", id);
- param.Add("x_apiKey", apikey);
- param.Add("format", "txt");
-
- if (!(new HttpVarious()).PostData(req, param, out content))
- {
- return true; // 通信エラーの場合はとりあえずチェックを通ったことにする
- }
- else if (content.Trim() == "1")
- {
- return true; // 検証成功
- }
- else if (content.Trim() == "0")
- {
- return false; // 検証失敗 APIキーとIDの組み合わせが違う
- }
- else
- {
- return true; // 規定外応答:通信エラーの可能性があるためとりあえずチェックを通ったことにする
- }
- }
-
- private void Cancel_Click(object sender, EventArgs e)
- {
- _ValidationError = false;
+ this.GetPeriodPanel.LabelPostAndGet.Visible = this.GetPeriodPanel.CheckPostAndGet.Checked && !tw.UserStreamActive;
+ this.GetPeriodPanel.LabelUserStreamActive.Visible = tw.UserStreamActive;
}
private void OpenUrl(string url)
{
- string myPath = url;
- string path = this.ActionPanel.BrowserPathText.Text;
+ var myPath = url;
+ var path = this.ActionPanel.BrowserPathText.Text;
try
{
if (!string.IsNullOrEmpty(path))
{
if (path.StartsWith("\"", StringComparison.Ordinal) && path.Length > 2 && path.IndexOf("\"", 2, StringComparison.Ordinal) > -1)
{
- int sep = path.IndexOf("\"", 2, StringComparison.Ordinal);
- string browserPath = path.Substring(1, sep - 1);
- string arg = "";
+ var sep = path.IndexOf("\"", 2, StringComparison.Ordinal);
+ var browserPath = path.Substring(1, sep - 1);
+ var arg = "";
if (sep < path.Length - 1)
{
arg = path.Substring(sep + 1);
}
private void CreateAccountButton_Click(object sender, EventArgs e)
- {
- this.OpenUrl("https://twitter.com/signup");
- }
+ => this.OpenUrl("https://twitter.com/signup");
private void GetPeriodPanel_IntervalChanged(object sender, IntervalChangedEventArgs e)
- {
- this.IntervalChanged?.Invoke(sender, e);
- }
+ => this.IntervalChanged?.Invoke(sender, e);
}
public class IntervalChangedEventArgs : EventArgs
public bool Lists;
public bool UserTimeline;
- public static IntervalChangedEventArgs ResetAll
+ public static IntervalChangedEventArgs ResetAll => new IntervalChangedEventArgs
{
- get
- {
- return new IntervalChangedEventArgs()
- {
- UserStream = true,
- Timeline = true,
- Reply = true,
- DirectMessage = true,
- PublicSearch = true,
- Lists = true,
- UserTimeline = true,
- };
- }
- }
+ UserStream = true,
+ Timeline = true,
+ Reply = true,
+ DirectMessage = true,
+ PublicSearch = true,
+ Lists = true,
+ UserTimeline = true,
+ };
}
}