From 2c58d52884aace6ea545f736ead8660fe48a23ac Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Sun, 5 May 2024 00:32:05 +0900 Subject: [PATCH] =?utf8?q?SetInitialUnreadState=E3=83=A1=E3=82=BD=E3=83=83?= =?utf8?q?=E3=83=89=E3=82=92TwitterPostFactory=E3=82=AF=E3=83=A9=E3=82=B9?= =?utf8?q?=E3=81=AB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- OpenTween.Tests/Api/GraphQL/TimelineTweetTest.cs | 32 +++--- OpenTween.Tests/Models/TwitterPostFactoryTest.cs | 118 ++++++++++++++++----- OpenTween/Models/TwitterPostFactory.cs | 28 ++++- OpenTween/SocialProtocol/Twitter/TwitterAccount.cs | 1 - OpenTween/Twitter.cs | 51 +++------ 5 files changed, 146 insertions(+), 84 deletions(-) diff --git a/OpenTween.Tests/Api/GraphQL/TimelineTweetTest.cs b/OpenTween.Tests/Api/GraphQL/TimelineTweetTest.cs index a4ccdac9..38e6acee 100644 --- a/OpenTween.Tests/Api/GraphQL/TimelineTweetTest.cs +++ b/OpenTween.Tests/Api/GraphQL/TimelineTweetTest.cs @@ -72,8 +72,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_SimpleTweet.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1613784711020826626", post.StatusId.Id); Assert.Equal(40480664L, post.UserId); @@ -86,8 +86,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_TweetWithMedia.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1614587968567783424", post.StatusId.Id); Assert.Equal(40480664L, post.UserId); @@ -104,8 +104,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_RetweetedTweet.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1617128268548964354", post.StatusId.Id); Assert.Equal(40480664L, post.RetweetedByUserId); @@ -119,8 +119,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_TweetWithVisibility.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1602775353088524288", post.StatusId.Id); Assert.Equal(357750891L, post.UserId); @@ -132,8 +132,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_SelfThread.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1511751702684499968", post.StatusId.Id); Assert.Equal(40480664L, post.UserId); @@ -145,8 +145,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_QuotedTweet.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1588614645866147840", post.StatusId.Id); var quotedPostId = Assert.Single(post.QuoteStatusIds); @@ -159,8 +159,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_QuotedTweet_Tombstone.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1614653321310253057", post.StatusId.Id); var quotedPostId = Assert.Single(post.QuoteStatusIds); @@ -173,8 +173,8 @@ namespace OpenTween.Api.GraphQL var rootElm = this.LoadResponseDocument("TimelineTweet_PromotedTweet.json"); var timelineTweet = new TimelineTweet(rootElm); var status = timelineTweet.ToTwitterStatus(); - var postFactory = new TwitterPostFactory(this.CreateTabInfo()); - var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet()); + var postFactory = new TwitterPostFactory(this.CreateTabInfo(), new()); + var post = postFactory.CreateFromStatus(status, selfUserId: 1L, new HashSet(), firstLoad: false); Assert.Equal("1674737917363888129", post.StatusId.Id); Assert.Equal(2941313791L, post.UserId); diff --git a/OpenTween.Tests/Models/TwitterPostFactoryTest.cs b/OpenTween.Tests/Models/TwitterPostFactoryTest.cs index 6a31f012..9c74484b 100644 --- a/OpenTween.Tests/Models/TwitterPostFactoryTest.cs +++ b/OpenTween.Tests/Models/TwitterPostFactoryTest.cs @@ -72,9 +72,9 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_Test() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); - var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: false); Assert.Equal(new TwitterStatusId(status.IdStr), post.StatusId); Assert.Equal(new DateTimeUtc(2022, 1, 1, 0, 0, 0), post.CreatedAt); @@ -114,15 +114,17 @@ namespace OpenTween.Models Assert.False(post.IsProtect); Assert.False(post.IsOwl); Assert.False(post.IsMe); + + Assert.False(post.IsRead); } [Fact] public void CreateFromStatus_AuthorTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); var selfUserId = status.User.Id; - var post = factory.CreateFromStatus(status, selfUserId, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId, followerIds: EmptyIdSet, firstLoad: false); Assert.True(post.IsMe); } @@ -130,10 +132,10 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_FollowerTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); var followerIds = new HashSet { status.User.Id }; - var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds); + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds, firstLoad: false); Assert.False(post.IsOwl); } @@ -141,10 +143,10 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_NotFollowerTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); var followerIds = new HashSet { 30000L }; - var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds); + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds, firstLoad: false); Assert.True(post.IsOwl); } @@ -152,14 +154,14 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_RetweetTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var originalStatus = this.CreateStatus(); var retweetStatus = this.CreateStatus(); retweetStatus.RetweetedStatus = originalStatus; retweetStatus.Source = """Twitter Web App"""; - var post = factory.CreateFromStatus(retweetStatus, selfUserId: 20000L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(retweetStatus, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: false); Assert.Equal(new TwitterStatusId(retweetStatus.IdStr), post.StatusId); Assert.Equal(retweetStatus.User.Id, post.RetweetedByUserId); @@ -170,6 +172,68 @@ namespace OpenTween.Models Assert.Equal("https://www.opentween.org/", post.SourceUri?.OriginalString); } + [Fact] + public void CreateFromStatus_FirstLoadNotUnreadTest() + { + var settingCommon = new SettingCommon + { + Read = true, // 起動時の読み込み分を既読扱いにする + }; + + var factory = new TwitterPostFactory(this.CreateTabinfo(), settingCommon); + var status = this.CreateStatus(); + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: true); + + Assert.True(post.IsRead); // 既読 + } + + [Fact] + public void CreateFromStatus_FirstLoadUnreadTest() + { + var settingCommon = new SettingCommon + { + Read = false, // 起動時の読み込み分を既読扱いにしない + }; + + var factory = new TwitterPostFactory(this.CreateTabinfo(), settingCommon); + var status = this.CreateStatus(); + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: true); + + Assert.False(post.IsRead); // 未読 + } + + [Fact] + public void CreateFromStatus_SelfPostUnreadTest() + { + var settingCommon = new SettingCommon + { + ReadOwnPost = false, // 自分自身の発言を既読扱いにしない + }; + + var factory = new TwitterPostFactory(this.CreateTabinfo(), settingCommon); + var status = this.CreateStatus(); + status.User.Id = 20000L; + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: false); + + Assert.False(post.IsRead); // 未読 + } + + [Fact] + public void CreateFromStatus_SelfPostNotUnreadTest() + { + var settingCommon = new SettingCommon + { + ReadOwnPost = true, // 自分自身の発言を既読扱いにする + }; + + var factory = new TwitterPostFactory(this.CreateTabinfo(), settingCommon); + var status = this.CreateStatus(); + status.User.Id = 20000L; + var post = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: false); + + Assert.True(post.IsRead); // 既読 + } + private TwitterMessageEvent CreateDirectMessage(string senderId, string recipientId) { var messageId = this.random.Next(10000); @@ -212,7 +276,7 @@ namespace OpenTween.Models [Fact] public void CreateFromDirectMessageEvent_Test() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var selfUser = this.CreateUser(); var otherUser = this.CreateUser(); @@ -223,7 +287,7 @@ namespace OpenTween.Models [otherUser.IdStr] = otherUser, }; var apps = this.CreateApps(); - var post = factory.CreateFromDirectMessageEvent(eventItem, users, apps, selfUserId: selfUser.Id); + var post = factory.CreateFromDirectMessageEvent(eventItem, users, apps, selfUserId: selfUser.Id, firstLoad: false); Assert.Equal(new TwitterDirectMessageId(eventItem.Id), post.StatusId); Assert.Equal(new DateTimeUtc(2022, 1, 1, 0, 0, 0), post.CreatedAt); @@ -263,12 +327,14 @@ namespace OpenTween.Models Assert.False(post.IsProtect); Assert.True(post.IsOwl); Assert.False(post.IsMe); + + Assert.False(post.IsRead); } [Fact] public void CreateFromDirectMessageEvent_SenderTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var selfUser = this.CreateUser(); var otherUser = this.CreateUser(); @@ -279,7 +345,7 @@ namespace OpenTween.Models [otherUser.IdStr] = otherUser, }; var apps = this.CreateApps(); - var post = factory.CreateFromDirectMessageEvent(eventItem, users, apps, selfUserId: selfUser.Id); + var post = factory.CreateFromDirectMessageEvent(eventItem, users, apps, selfUserId: selfUser.Id, firstLoad: false); Assert.Equal(otherUser.Id, post.UserId); Assert.False(post.IsOwl); @@ -289,7 +355,7 @@ namespace OpenTween.Models [Fact] public void GetReceivedHashtags_Test() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); status.FullText = "hoge #OpenTween"; status.Entities.Hashtags = new[] @@ -301,7 +367,7 @@ namespace OpenTween.Models }, }; - _ = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet); + _ = factory.CreateFromStatus(status, selfUserId: 20000L, followerIds: EmptyIdSet, firstLoad: false); Assert.Equal(new[] { "#OpenTween" }, factory.GetReceivedHashtags()); Assert.Empty(factory.GetReceivedHashtags()); @@ -310,7 +376,7 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_MediaAltTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); status.FullText = "https://t.co/hoge"; @@ -329,7 +395,7 @@ namespace OpenTween.Models }, }; - var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet, firstLoad: false); var accessibleText = string.Format(Properties.Resources.ImageAltText, "代替テキスト"); Assert.Equal(accessibleText, post.AccessibleText); @@ -341,7 +407,7 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_MediaNoAltTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); status.FullText = "https://t.co/hoge"; @@ -360,7 +426,7 @@ namespace OpenTween.Models }, }; - var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet, firstLoad: false); Assert.Equal("pic.twitter.com/hoge", post.AccessibleText); Assert.Equal("""pic.twitter.com/hoge""", post.Text); @@ -371,7 +437,7 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_QuotedUrlTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); status.FullText = "https://t.co/hoge"; @@ -401,7 +467,7 @@ namespace OpenTween.Models FullText = "test", }; - var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet, firstLoad: false); var accessibleText = string.Format(Properties.Resources.QuoteStatus_AccessibleText, "foo", "test"); Assert.Equal(accessibleText, post.AccessibleText); @@ -413,7 +479,7 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_QuotedUrlWithPermelinkTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); status.FullText = "hoge"; @@ -436,7 +502,7 @@ namespace OpenTween.Models Expanded = "https://twitter.com/hoge/status/1234567890", }; - var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet, firstLoad: false); var accessibleText = "hoge " + string.Format(Properties.Resources.QuoteStatus_AccessibleText, "foo", "test"); Assert.Equal(accessibleText, post.AccessibleText); @@ -448,7 +514,7 @@ namespace OpenTween.Models [Fact] public void CreateFromStatus_QuotedUrlNoReferenceTest() { - var factory = new TwitterPostFactory(this.CreateTabinfo()); + var factory = new TwitterPostFactory(this.CreateTabinfo(), new()); var status = this.CreateStatus(); status.FullText = "https://t.co/hoge"; @@ -467,7 +533,7 @@ namespace OpenTween.Models }; status.QuotedStatus = null; - var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet); + var post = factory.CreateFromStatus(status, selfUserId: 100L, followerIds: EmptyIdSet, firstLoad: false); var accessibleText = "twitter.com/hoge/status/1…"; Assert.Equal(accessibleText, post.AccessibleText); diff --git a/OpenTween/Models/TwitterPostFactory.cs b/OpenTween/Models/TwitterPostFactory.cs index b540d2ae..5a4efce1 100644 --- a/OpenTween/Models/TwitterPostFactory.cs +++ b/OpenTween/Models/TwitterPostFactory.cs @@ -28,6 +28,7 @@ using System.Linq; using System.Net; using System.Text.RegularExpressions; using OpenTween.Api.DataModel; +using OpenTween.Setting; namespace OpenTween.Models { @@ -36,10 +37,14 @@ namespace OpenTween.Models private static readonly Uri SourceUriBase = new("https://twitter.com/"); private readonly TabInformations tabinfo; + private readonly SettingCommon settingCommon; private readonly HashSet receivedHashTags = new(); - public TwitterPostFactory(TabInformations tabinfo) - => this.tabinfo = tabinfo; + public TwitterPostFactory(TabInformations tabinfo, SettingCommon settingCommon) + { + this.tabinfo = tabinfo; + this.settingCommon = settingCommon; + } public string[] GetReceivedHashtags() { @@ -55,6 +60,7 @@ namespace OpenTween.Models TwitterStatus status, long selfUserId, ISet followerIds, + bool firstLoad, bool favTweet = false ) { @@ -189,6 +195,8 @@ namespace OpenTween.Models // retweeterUser から生成 RetweetedBy = retweeterUser != null ? string.Intern(retweeterUser.ScreenName) : null, RetweetedByUserId = retweeterUser?.Id, + + IsRead = this.DetermineUnreadState(isMe, firstLoad), }; } @@ -196,7 +204,8 @@ namespace OpenTween.Models TwitterMessageEvent eventItem, IReadOnlyDictionary users, IReadOnlyDictionary apps, - long selfUserId + long selfUserId, + bool firstLoad ) { var timestamp = long.Parse(eventItem.CreatedTimestamp); @@ -291,9 +300,22 @@ namespace OpenTween.Models IsProtect = displayUser.Protected, IsMe = senderIsMe, IsOwl = !senderIsMe, + + IsRead = this.DetermineUnreadState(senderIsMe, firstLoad), }; } + private bool DetermineUnreadState(bool isMe, bool firstLoad) + { + if (isMe && this.settingCommon.ReadOwnPost) + return true; + + if (firstLoad && this.settingCommon.Read) + return true; + + return false; + } + private string ReplaceTextFromApi(string text, TwitterEntities? entities, TwitterQuotedStatusPermalink? quotedStatusLink) { if (entities?.Urls != null) diff --git a/OpenTween/SocialProtocol/Twitter/TwitterAccount.cs b/OpenTween/SocialProtocol/Twitter/TwitterAccount.cs index b2bade42..b9c012c2 100644 --- a/OpenTween/SocialProtocol/Twitter/TwitterAccount.cs +++ b/OpenTween/SocialProtocol/Twitter/TwitterAccount.cs @@ -60,7 +60,6 @@ namespace OpenTween.SocialProtocol.Twitter var credential = accountSettings.GetTwitterCredential(); this.twLegacy.Initialize(credential, accountSettings.Username, accountSettings.UserId); this.twLegacy.RestrictFavCheck = settingCommon.RestrictFavCheck; - this.twLegacy.ReadOwnPost = settingCommon.ReadOwnPost; } public void Dispose() diff --git a/OpenTween/Twitter.cs b/OpenTween/Twitter.cs index f65816e5..257a0d80 100644 --- a/OpenTween/Twitter.cs +++ b/OpenTween/Twitter.cs @@ -180,7 +180,7 @@ namespace OpenTween public Twitter(TwitterApi api) { - this.postFactory = new(TabInformations.GetInstance()); + this.postFactory = new(TabInformations.GetInstance(), SettingManager.Instance.Common); this.urlExpander = new(ShortUrl.Instance); this.Api = api; @@ -283,8 +283,7 @@ namespace OpenTween this.previousStatusId = status.IdStr; // 投稿したものを返す - var post = this.CreatePostsFromStatusData(status); - this.SetInitialUnreadState(post, firstLoad: false); + var post = this.CreatePostsFromStatusData(status, firstLoad: false); return post; } @@ -426,8 +425,7 @@ namespace OpenTween throw new WebApiException("Invalid Json!"); // Retweetしたものを返す - var retweetPost = this.CreatePostsFromStatusData(status); - this.SetInitialUnreadState(retweetPost, firstLoad: false); + var retweetPost = this.CreatePostsFromStatusData(status, firstLoad: false); return retweetPost; } @@ -532,8 +530,6 @@ namespace OpenTween public bool RestrictFavCheck { get; set; } - public bool ReadOwnPost { get; set; } - public int FollowersCount { get; private set; } public int FriendsCount { get; private set; } @@ -816,18 +812,17 @@ namespace OpenTween .ConfigureAwait(false); } - var item = this.CreatePostsFromStatusData(status); - this.SetInitialUnreadState(item, firstLoad); + var item = this.CreatePostsFromStatusData(status, firstLoad); return item; } - private PostClass CreatePostsFromStatusData(TwitterStatus status) - => this.CreatePostsFromStatusData(status, favTweet: false); + private PostClass CreatePostsFromStatusData(TwitterStatus status, bool firstLoad) + => this.CreatePostsFromStatusData(status, firstLoad, favTweet: false); - private PostClass CreatePostsFromStatusData(TwitterStatus status, bool favTweet) + private PostClass CreatePostsFromStatusData(TwitterStatus status, bool firstLoad, bool favTweet) { - var post = this.postFactory.CreateFromStatus(status, this.UserId, this.followerId, favTweet); + var post = this.postFactory.CreateFromStatus(status, this.UserId, this.followerId, firstLoad, favTweet); _ = this.urlExpander.Expand(post); return post; @@ -835,7 +830,7 @@ namespace OpenTween private void CreatePostsFromJson(TwitterStatus[] items, MyCommon.WORKERTYPE gType, TabModel? tab, bool firstLoad) { - var posts = items.Select(x => this.CreatePostsFromStatusData(x)).ToArray(); + var posts = items.Select(x => this.CreatePostsFromStatusData(x, firstLoad)).ToArray(); TwitterPostFactory.AdjustSortKeyForPromotedPost(posts); @@ -859,8 +854,6 @@ namespace OpenTween if (gType != MyCommon.WORKERTYPE.UserTimeline && post.RetweetedByUserId != null && this.noRTId.Contains(post.RetweetedByUserId.Value)) continue; - this.SetInitialUnreadState(post, firstLoad); - if (tab != null && tab is InternalStorageTabModel) tab.AddPostQueue(post); else @@ -870,7 +863,7 @@ namespace OpenTween private void CreatePostsFromSearchJson(TwitterStatus[] statuses, PublicSearchTabModel tab, bool firstLoad) { - var posts = statuses.Select(x => this.CreatePostsFromStatusData(x)).ToArray(); + var posts = statuses.Select(x => this.CreatePostsFromStatusData(x, firstLoad)).ToArray(); TwitterPostFactory.AdjustSortKeyForPromotedPost(posts); @@ -883,8 +876,6 @@ namespace OpenTween continue; } - this.SetInitialUnreadState(post, firstLoad); - tab.AddPostQueue(post); } } @@ -904,27 +895,12 @@ namespace OpenTween continue; } - var post = this.CreatePostsFromStatusData(status, true); - - this.SetInitialUnreadState(post, firstLoad); + var post = this.CreatePostsFromStatusData(status, firstLoad, favTweet: true); TabInformations.GetInstance().AddPost(post); } } - private void SetInitialUnreadState(PostClass post, bool firstLoad) - { - bool isRead; - if (post.IsMe && this.ReadOwnPost) - isRead = true; - else if (firstLoad && SettingManager.Instance.Common.Read) - isRead = true; - else - isRead = false; - - post.IsRead = isRead; - } - public async Task GetListStatus(ListTimelineTabModel tab, bool more, bool firstLoad) { var count = GetApiResultCount(MyCommon.WORKERTYPE.List, more, firstLoad); @@ -1141,7 +1117,7 @@ namespace OpenTween statuses = response.Statuses; } - return statuses.Select(x => this.CreatePostsFromStatusData(x)).ToArray(); + return statuses.Select(x => this.CreatePostsFromStatusData(x, firstLoad: false)).ToArray(); } public async Task GetSearch(PublicSearchTabModel tab, bool more, bool firstLoad) @@ -1275,8 +1251,7 @@ namespace OpenTween foreach (var eventItem in events) { - var post = this.postFactory.CreateFromDirectMessageEvent(eventItem, users, apps, this.UserId); - this.SetInitialUnreadState(post, firstLoad); + var post = this.postFactory.CreateFromDirectMessageEvent(eventItem, users, apps, this.UserId, firstLoad); _ = this.urlExpander.Expand(post); -- 2.11.0