void StatusAction(TwitterUserStreamStatus p)
{
MainTimeline.Dispatcher.BeginInvoke(new Action(() =>
{
if (p.Status.RetweetedStatus != null)
{
//自分がRTした以外のRT
if (p.Status.User == CurrentUser) return;
if (p.Status.RetweetedStatus.User == CurrentUser)
{
//自分のがRTされて飛んだきた
MainMention.Dispatcher.BeginInvoke(new Action(() =>
{
MainMention.Items.Insert(0, CreateRetweetedPanel(p.Status.RetweetedStatus, p.Status.User));
}));
NotifyRetweeted(p.Status.RetweetedStatus, p.Status.User);
foreach (var pl in RetweetPlugins) pl.OnRetweet(Service, p.Status.User, p.Status.RetweetedStatus);
}
else
{
//他人の公式RTが飛んできた
var rto = p.Status.RetweetedStatus;
MainTimeline.Items.Insert(0, CreateRetweetPanel(rto, p.Status));
}
}
else
{
//普通のRT
MainTimeline.Items.Insert(0, CreateTweetPanel(p.Status));
if (p.Status.Entities.Mentions.Count != 0)
{
}
if (Regex.Match(p.Status.TextDecoded, "@" + CurrentUser.ScreenName).Success)
{
MainMention.Items.Insert(0, CreateTweetPanel(p.Status));
NotifyReplied(p.Status);
}
}
foreach (var pt in TweetPlugins)
{
pt.OnTweet(Service, CurrentUser, p.Status);
}
if (MainTimeline.Items.Count > TimelineMax)
{
MainTimeline.Dispatcher.BeginInvoke(new Action(() =>
{
MainTimeline.Items.RemoveAt(TimelineMax);
}));
}
if (MainMention.Items.Count > MentionMax)
{
MainMention.Dispatcher.BeginInvoke(new Action(() =>
{
MainMention.Items.RemoveAt(MentionMax);
}));
}
}));
}