예제 #1
0
 private string BuildSenseless(TwitterStatus ts)
 {
     if (ts.RetweetedOriginal != null)
     {
         return "… RT @" + ts.RetweetedOriginal.User.ScreenName + ": " + ts.RetweetedOriginal.Text;
     }
     else
     {
         return "… RT @" + ts.User.ScreenName + ": " + ts.Text;
     }
 }
예제 #2
0
        /// <summary>
        /// ステータスの追加に際しての処理
        /// </summary>
        private static TweetViewModel RegisterStatus(TwitterStatus status)
        {
            if (status.RetweetedOriginal != null)
            {
                // リツイートのオリジナルステータスを登録
                var vm = Register(status.RetweetedOriginal);

                // リツイートユーザーに登録
                var user = UserStorage.Get(status.User);
                var tuser = UserStorage.Get(status.RetweetedOriginal.User);
                if (vm.RegisterRetweeted(user))
                {
                    if (!vm.IsStatusInfoContains)
                        vm.SetStatus(status.RetweetedOriginal);
                    // 自分が関係していれば
                    if (AccountStorage.Contains(status.RetweetedOriginal.User.ScreenName)
                        || AccountStorage.Contains(user.TwitterUser.ScreenName))
                        EventStorage.OnRetweeted(vm, user);
                }
            }

            UserStorage.Register(status.User);
            var registered = RegisterCore(status);

            // 返信先の登録
            if (status.InReplyToStatusId != 0)
            {
                Get(status.InReplyToStatusId, true).RegisterInReplyToThis(status.Id);
            }

            if (TwitterHelper.IsMentionOfMe(status))
            {
                EventStorage.OnMention(registered);
            }
            return registered;
        }
예제 #3
0
 public static TwitterStatus FromNode(XElement node)
 {
     if (node == null)
     {
         throw new ArgumentNullException("node");
     }
     return(new TwitterStatus()
     {
         Id = node.Element("id").ParseLong(),
         Text = node.Element("text").ParseString(),
         Source = node.Element("source").ParseString(),
         CreatedAt = node.Element("created_at").ParseDateTime("ddd MMM d HH':'mm':'ss zzz yyyy"),
         InReplyToStatusId = node.Element("in_reply_to_status_id").ParseLong(),
         InReplyToUserId = node.Element("in_reply_to_user_id").ParseLong(),
         InReplyToUserScreenName = node.Element("in_reply_to_screen_name").ParseString(),
         RetweetedOriginal = node.Element("retweeted_status") == null ? null : TwitterStatus.FromNode(node.Element("retweeted_status")),
         User = TwitterUser.FromNode(node.Element("user")),
         Entities = TwitterEntity.Parse(node.Element("entities")),
     });
 }
예제 #4
0
 private bool IsMemberOfTimeline(TwitterStatus status, AccountInfo info)
 {
     // 自分のツイートかどうか
     if (status.User.NumericId == info.NumericId)
         return true;
     // 自分への返信かどうか
     if (RegularExpressions.AtRegex.Matches(status.Text)
         .OfType<Match>()
         .Any(s => s.Value.Equals(info.ScreenName, StringComparison.CurrentCultureIgnoreCase)))
         return true;
     // 自分のフォローしている相手か
     return info.IsFollowing(status.User.NumericId) &&
         // 先頭が@でないか、またはフォローしている相手
         (!status.Text.StartsWith("@") || info.IsFollowing(status.InReplyToUserId));
 }