OSDN Git Service

鍵垢であっても自分自身のツイートを公式RTできるように修正
authorKimura Youichi <kim.upsilon@bucyou.net>
Wed, 26 Oct 2016 13:02:15 +0000 (22:02 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Thu, 27 Oct 2016 01:53:08 +0000 (10:53 +0900)
OpenTween.Tests/Models/PostClassTest.cs
OpenTween/Models/PostClass.cs
OpenTween/Resources/ChangeLog.txt
OpenTween/Tween.cs

index e4b0bb2..ac8dd41 100644 (file)
@@ -289,6 +289,66 @@ namespace OpenTween.Models
         }
 
         [Fact]
+        public void CanRetweetBy_DMTest()
+        {
+            var post = new TestPostClass
+            {
+                IsDm = true,
+                IsMe = false, // 自分が受け取った DM
+                UserId = 222L, // 送信元ユーザーID
+            };
+
+            Assert.False(post.CanRetweetBy(selfUserId: 111L));
+        }
+
+        [Fact]
+        public void CanRetweetBy_MyTweetTest()
+        {
+            var post = new TestPostClass
+            {
+                UserId = 111L, // 自分のツイート
+            };
+
+            Assert.True(post.CanRetweetBy(selfUserId: 111L));
+        }
+
+        [Fact]
+        public void CanRetweetBy_ProtectedMyTweetTest()
+        {
+            var post = new TestPostClass
+            {
+                UserId = 111L, // 自分のツイート
+                IsProtect = true,
+            };
+
+            Assert.True(post.CanRetweetBy(selfUserId: 111L));
+        }
+
+        [Fact]
+        public void CanRetweetBy_OthersTweet_NotProtectedTest()
+        {
+            var post = new TestPostClass
+            {
+                UserId = 222L, // 他人のツイート
+                IsProtect = false,
+            };
+
+            Assert.True(post.CanRetweetBy(selfUserId: 111L));
+        }
+
+        [Fact]
+        public void CanRetweetBy_OthersTweet_ProtectedTest()
+        {
+            var post = new TestPostClass
+            {
+                UserId = 222L, // 他人のツイート
+                IsProtect = true,
+            };
+
+            Assert.False(post.CanRetweetBy(selfUserId: 111L));
+        }
+
+        [Fact]
         public void ConvertToOriginalPost_Test()
         {
             var retweetPost = new PostClass
index da03914..8a4c951 100644 (file)
@@ -383,6 +383,24 @@ namespace OpenTween.Models
             return false;
         }
 
+        /// <summary>
+        /// このツイートが指定したユーザーによってリツイート可能であるかを判定します
+        /// </summary>
+        /// <param name="selfUserId">リツイートしようとするユーザーのID</param>
+        /// <returns>リツイート可能であれば true、そうでなければ false</returns>
+        public bool CanRetweetBy(long selfUserId)
+        {
+            // DM は常にリツイート不可
+            if (this.IsDm)
+                return false;
+
+            // 自分のツイートであれば鍵垢であるかに関わらずリツイート可
+            if (this.UserId == selfUserId)
+                return true;
+
+            return !this.IsProtect;
+        }
+
         public PostClass ConvertToOriginalPost()
         {
             if (this.RetweetedId == null)
index 97f09ba..091960b 100644 (file)
@@ -1,6 +1,7 @@
 更新履歴
 
 ==== Ver 1.3.6-dev(2016/xx/xx)
+ * CHG: 非公開アカウントであっても自分自身のツイートを公式RTできるようになりました
  * FIX: 発言詳細部のプロフィール画像に誤ったユーザーの画像が表示されることがある不具合を修正
  * FIX: ツイートURLのコピー時に余分な改行文字が末尾に付く不具合を修正
  * FIX: Bing翻訳機能が使用できなくなっていた問題を修正
index ae079be..5f678a1 100644 (file)
@@ -3368,7 +3368,7 @@ namespace OpenTween
                 FavorareMenuItem.Enabled = true;
                 ShowRelatedStatusesMenuItem.Enabled = true;  //PublicSearchの時問題出るかも
 
-                if (_curPost.IsProtect)
+                if (!_curPost.CanRetweetBy(this.twitterApi.CurrentUserId))
                 {
                     ReTweetStripMenuItem.Enabled = false;
                     ReTweetUnofficialStripMenuItem.Enabled = false;
@@ -10115,9 +10115,11 @@ namespace OpenTween
             //公式RT
             if (this.ExistCurrentPost)
             {
-                if (_curPost.IsProtect)
+                if (!_curPost.CanRetweetBy(this.twitterApi.CurrentUserId))
                 {
-                    MessageBox.Show("Protected.");
+                    if (this._curPost.IsProtect)
+                        MessageBox.Show("Protected.");
+
                     _DoFavRetweetFlags = false;
                     return;
                 }
@@ -10141,11 +10143,6 @@ namespace OpenTween
                 }
                 else
                 {
-                    if (_curPost.IsDm)
-                    {
-                        _DoFavRetweetFlags = false;
-                        return;
-                    }
                     if (!this._cfgCommon.RetweetNoConfirm)
                     {
                         string Questiontext = Properties.Resources.RetweetQuestion1;
@@ -10162,7 +10159,7 @@ namespace OpenTween
                 foreach (int idx in _curList.SelectedIndices)
                 {
                     PostClass post = GetCurTabPost(idx);
-                    if (!post.IsProtect && !post.IsDm)
+                    if (post.CanRetweetBy(this.twitterApi.CurrentUserId))
                         statusIds.Add(post.StatusId);
                 }
 
@@ -11014,7 +11011,7 @@ namespace OpenTween
                 this.OpenFavotterOpMenuItem.Enabled = true;
                 this.ShowRelatedStatusesMenuItem2.Enabled = true;  //PublicSearchの時問題出るかも
 
-                if (_curPost.IsProtect)
+                if (!_curPost.CanRetweetBy(this.twitterApi.CurrentUserId))
                 {
                     this.RtOpMenuItem.Enabled = false;
                     this.RtUnOpMenuItem.Enabled = false;