Example #1
0
 public void InvokeStatsUpdate()
 {
     RetweetsUpdate?.Invoke(this, null);
 }
Example #2
0
        private void ControlLoop()
        {
            // Every hour, check followed Twitter accounts for new tweets and retweet.  Limit 10 retweets per hour to avoid spam.  --Kris
            while (Active)
            {
                if (ScriptMode || !LastCheck.HasValue || LastCheck.Value.AddHours(1) < DateTime.Now)
                {
                    int i = 0;
                    LoadTimelines();
                    foreach (KeyValuePair <string, IEnumerable <ITweet> > pair in Tweets)
                    {
                        foreach (ITweet tweet in pair.Value)
                        {
                            if (!RetweetHistory.ContainsKey(tweet.Url) &&
                                tweet.CreatedAt.AddDays(1) > DateTime.Now)
                            {
                                string oldRank = GetRank(TwitterUserFullnames[pair.Key]);

                                if (!TestMode)
                                {
                                    Tweet.PublishRetweet(tweet);
                                }

                                RetweetHistory.Add(tweet.Url, pair.Key);

                                SaveRetweetHistory();

                                if (Targets[TwitterUserFullnames[pair.Key]].Stats.Retweets.Equals(0))
                                {
                                    Targets[TwitterUserFullnames[pair.Key]].Stats.FirstRetweet = DateTime.Now;
                                }

                                Targets[TwitterUserFullnames[pair.Key]].Stats.Retweets++;
                                Targets[TwitterUserFullnames[pair.Key]].Stats.LastRetweet = DateTime.Now;

                                SaveTargets();

                                // Update the Birdie API and retrieve new totals.  --Kris
                                GetStats(true);

                                // Fire event to be consumed at the app-level.  --Kris
                                RetweetEventArgs args = new RetweetEventArgs
                                {
                                    SourceUser  = pair.Key,
                                    Score       = Targets[TwitterUserFullnames[pair.Key]].Stats.Retweets,
                                    OldRank     = oldRank,
                                    NewRank     = GetRank(TwitterUserFullnames[pair.Key]),
                                    TweetedAt   = tweet.CreatedAt,
                                    RetweetedAt = DateTime.Now,
                                    Tweet       = tweet.Text
                                };
                                RetweetsUpdate?.Invoke(this, args);

                                i++;
                                if (i >= 10 ||
                                    !Active ||
                                    (i >= 3 && ScriptMode))
                                {
                                    break;
                                }

                                // Wait a minute between each tweet (or a second in script mode).  --Kris
                                Wait((ScriptMode ? 1000 : 60000));

                                if (!Active)
                                {
                                    break;
                                }
                            }
                        }

                        if (i >= 10 ||
                            !Active ||
                            (i >= 3 && ScriptMode))
                        {
                            break;
                        }
                    }

                    LastCheck = DateTime.Now;
                }

                if (ScriptMode)
                {
                    //Active = false;
                    return;
                }

                Wait(60000);
            }
        }