async void FetchTweets_Loaded(object sender, RoutedEventArgs e)
        {
            var settings = ApplicationSettings.GetApplicationSettings();

            twitterCtx      = settings.Context;
            TweetsEraseType = settings.EraseType;

            //this.Title += " v" + settings.Version;

            if (twitterCtx == null)
            {
                MessageBox.Show("Internal error: Twitter context is null", "Twitter Archive Eraser");
            }

            switch (TweetsEraseType)
            {
            case ApplicationSettings.EraseTypes.TweetsAndRetweets:
                throw new Exception("EraseTye should never be EraseTypes.TweetsAndRetweets here");
                break;

            case ApplicationSettings.EraseTypes.Favorites:
                var user =
                    await
                        (from tweet in twitterCtx.User
                        where tweet.Type == UserType.Show &&
                        tweet.UserID == settings.UserID
                        select tweet)
                    .SingleOrDefaultAsync();

                int totalFavCount = 0;
                if (user != null)
                {
                    totalFavCount = user.FavoritesCount;
                }

                lblTweetsType.Text    = "favorites";
                lblTweetsType2.Text   = "favorites";
                lblTweetsMax.Text     = "3000";
                lblTotalTweetsNB.Text = string.Format("(Your favorites count: {0})", totalFavCount);
                break;

            case ApplicationSettings.EraseTypes.DirectMessages:
                lblTweetsType.Text    = "direct messages";
                lblTweetsType2.Text   = "DMs";
                lblTweetsMax.Text     = "1000 (800 sent, 200 received)";
                lblTotalTweetsNB.Text = string.Format("(Your DM count: {0})", "N/A");

                imgTwitterAuth2.Source = new BitmapImage(new Uri(@"pack://application:,,,/Twitter Archive Eraser;component/dm-icon.png"));
                imgTwitterAuth2.Margin = new Thickness(5);

                break;

            default:
                break;
            }
            //int numFavs = twitterCtx.User.Where(user => user.UserID == settings.UserID).FirstOrDefault().FavoritesCount;
            //txtTotalTweetsNB.Text = string.Format("(Your favorites count: {0})", numFavs);
        }
        async void FetchTweets_Loaded(object sender, RoutedEventArgs e)
        {
            var settings = ApplicationSettings.GetApplicationSettings();
            twitterCtx = settings.Context;
            TweetsEraseType = settings.EraseType;

            Title += " " + settings.Version;

            if(twitterCtx == null)
            {
                MessageBox.Show("Internal error: Twitter context is null", "Twitter Archive Eraser");
            }

            switch (TweetsEraseType)
            {
                case ApplicationSettings.EraseTypes.TweetsAndRetweets:
                    throw new Exception("EraseTye should never be EraseTypes.TweetsAndRetweets here");
                    break;
                case ApplicationSettings.EraseTypes.Favorites:
                    var user =
                        await
                        (from tweet in twitterCtx.User
                         where tweet.Type == UserType.Show &&
                               tweet.UserID == settings.UserID
                         select tweet)
                        .SingleOrDefaultAsync();

                    if (user != null)
                    {
                        userFavoritesCount = user.FavoritesCount;
                    }

                    lblTweetsType.Text = "favorites";
                    lblTweetsType2.Text = "favorites";
                    lblTweetsMax.Text = "3000";
                    lblTotalTweetsNB.Text = string.Format("(Your favorites count: {0})", userFavoritesCount);
                    break;
                case ApplicationSettings.EraseTypes.DirectMessages:
                    lblTweetsType.Text = "direct messages";
                    lblTweetsType2.Text = "DMs";
                    lblTweetsMax.Text = "1000 (800 sent, 200 received)";
                    lblTotalTweetsNB.Text = string.Format("(Your DM count: {0})", "N/A");

                    imgTwitterAuth2.Source = new BitmapImage(new Uri(@"pack://application:,,,/Twitter Archive Eraser;component/dm-icon.png"));
                    imgTwitterAuth2.Margin = new Thickness(5);

                    break;
                default:
                    break;
            }
            //int numFavs = twitterCtx.User.Where(user => user.UserID == settings.UserID).FirstOrDefault().FavoritesCount;
            //txtTotalTweetsNB.Text = string.Format("(Your favorites count: {0})", numFavs);
        }
示例#3
0
        private bool ReachedTwitterLimits(ApplicationSettings.EraseTypes tweetsEraseType, out DateTime rateLimitReset)
        {
            var helpResponse =
                (from help in twitterCtx.Help
                 where help.Type == HelpType.RateLimits
                 select help)
                .SingleOrDefault();

            if (helpResponse == null)
            {
                // fail quickly, assume limits are hit
                rateLimitReset = DateTime.Now.AddSeconds(15);   // retry in 15 seconds

                return(true);
            }

            var favsRemainingLimits        = helpResponse.RateLimits["favorites"].Where(limit => limit.Resource.ToLowerInvariant() == "/favorites/list").FirstOrDefault();
            var sentDMsRemainingLimits     = helpResponse.RateLimits["direct_messages"].Where(limit => limit.Resource.ToLowerInvariant() == "/direct_messages/sent").FirstOrDefault();
            var receivedDMsRemainingLimits = helpResponse.RateLimits["direct_messages"].Where(limit => limit.Resource.ToLowerInvariant() == "/direct_messages").FirstOrDefault();

            // The following is OK since the app works only in one given mode: either fetching favorites or DMs
            if (favsRemainingLimits.Remaining == 0)
            {
                rateLimitReset = FromUnixTime(favsRemainingLimits.Reset);
                return(true);
            }

            if (sentDMsRemainingLimits.Remaining == 0)
            {
                rateLimitReset = FromUnixTime(sentDMsRemainingLimits.Reset);
                return(true);
            }

            if (receivedDMsRemainingLimits.Remaining == 0)
            {
                rateLimitReset = FromUnixTime(receivedDMsRemainingLimits.Reset);
                return(true);
            }

            rateLimitReset = DateTime.UtcNow;
            return(false);
        }