OSDN Git Service

ShortUrl.ExpandUrlStrAsync() メソッドの名前を ExpandUrlAsync に変更
[opentween/open-tween.git] / OpenTween / UserInfoDialog.cs
index 3e4525a..9acfca8 100644 (file)
@@ -44,43 +44,27 @@ namespace OpenTween
     public partial class UserInfoDialog : OTBaseForm
     {
         private TwitterUser _displayUser;
-        public TwitterUser DisplayUser
-        {
-            get { return this._displayUser; }
-            set
-            {
-                if (this._displayUser != value)
-                {
-                    this._displayUser = value;
-                    this.OnDisplayUserChanged();
-                }
-            }
-        }
 
-        private new TweenMain Owner
-        {
-            get { return (TweenMain)base.Owner; }
-        }
+        private readonly TweenMain mainForm;
+        private readonly Twitter twitter;
 
-        private Twitter Twitter
+        public UserInfoDialog(TweenMain mainForm, Twitter twitter)
         {
-            get { return this.Owner.TwitterInstance; }
-        }
+            this.mainForm = mainForm;
+            this.twitter = twitter;
 
-        public UserInfoDialog()
-        {
             InitializeComponent();
 
             // LabelScreenName のフォントを OTBaseForm.GlobalFont に変更
             this.LabelScreenName.Font = this.ReplaceToGlobalFont(this.LabelScreenName.Font);
         }
 
-        protected virtual async void OnDisplayUserChanged()
+        public async Task ShowUserAsync(TwitterUser user)
         {
-            if (this._displayUser == null)
+            if (user == null || user == this._displayUser)
                 return;
 
-            var user = this._displayUser;
+            this._displayUser = user;
 
             this.LabelId.Text = user.IdStr;
             this.LabelScreenName.Text = user.ScreenName;
@@ -118,7 +102,7 @@ namespace OpenTween
             this.LinkLabelTweet.Tag = profileUrl;
             this.ToolTip1.SetToolTip(this.LinkLabelTweet, profileUrl);
 
-            if (this.Twitter.UserId == user.Id)
+            if (this.twitter.UserId == user.Id)
             {
                 this.ButtonEdit.Enabled = true;
                 this.ChangeIconToolStripMenuItem.Enabled = true;
@@ -152,8 +136,8 @@ namespace OpenTween
                 var atlist = new List<string>();
 
                 var html = WebUtility.HtmlEncode(descriptionText);
-                html = await this.Twitter.CreateHtmlAnchorAsync(html, atlist, null);
-                html = this.Owner.createDetailHtml(html);
+                html = await this.twitter.CreateHtmlAnchorAsync(html, atlist, null);
+                html = this.mainForm.createDetailHtml(html);
 
                 this.DescriptionBrowser.DocumentText = html;
             }
@@ -177,18 +161,24 @@ namespace OpenTween
             if (imageUri == null)
                 return;
 
-            using (var http = MyCommon.CreateHttpClient())
+            await this.UserPicture.SetImageFromTask(async () =>
             {
-                var imageStream = await http.GetStreamAsync(imageUri.Replace("_normal", "_bigger"));
-                this.UserPicture.Image = await MemoryImage.CopyFromStreamAsync(imageStream);
-            }
+                using (var http = MyCommon.CreateHttpClient())
+                {
+                    var imageStream = await http.GetStreamAsync(imageUri.Replace("_normal", "_bigger"))
+                        .ConfigureAwait(false);
+
+                    return await MemoryImage.CopyFromStreamAsync(imageStream)
+                        .ConfigureAwait(false);
+                }
+            });
         }
 
         private async Task SetLinkLabelWebAsync(string uri)
         {
             if (uri != null)
             {
-                var expandedUrl = await ShortUrl.Instance.ExpandUrlStrAsync(uri);
+                var expandedUrl = await ShortUrl.Instance.ExpandUrlAsync(uri);
 
                 this.LinkLabelWeb.Text = uri;
                 this.LinkLabelWeb.Tag = expandedUrl;
@@ -208,8 +198,8 @@ namespace OpenTween
 
             if (status != null)
             {
-                var html = await this.Twitter.CreateHtmlAnchorAsync(status.Text, atlist, status.MergedEntities, null);
-                html = this.Owner.createDetailHtml(html +
+                var html = await this.twitter.CreateHtmlAnchorAsync(status.Text, atlist, status.MergedEntities, null);
+                html = this.mainForm.createDetailHtml(html +
                     " Posted at " + MyCommon.DateTimeParse(status.CreatedAt) +
                     " via " + status.Source);
 
@@ -228,7 +218,7 @@ namespace OpenTween
             this.ButtonFollow.Enabled = false;
             this.ButtonUnFollow.Enabled = false;
 
-            if (this.Twitter.Username == screenName)
+            if (this.twitter.Username == screenName)
                 return;
 
             var friendship = await Task.Run(() =>
@@ -236,7 +226,7 @@ namespace OpenTween
                 var IsFollowing = false;
                 var IsFollowedBy = false;
 
-                var ret = this.Twitter.GetFriendshipInfo(screenName, ref IsFollowing, ref IsFollowedBy);
+                var ret = this.twitter.GetFriendshipInfo(screenName, ref IsFollowing, ref IsFollowedBy);
                 if (!string.IsNullOrEmpty(ret))
                     return null;
 
@@ -267,25 +257,25 @@ namespace OpenTween
             this.TextBoxName.Location = this.LabelName.Location;
             this.TextBoxName.Height = this.LabelName.Height;
             this.TextBoxName.Width = this.LabelName.Width;
-            this.TextBoxName.BackColor = this.Owner.InputBackColor;
+            this.TextBoxName.BackColor = this.mainForm.InputBackColor;
             this.TextBoxName.MaxLength = 20;
 
             this.TextBoxLocation.Location = this.LabelLocation.Location;
             this.TextBoxLocation.Height = this.LabelLocation.Height;
             this.TextBoxLocation.Width = this.LabelLocation.Width;
-            this.TextBoxLocation.BackColor = this.Owner.InputBackColor;
+            this.TextBoxLocation.BackColor = this.mainForm.InputBackColor;
             this.TextBoxLocation.MaxLength = 30;
 
             this.TextBoxWeb.Location = this.LinkLabelWeb.Location;
             this.TextBoxWeb.Height = this.LinkLabelWeb.Height;
             this.TextBoxWeb.Width = this.LinkLabelWeb.Width;
-            this.TextBoxWeb.BackColor = this.Owner.InputBackColor;
+            this.TextBoxWeb.BackColor = this.mainForm.InputBackColor;
             this.TextBoxWeb.MaxLength = 100;
 
             this.TextBoxDescription.Location = this.DescriptionBrowser.Location;
             this.TextBoxDescription.Height = this.DescriptionBrowser.Height;
             this.TextBoxDescription.Width = this.DescriptionBrowser.Width;
-            this.TextBoxDescription.BackColor = this.Owner.InputBackColor;
+            this.TextBoxDescription.BackColor = this.mainForm.InputBackColor;
             this.TextBoxDescription.MaxLength = 160;
             this.TextBoxDescription.Multiline = true;
             this.TextBoxDescription.ScrollBars = ScrollBars.Vertical;
@@ -299,12 +289,12 @@ namespace OpenTween
             if (linkUrl == null)
                 return;
 
-            await this.Owner.OpenUriAsync(linkUrl);
+            await this.mainForm.OpenUriAsync(linkUrl);
         }
 
         private void ButtonFollow_Click(object sender, EventArgs e)
         {
-            string ret = this.Twitter.PostFollowCommand(this._displayUser.ScreenName);
+            string ret = this.twitter.PostFollowCommand(this._displayUser.ScreenName);
             if (!string.IsNullOrEmpty(ret))
             {
                 MessageBox.Show(Properties.Resources.FRMessage2 + ret);
@@ -324,7 +314,7 @@ namespace OpenTween
                                Properties.Resources.ButtonUnFollow_ClickText2,
                                MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
             {
-                string ret = this.Twitter.PostRemoveCommand(this._displayUser.ScreenName);
+                string ret = this.twitter.PostRemoveCommand(this._displayUser.ScreenName);
                 if (!string.IsNullOrEmpty(ret))
                 {
                     MessageBox.Show(Properties.Resources.FRMessage2 + ret);
@@ -363,21 +353,21 @@ namespace OpenTween
                     //ハッシュタグの場合は、タブで開く
                     string urlStr = Uri.UnescapeDataString(e.Url.AbsoluteUri);
                     string hash = urlStr.Substring(urlStr.IndexOf("#"));
-                    this.Owner.HashSupl.AddItem(hash);
-                    this.Owner.HashMgr.AddHashToHistory(hash.Trim(), false);
-                    this.Owner.AddNewTabForSearch(hash);
+                    this.mainForm.HashSupl.AddItem(hash);
+                    this.mainForm.HashMgr.AddHashToHistory(hash.Trim(), false);
+                    this.mainForm.AddNewTabForSearch(hash);
                     return;
                 }
                 else
                 {
                     Match m = Regex.Match(e.Url.AbsoluteUri, @"^https?://twitter.com/(#!/)?(?<ScreenName>[a-zA-Z0-9_]+)$");
-                    if (AppendSettingDialog.Instance.OpenUserTimeline && m.Success && this.Owner.IsTwitterId(m.Result("${ScreenName}")))
+                    if (AppendSettingDialog.Instance.OpenUserTimeline && m.Success && this.mainForm.IsTwitterId(m.Result("${ScreenName}")))
                     {
-                        this.Owner.AddNewTabForUserTimeline(m.Result("${ScreenName}"));
+                        this.mainForm.AddNewTabForUserTimeline(m.Result("${ScreenName}"));
                     }
                     else
                     {
-                        this.Owner.OpenUriAsync(e.Url.OriginalString);
+                        this.mainForm.OpenUriAsync(e.Url.OriginalString);
                     }
                 }
             }
@@ -392,7 +382,7 @@ namespace OpenTween
         private void SelectionCopyToolStripMenuItem_Click(object sender, EventArgs e)
         {
             var browser = (WebBrowser)this.ContextMenuRecentPostBrowser.SourceControl;
-            var selectedText = this.Owner.WebBrowser_GetSelectionText(ref browser);
+            var selectedText = this.mainForm.WebBrowser_GetSelectionText(ref browser);
             if (selectedText != null)
             {
                 try
@@ -409,24 +399,24 @@ namespace OpenTween
         private void ContextMenuRecentPostBrowser_Opening(object sender, CancelEventArgs e)
         {
             var browser = (WebBrowser)this.ContextMenuRecentPostBrowser.SourceControl;
-            var selectedText = this.Owner.WebBrowser_GetSelectionText(ref browser);
+            var selectedText = this.mainForm.WebBrowser_GetSelectionText(ref browser);
 
             this.SelectionCopyToolStripMenuItem.Enabled = selectedText != null;
         }
 
         private void LinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
-            this.Owner.OpenUriAsync("https://support.twitter.com/groups/31-twitter-basics/topics/111-features/articles/268350-x8a8d-x8a3c-x6e08-x307f-x30a2-x30ab-x30a6-x30f3-x30c8-x306b-x3064-x3044-x3066");
+            this.mainForm.OpenUriAsync("https://support.twitter.com/groups/31-twitter-basics/topics/111-features/articles/268350-x8a8d-x8a3c-x6e08-x307f-x30a2-x30ab-x30a6-x30f3-x30c8-x306b-x3064-x3044-x3066");
         }
 
         private void LinkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
-            this.Owner.OpenUriAsync("https://support.twitter.com/groups/31-twitter-basics/topics/107-my-profile-account-settings/articles/243055-x516c-x958b-x3001-x975e-x516c-x958b-x30a2-x30ab-x30a6-x30f3-x30c8-x306b-x3064-x3044-x3066");
+            this.mainForm.OpenUriAsync("https://support.twitter.com/groups/31-twitter-basics/topics/107-my-profile-account-settings/articles/243055-x516c-x958b-x3001-x975e-x516c-x958b-x30a2-x30ab-x30a6-x30f3-x30c8-x306b-x3064-x3044-x3066");
         }
 
         private void ButtonSearchPosts_Click(object sender, EventArgs e)
         {
-            this.Owner.AddNewTabForUserTimeline(this._displayUser.ScreenName);
+            this.mainForm.AddNewTabForUserTimeline(this._displayUser.ScreenName);
         }
 
         private async void UserPicture_Click(object sender, EventArgs e)
@@ -434,7 +424,7 @@ namespace OpenTween
             var imageUrl = this._displayUser.ProfileImageUrlHttps;
             imageUrl = imageUrl.Remove(imageUrl.LastIndexOf("_normal"), 7);
 
-            await this.Owner.OpenUriAsync(imageUrl);
+            await this.mainForm.OpenUriAsync(imageUrl);
         }
 
         private bool IsEditing = false;
@@ -443,7 +433,7 @@ namespace OpenTween
         private async void ButtonEdit_Click(object sender, EventArgs e)
         {
             // 自分以外のプロフィールは変更できない
-            if (this.Twitter.UserId != this._displayUser.Id)
+            if (this.twitter.UserId != this._displayUser.Id)
                 return;
 
             this.ButtonEdit.Enabled = false;
@@ -480,6 +470,8 @@ namespace OpenTween
             }
             else
             {
+                Task showUserTask = null;
+
                 if (TextBoxName.Modified ||
                     TextBoxLocation.Modified ||
                     TextBoxWeb.Modified ||
@@ -488,13 +480,13 @@ namespace OpenTween
                     try
                     {
                         var user = await Task.Run(() =>
-                            this.Twitter.PostUpdateProfile(
+                            this.twitter.PostUpdateProfile(
                                 this.TextBoxName.Text,
                                 this.TextBoxWeb.Text,
                                 this.TextBoxLocation.Text,
                                 this.TextBoxDescription.Text));
 
-                        this.DisplayUser = user;
+                        showUserTask = this.ShowUserAsync(user);
                     }
                     catch (WebApiException ex)
                     {
@@ -522,6 +514,9 @@ namespace OpenTween
                 ButtonEdit.Text = ButtonEditText;
 
                 IsEditing = false;
+
+                if (showUserTask != null)
+                    await showUserTask;
             }
 
             this.ButtonEdit.Enabled = true;
@@ -530,7 +525,7 @@ namespace OpenTween
         private async Task DoChangeIcon(string filename)
         {
             var ret = await Task.Run(() =>
-                this.Twitter.PostUpdateProfileImage(filename));
+                this.twitter.PostUpdateProfileImage(filename));
 
             if (!string.IsNullOrEmpty(ret))
             {
@@ -548,7 +543,7 @@ namespace OpenTween
                 {
                     TwitterUser result = null;
 
-                    var err = this.Twitter.GetUserInfo(this._displayUser.ScreenName, ref result);
+                    var err = this.twitter.GetUserInfo(this._displayUser.ScreenName, ref result);
                     if (!string.IsNullOrEmpty(err))
                         throw new WebApiException(err);
 
@@ -556,7 +551,7 @@ namespace OpenTween
                 });
 
                 if (user != null)
-                    this.DisplayUser = user;
+                    await this.ShowUserAsync(user);
             }
             catch (WebApiException ex)
             {
@@ -594,7 +589,7 @@ namespace OpenTween
                                 Properties.Resources.ButtonBlock_ClickText2,
                                 MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
             {
-                string res = this.Twitter.PostCreateBlock(this._displayUser.ScreenName);
+                string res = this.twitter.PostCreateBlock(this._displayUser.ScreenName);
                 if (!string.IsNullOrEmpty(res))
                 {
                     MessageBox.Show(res + Environment.NewLine + Properties.Resources.ButtonBlock_ClickText3);
@@ -612,7 +607,7 @@ namespace OpenTween
                                 Properties.Resources.ButtonReportSpam_ClickText2,
                                 MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
             {
-                string res = this.Twitter.PostReportSpam(this._displayUser.ScreenName);
+                string res = this.twitter.PostReportSpam(this._displayUser.ScreenName);
                 if (!string.IsNullOrEmpty(res))
                 {
                     MessageBox.Show(res + Environment.NewLine + Properties.Resources.ButtonReportSpam_ClickText3);
@@ -630,7 +625,7 @@ namespace OpenTween
                                 Properties.Resources.ButtonBlockDestroy_ClickText2,
                                 MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
             {
-                string res = this.Twitter.PostDestroyBlock(this._displayUser.ScreenName);
+                string res = this.twitter.PostDestroyBlock(this._displayUser.ScreenName);
                 if (!string.IsNullOrEmpty(res))
                 {
                     MessageBox.Show(res + Environment.NewLine + Properties.Resources.ButtonBlockDestroy_ClickText3);