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)); }
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)); }
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)); }
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); }
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); } }); }
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); }
/// <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); }
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); } } } }