Пример #1
0
        private bool UpdateTimelines(IEnumerable <Status> statuses, TweetClassification tweetType)
        {
            var updated = false;

            foreach (var status in statuses)
            {
                var tweet = status.CreateTweet(tweetType);
                var index = _tweets.IndexOf(tweet);
                if (index == -1)
                {
                    _tweets.Add(tweet);
                }
                else
                {
                    var t = _tweets[index];
                    t.IsHome          |= tweet.IsHome;
                    t.IsMention       |= tweet.IsMention;
                    t.IsDirectMessage |= tweet.IsDirectMessage;
                    t.IsFavorite      |= tweet.IsFavorite;
                    tweet              = t;
                }

                if (TimelineFilter(tweet) && _timeline.Contains(tweet) == false)
                {
                    Timeline.Add(tweet);
                    updated = true;
                }
            }
            if (updated)
            {
                SortTweetCollection(Timeline);
            }
            return(updated);
        }
Пример #2
0
        private bool UpdateTimelines(IEnumerable<Status> statuses, TweetClassification tweetType)
        {
            var updated = false;
            foreach (var status in statuses)
            {
                var tweet = status.CreateTweet(tweetType);
                var index = _tweets.IndexOf(tweet);
                if (index == -1)
                {
                    _tweets.Add(tweet);
                }
                else
                {
                    var t = _tweets[index];
                    t.IsHome |= tweet.IsHome;
                    t.IsMention |= tweet.IsMention;
                    t.IsDirectMessage |= tweet.IsDirectMessage;
                    t.IsFavorite |= tweet.IsFavorite;
                    tweet = t;
                }

                if (TimelineFilter(tweet) && _timeline.Contains(tweet) == false)
                {
                    Timeline.Add(tweet);
                    updated = true;
                }
            }
            if (updated) SortTweetCollection(Timeline);
            return updated;
        }
Пример #3
0
 public void UpdateStatus(IEnumerable <Status> statuses, TweetClassification tweetType)
 {
     DispatchInvoker(() => { if (UpdateTimelines(statuses, tweetType))
                             {
                                 PlayNotification();
                             }
                     });
 }
Пример #4
0
        public static Tweet CreateTweet(this Status status, TweetClassification tweetType)
        {
            var isMention        = false;
            var isDirectMessage  = false;
            var username         = new OAuth().ScreenName;
            var displayStatus    = status.RetweetedStatus ?? status;
            var entities         = displayStatus.ExtendedTweet?.Entities ?? displayStatus.Entities;
            var extendedEntities = displayStatus.ExtendedTweet?.ExtendedEntities ?? displayStatus.ExtendedEntities;
            var text             = displayStatus?.ExtendedTweet?.FullText ?? displayStatus.FullText ?? displayStatus.Text;

            // Direct messages don't have a User. Instead, dm's use sender and recipient collections.
            if (displayStatus.User == null)
            {
                isDirectMessage    = true;
                displayStatus.User = status.Recipient.ScreenName == username ? status.Sender : status.Recipient;
            }

            if (entities?.Mentions != null && entities.Mentions.Any(m => m.ScreenName == username))
            {
                isMention = true;
            }

            var createdAt = DateTime.ParseExact(status.CreatedAt, "ddd MMM dd HH:mm:ss zzz yyyy",
                                                CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);


            var tweet = new Tweet
            {
                StatusId              = status.Id,
                Name                  = displayStatus.User.Name,
                ScreenName            = displayStatus.User.ScreenName,
                ProfileImageUrl       = displayStatus.User.ProfileImageUrl,
                Text                  = text,
                MarkupNodes           = BuildMarkupNodes(text, entities),
                CreatedAt             = createdAt,
                TimeAgo               = TimeAgo(createdAt),
                IsRetweet             = status.Retweeted,
                RetweetedBy           = RetweetedBy(status, username),
                RetweetedByScreenName = RetweetedByScreenName(status, username),
                RetweetStatusId       = status.RetweetedStatus != null ? status.RetweetedStatus.Id : string.Empty,
                MediaLinks            = entities?.Media?.Select(m => m).ToArray() ?? new Media[0],
                ExtendedMediaLinks    = extendedEntities?.Media?.Select(m => m).ToArray() ?? new Media[0],
                Urls                  = entities?.Urls.Select(u => u.ExpandedUrl).ToArray() ?? new string[0],
                IsMyTweet             = displayStatus.User.ScreenName == username,
                IsHome                = tweetType == TweetClassification.Home,
                IsMention             = tweetType == TweetClassification.Mention | isMention,
                IsDirectMessage       = tweetType == TweetClassification.DirectMessage | isDirectMessage,
                IsFavorite            = tweetType == TweetClassification.Favorite | status.Favorited,
                IsSearch              = tweetType == TweetClassification.Search
            };

            return(tweet);
        }
Пример #5
0
        public static Tweet CreateTweet(this Status status, TweetClassification tweetType)
        {
            var isMention = false;
            var isDirectMessage = false;
            var username = new OAuth().ScreenName;
            var displayStatus = status.RetweetedStatus ?? status;

            // Direct messages don't have a User. Instead, dm's use sender and recipient collections.
            if (displayStatus.User == null)
            {
                isDirectMessage = true;
                displayStatus.User = (status.Recipient.ScreenName == username) ? status.Sender : status.Recipient;
            }

            if (status.Entities != null
                && status.Entities.Mentions != null
                && status.Entities.Mentions.Any(m => m.ScreenName == username))
            {
                isMention = true;
            }

            var createdAt = DateTime.ParseExact(status.CreatedAt, "ddd MMM dd HH:mm:ss zzz yyyy",
                CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

            var tweet = new Tweet
            {
                StatusId = status.Id,
                Name = displayStatus.User.Name,
                ScreenName = displayStatus.User.ScreenName,
                ProfileImageUrl = displayStatus.User.ProfileImageUrl,
                Text = displayStatus.Text,
                MarkupNodes = BuildMarkupNodes(displayStatus.Text, displayStatus.Entities),
                CreatedAt = createdAt,
                TimeAgo = TimeAgo(createdAt),
                IsRetweet = status.Retweeted,
                RetweetedBy = RetweetedBy(status, username),
                RetweetedByScreenName = RetweetedByScreenName(status, username),
                RetweetStatusId = (status.RetweetedStatus != null) ? status.RetweetedStatus.Id : String.Empty,
                MediaLinks = status.Entities.Media != null ? status.Entities.Media.Select(m => m.MediaUrl).ToArray() : new string[0],
                IsMyTweet = displayStatus.User.ScreenName == username,
                IsHome = tweetType == TweetClassification.Home,
                IsMention = tweetType == TweetClassification.Mention | isMention,
                IsDirectMessage = tweetType == TweetClassification.DirectMessage | isDirectMessage,
                IsFavorite = tweetType == TweetClassification.Favorite | status.Favorited,
                IsSearch = tweetType == TweetClassification.Search
            };

            return tweet;
        }
Пример #6
0
 public void UpdateStatus(IEnumerable <Status> statuses, TweetClassification tweetType)
 {
     _timelinesModel.UpdateStatus(statuses, tweetType);
 }
Пример #7
0
 public void UpdateStatus(IEnumerable<Status> statuses, TweetClassification tweetType)
 {
     _timelinesModel.UpdateStatus(statuses, tweetType);
 }
Пример #8
0
 public void UpdateStatus(IEnumerable<Status> statuses, TweetClassification tweetType)
 {
     DispatchInvoker(() => { if (UpdateTimelines(statuses, tweetType)) PlayNotification(); });
 }