private static void RemoveTweetSink(AccountInfo info, long tweetId) { var tweet = ApiHelper.ExecApi(() => info.DestroyStatus(tweetId)); if (tweet != null) { if (tweet.Id != tweetId) { NotifyStorage.Notify("削除には成功しましたが、ツイートIDが一致しません。(" + tweetId.ToString() + " -> " + tweet.Id.ToString() + ")"); } else { if (tweet.InReplyToStatusId != 0) { var s = TweetStorage.Get(tweet.InReplyToStatusId); if (s != null) { s.RemoveInReplyToThis(tweetId); } } TweetStorage.Remove(tweetId); NotifyStorage.Notify("削除しました:" + tweet.ToString()); } } else { NotifyStorage.Notify("ツイートを削除できませんでした(@" + info.ScreenName + ")"); } }
private void RemoveOldTweets() { Task.Factory.StartNew(() => { TweetStorage.GetAll(tvm => (DateTime.Now - tvm.CreatedAt).TotalHours > 12) .ForEach(t => TweetStorage.Remove(t.bindingId)); }); }
private static void RemoveDMSink(AccountInfo info, long tweetId) { var tweet = ApiHelper.ExecApi(() => info.DestroyDirectMessage(tweetId)); if (tweet != null) { if (tweet.Id != tweetId) { NotifyStorage.Notify("削除には成功しましたが、ダイレクトメッセージIDが一致しません。(" + tweetId.ToString() + " -> " + tweet.Id.ToString() + ")"); } else { TweetStorage.Remove(tweetId); NotifyStorage.Notify("削除しました:" + tweet.ToString()); } } else { NotifyStorage.Notify("ダイレクトメッセージを削除できませんでした(@" + info.ScreenName + ")"); } }
/// <summary> /// ストリームエレメントを処理します。 /// </summary> /// <param name="info">ストリームエレメントを受信したアカウント</param> /// <param name="elem">ストリームエレメント</param> private static void RegisterStreamElement(AccountInfo info, StreamingEvent elem) { switch (elem.Kind) { case ElementKind.Status: case ElementKind.DirectMessage: // 通常ステータスを受信した TweetStorage.Register(elem.Status); break; case ElementKind.Favorite: var avm = TweetStorage.Register(elem.Status); if (avm == null) { return; } var uavm = UserStorage.Get(elem.SourceUser); if (avm.RegisterFavored(uavm)) { EventStorage.OnFavored(avm, uavm); } break; case ElementKind.Unfavorite: var rvm = TweetStorage.Register(elem.Status); if (rvm == null) { return; } var urvm = UserStorage.Get(elem.SourceUser); if (rvm.RemoveFavored(urvm)) { EventStorage.OnUnfavored(rvm, urvm); } break; case ElementKind.Delete: TweetStorage.Remove(elem.DeletedStatusId); break; /* * TODO:Implements later? * case ElementKind.ListUpdated: * break; * case ElementKind.ListMemberAdded: * if (ListStorage.IsListMemberCached(elem.TargetList.User.ScreenName, elem.TargetList.Name)) * { * var members = ListStorage.GetListMembers(elem.TargetList.User.ScreenName, elem.TargetList.Name); * } * break; * * case ElementKind.ListMemberRemoved: * case ElementKind.ListSubscribed: * case ElementKind.ListUnsubscribed: * // TODO: do something * * break; */ case ElementKind.Follow: case ElementKind.Unfollow: var affect = AccountStorage.Get(elem.SourceUser.ScreenName); var effect = AccountStorage.Get(elem.TargetUser.ScreenName); if (affect != null) { // Add/Remove followings if (elem.Kind == ElementKind.Follow) { affect.RegisterFollowing(elem.TargetUser.NumericId); } else { affect.RemoveFollowing(elem.TargetUser.NumericId); } } if (effect != null) { // Add/Remove followers if (elem.Kind == ElementKind.Follow) { effect.RegisterFollower(elem.SourceUser.NumericId); } else { effect.RemoveFollower(elem.SourceUser.NumericId); } } if (elem.Kind == ElementKind.Follow) { EventStorage.OnFollowed(UserStorage.Get(elem.SourceUser), UserStorage.Get(elem.TargetUser)); } else { EventStorage.OnRemoved(UserStorage.Get(elem.SourceUser), UserStorage.Get(elem.TargetUser)); } break; case ElementKind.Blocked: if (info == null) { break; } info.RemoveFollowing(elem.TargetUser.NumericId); info.RemoveFollower(elem.TargetUser.NumericId); info.RegisterBlocking(elem.TargetUser.NumericId); // TODO: notify events break; case ElementKind.Unblocked: if (info == null) { break; } info.RemoveBlocking(elem.TargetUser.NumericId); // TODO: Notify events break; default: System.Diagnostics.Debug.WriteLine("unknown:" + elem.ToString()); break; } }