示例#1
0
        protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
        {
            // conversation control
            var vm = TweetStorage.Get(status.Id);
            if (status is TwitterDirectMessage)
            {
                var dm = (TwitterDirectMessage)status;
                return
                    (dm.Sender.ScreenName.Equals(user1, StringComparison.CurrentCultureIgnoreCase) &&
                     dm.Recipient.ScreenName.Equals(user2, StringComparison.CurrentCultureIgnoreCase)) ||
                    (dm.Sender.ScreenName.Equals(user2, StringComparison.CurrentCultureIgnoreCase) &&
                     dm.Recipient.ScreenName.Equals(user1, StringComparison.CurrentCultureIgnoreCase));
            }
            else
            {
                if (!status.User.ScreenName.Equals(user1, StringComparison.CurrentCultureIgnoreCase) &&
                    !status.User.ScreenName.Equals(user2, StringComparison.CurrentCultureIgnoreCase))
                    return false;

                // ここおかしい, @が入る
                // あとユーザー名マッチングを使えるように
                if (RegularExpressions.AtRegex.Matches(status.Text).Cast<Match>()
                    .Any(m => m.Value.Equals("@" + user1, StringComparison.CurrentCultureIgnoreCase) ||
                        m.Value.Equals("@" + user2, StringComparison.CurrentCultureIgnoreCase)))
                    return true;
                if (vm != null && vm.InReplyFroms.Select(id => TweetStorage.Get(id))
                    .Where(irvm => irvm != null)
                    .Any(irvm => irvm.Status.User.ScreenName.Equals(user1, StringComparison.CurrentCultureIgnoreCase) ||
                        irvm.Status.User.ScreenName.Equals(user2, StringComparison.CurrentCultureIgnoreCase)))
                    return true;
                else
                    return false;
            }
        }
示例#2
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     // 自分自身が登録されているフィルタ以外の一覧を取得する
     var filters = KernelService.MainWindowViewModel.ColumnOwnerViewModel.Columns
         .SelectMany(c => c.TabItems.Select(t => t.TabProperty.TweetSources))
         .Where(f => f.SelectMany(i => Explode(i))
             .OfType<ExceptedFilter>()
             .FirstOrDefault() == null)
         .SelectMany(i => i);
     // どのフィルタにもキャプチャされない
     return filters.Where(f => f.Filter(status)).FirstOrDefault() == null;
 }
示例#3
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     var ts = status as TwitterStatus;
     if (ts != null && ts.RetweetedOriginal != null && !acceptBlocking)
     {
         return AccountStorage.Accounts.Where(i => Match(i.ScreenName, needle))
             .Any(i => i.IsFollowing(status.User.NumericId)) &&
                AccountStorage.Accounts.Where(i => Match(i.ScreenName, needle))
             .All(i => !i.IsBlocking(ts.RetweetedOriginal.User.NumericId));
     }
     else
     {
         return AccountStorage.Accounts.Where(i => Match(i.ScreenName, needle))
             .Any(i => i.IsFollowing(status.User.NumericId));
     }
 }
示例#4
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     var s = status as TwitterStatus;
     if (s == null)
     {
         var d = status as TwitterDirectMessage;
         if (d == null)
             return false;
         else
             return MatchingUtil.MatchAccount(d.Recipient.ScreenName, needle) || MatchingUtil.MatchAccount(d.Sender.ScreenName, needle);
     }
     else
     {
         return AccountStorage.Accounts
             .Where(i => MatchingUtil.MatchAccount(i.ScreenName, needle))
             .Any(i => IsMemberOfTimeline(s, i));
     }
 }
示例#5
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     var s = status as TwitterStatus;
     if (s != null)
     {
         if (isStrict)
         {
             return !String.IsNullOrEmpty(s.InReplyToUserScreenName) &&
                 Match(s.InReplyToUserScreenName, this.needle);
         }
         else
         {
             return RegularExpressions.AtRegex.Matches(status.Text)
                 .Cast<Match>().Any(m => Match(m.Groups[1].Value, needle));
         }
     }
     var dm = status as TwitterDirectMessage;
     if (dm != null)
     {
         return Match(dm.Recipient.ScreenName, this.needle);
     }
     return false;
 }
示例#6
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return TraceId(status.Id);
 }
示例#7
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     var ts = TweetStorage.Get(status.Id);
     if (ts == null) return false;
     return this.Range.Check(ts.RetweetedUsers.Count());
 }
示例#8
0
 public override bool FilterUser(Dulcet.Twitter.TwitterUser user)
 {
     return user.IsProtected;
 }
示例#9
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return status.User.IsProtected;
 }
示例#10
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     var vm = TweetStorage.Get(status.Id);
     if (vm == null) return false;
     return vm.FavoredUsers.Any(u => Match(u.TwitterUser.ScreenName, needle));
 }
示例#11
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return RegularExpressions.AtRegex.Matches(status.Text)
         .Cast<Match>().Any(m => Match(m.Groups[1].Value, needle));
 }
示例#12
0
 public override bool FilterUser(Dulcet.Twitter.TwitterUser user)
 {
     return Match(user.ScreenName, needle);
 }
示例#13
0
        /// <summary>
        /// 接続が切断されたことを通知します。
        /// </summary>
        internal static void NotifyDisconnected(AccountInfo accountInfo, Dulcet.Twitter.Streaming.StreamingConnection con)
        {
            if (accountInfo == null)
                throw new ArgumentException("accountInfo");
            accountInfo.ConnectionState = ConnectionState.Disconnected;
            OnConnectionStateChanged(EventArgs.Empty);

            if (ThreadHelper.IsHalted) // アプリケーションが終了中
                return;

            UserStreamsConnection pusc;
            if (!connections.TryGetValue(accountInfo, out pusc) || pusc == null)
                return; // User Streams接続を行わない

            if (pusc.CheckUsingConnection(con))
            {
                // 切断通知されたコネクションを使用しているようだ
                // -> エラー切断であるので再接続
                RefreshConnection(accountInfo);
            }
            else
            {
                pusc.Dispose();
            }
        }
示例#14
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return status is TwitterDirectMessage;
 }
示例#15
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return this.Match(status.User.Web, this.needle, this.isCaseSensitive);
 }
示例#16
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return FilterUser(status.User);
 }
示例#17
0
 public bool FilterUser(Dulcet.Twitter.TwitterUser user)
 {
     return this.Match(user.UserName, this.needle, this.isCaseSensitive);
 }
示例#18
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return AccountStorage.Accounts.Where(i => Match(i.ScreenName, needle))
         .Any(i => i.IsFollowedBy(status.User.NumericId));
 }
示例#19
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return TwitterHelper.GetSuggestedUser(status).IsVerified;
 }
示例#20
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     var s = status as TwitterStatus;
     return s != null && s.RetweetedOriginal != null;
 }
示例#21
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return RegularExpressions.UrlRegex.Matches(status.Text).OfType<Match>()
         .Any(m => this.Match(m.Value, this.needle, this.isCaseSensitive));
 }
示例#22
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return Match(status.User.ScreenName, needle);
 }
示例#23
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return FilterUser(TwitterHelper.GetSuggestedUser(status));
 }
示例#24
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     bool init = Interlocked.Exchange(ref initCheckFlag,1) == 0;
     if (ListStorage.IsListMemberCached(this.listUser, this.listName))
     {
         var ids =
          ListStorage.GetListMembers(this.listUser, this.listName)
             .Select(u => u.TwitterUser.ScreenName).ToArray();
         return ids.Contains(status.User.ScreenName) &&
             (!(status is TwitterStatus) ||
             String.IsNullOrEmpty(((TwitterStatus)status).InReplyToUserScreenName) ||
             ids.Contains(((TwitterStatus)status).InReplyToUserScreenName));
     }
     else
     {
         if (init)
         {
             Task.Factory.StartNew(() =>
             {
                 try
                 {
                     ListStorage.GetListMembers(this.listUser, this.listName).ToArray();
                     this.RaiseRequireReaccept();
                 }
                 catch { }
             });
         }
         return false;
     }
 }
示例#25
0
 protected override bool FilterStatus(Dulcet.Twitter.TwitterStatusBase status)
 {
     return this.Range.Check(status.Id);
 }
示例#26
0
 public override bool FilterUser(Dulcet.Twitter.TwitterUser user)
 {
     return AccountStorage.Accounts.Where(i => MatchingUtil.MatchAccount(i.ScreenName, needle))
         .Any(i => i.IsFollowing(user.NumericId));
 }