Exemplo n.º 1
0
 public static void OnDirectMessage(TweetViewModel tweet)
 {
     if (AccountStorage.Contains(tweet.Status.User.ScreenName) || tweet.CreatedAt < wakeupTime)
     {
         return;
     }
     Register(new EventDescription(EventKind.DirectMessage,
                                   UserStorage.Get(tweet.Status.User), null, tweet));
 }
Exemplo n.º 2
0
 public static void OnUnfavored(TweetViewModel tweet, UserViewModel favorer)
 {
     if (AccountStorage.Contains(favorer.TwitterUser.ScreenName))
     {
         return;
     }
     Register(new EventDescription(EventKind.Unfavorite,
                                   favorer, UserStorage.Get(tweet.Status.User), tweet));
 }
Exemplo n.º 3
0
 public static void OnRetweeted(TweetViewModel tweet, UserViewModel retweeter)
 {
     if (AccountStorage.Contains(retweeter.TwitterUser.ScreenName) || tweet.CreatedAt < wakeupTime)
     {
         return;
     }
     Register(new EventDescription(EventKind.Retweet, retweeter,
                                   UserStorage.Get(tweet.Status.User), tweet));
 }
Exemplo n.º 4
0
        private static AccountInfo GetSuitableAccount(string screenName, string listName)
        {
            var acInfo = AccountStorage.Get(screenName);

            if (acInfo == null)
            {
                acInfo = AccountStorage.GetRandom(ai => ai.IsFollowingList(screenName, listName), true);
            }
            return(acInfo);
        }
Exemplo n.º 5
0
 internal static void UpdateMute()
 {
     if (Setting.Instance.TimelineFilteringProperty.MuteFilterCluster == null)
     {
         return;
     }
     GetAll(t => Setting.Instance.TimelineFilteringProperty.MuteFilterCluster.Filter(t.Status))
     .ForEach(t =>
     {
         if (!AccountStorage.Contains(t.Status.User.ScreenName))
         {
             Remove(t.bindingId);
         }
     });
 }
Exemplo n.º 6
0
 static void RaiseStatusAdded(TweetViewModel added)
 {
     // Mention通知設定がないか、
     // 自分へのMentionでない場合にのみRegisterする
     // +
     // Retweet通知設定がないか、
     // 自分のTweetのRetweetでない場合にのみRegisterする
     if ((!Setting.Instance.NotificationProperty.NotifyMention ||
          !TwitterHelper.IsMentionOfMe(added.Status)) &&
         (!Setting.Instance.NotificationProperty.NotifyRetweet ||
          !(added.Status is TwitterStatus) || ((TwitterStatus)added.Status).RetweetedOriginal == null ||
          !AccountStorage.Contains(((TwitterStatus)added.Status).RetweetedOriginal.User.ScreenName)))
     {
         NotificationCore.RegisterNotify(added);
     }
     OnTweetStorageChanged(new TweetStorageChangedEventArgs(TweetActionKind.Added, added));
     NotificationCore.DispatchNotify(added);
 }
Exemplo n.º 7
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);
        }
Exemplo n.º 8
0
        private static UserViewModel DownloadUser(string userScreenName)
        {
            ManualResetEvent mre;

            lock (semaphoreAccessLocker)
            {
                if (!strSemaphores.TryGetValue(userScreenName, out mre))
                {
                    strSemaphores.Add(userScreenName, new ManualResetEvent(false));
                }
            }
            if (mre != null)
            {
                mre.WaitOne();
                return(Get(userScreenName));
            }
            try
            {
                var acc = AccountStorage.GetRandom(ai => true, true);
                if (acc != null)
                {
                    try
                    {
                        var ud = acc.GetUserByScreenName(userScreenName);
                        if (ud != null)
                        {
                            var uvm = new UserViewModel(ud);
                            using (lockWrap.GetWriterLock())
                            {
                                if (dictionary.ContainsKey(ud.NumericId))
                                {
                                    dictionary[ud.NumericId] = uvm;
                                }
                                else
                                {
                                    dictionary.Add(ud.NumericId, uvm);
                                }
                            }
                            return(uvm);
                        }
                    }
                    catch (Exception e)
                    {
                        ExceptionStorage.Register(e, ExceptionCategory.TwitterError, "ユーザー情報の受信に失敗しました。(ユーザー @" + userScreenName + " を アカウント @" + acc.ScreenName + " で受信しようとしました。)");
                    }
                    return(null);
                }
                else
                {
                    return(null);
                }
            }
            finally
            {
                lock (semaphoreAccessLocker)
                {
                    if (strSemaphores.ContainsKey(userScreenName))
                    {
                        strSemaphores[userScreenName].Set();
                        strSemaphores.Remove(userScreenName);
                    }
                }
            }
        }