public static void UpdateStatus()
        {
            Login();

            OnStatusUpdating(EventArgs.Empty);

            var status = new List<DGStatus>();
            IOrderedEnumerable<DGStatus> newStatus = null;

            try
            {
                for (int i = 0; i < Contexts.Count; i++)
                {
                    var query = from t in Contexts[i].Status
                                where t.Type == StatusType.Home && t.CreatedAt >= s_lastStatusUpdating
                                select new DGStatus(t, Accounts[i]);


                    status.AddRange(query);
                }

                newStatus = status.Distinct(new StatusEqualityComparer()).OrderBy(s => s.CreatedAt);

            }
            catch (Exception ex)
            {
                OnStatusUpdateFailed(new StatusUpdateFailedEventArgs(ex));
                return;
            }

            s_lastStatusUpdating = DateTime.UtcNow;

            foreach (var s in newStatus)
            {
                OnStatusReceived(new StatusEventArgs(s));
            }

            OnStatusUpdated(new StatusUpdatedEventArgs(newStatus.ToArray()));
        }
示例#2
0
        private List<Status> GetAllTweets(ulong sinceId = 0)
        {
            var allTweets = new List<Status>();

            using (var twitter = new TwitterContext(Auth))
            {
                int lastCount = 199;
                var oldestId = ulong.MaxValue;
                while (lastCount > 1)
                {
                    IQueryable<Status> statusTweets =
                        twitter.Status.Where(tweet => tweet.Type == StatusType.User
                                                      && tweet.ScreenName == UserName
                                                      && tweet.IncludeMyRetweet == true
                                                      && tweet.ExcludeReplies == false
                                                      && tweet.Count == 199);

                    if (oldestId != ulong.MaxValue)
                        statusTweets = statusTweets.Where(t => t.MaxID == oldestId);

                    if (sinceId != 0)
                        statusTweets = statusTweets.Where(t => t.SinceID == sinceId);

                    if (statusTweets != null)
                    {
                        var returned = statusTweets.ToList();

                        if (!returned.Any())
                            break;

                        lastCount = returned.Count();
                        oldestId = returned.Min(t => ulong.Parse(t.StatusID));
                        returned.RemoveAt(returned.Count - 1);
                        allTweets.AddRange(returned);
                    }
                    else
                    {
                        lastCount = 0;
                    }
                }
            }

            return allTweets.Distinct().ToList();
        }