Esempio n. 1
0
        private void ProcessIds(long[] ids, string screen_name, string action)
        {
            for (Int64 i = 0; i < ids.Length; i += 100)
            {
                Int64 end = i + 100 < ids.Length ? i + 100 : ids.Length;

                Int64[] seek_ids = Globals.ArraySlice <Int64>(ids, i, end);

                Log.WriteLine(String.Format("Getting data for ids in the range {0} - {1}", i, end));

                try
                {
                    GetData(seek_ids, i, ids.Length, screen_name, action);

                    mainWin.rlWin.GetRates();
                }
                catch (RateLimitHitException rex)
                {
                    RateLimits limits = api.GetRateLimits();

                    RunOnUiThread(() => mainWin.rlWin.SetRateLimits(limits));

                    Log.WriteLine("Waiting for rate limits to reset");

                    Wait(limits.usersLookup.resetTime, "Waiting for users lookup rates to reset");

                    GetData(seek_ids, i, ids.Length, screen_name, action);
                }
            }

            mainWin.rlWin.GetRates();
        }
        public void GetRates()
        {
            Task.Factory.StartNew(() =>
            {
                try
                {
                    RateLimits limits = api.GetRateLimits();

                    Log.WriteLine("Finished getting new rate limits");

                    Dispatcher.Invoke((Action)(() =>
                    {
                        SetRateLimits(limits);
                    }));
                }
                catch (RateLimitHitException rex)
                {
                    Log.WriteLine("Failed to get rate limits because of the rate limits on rate limits checking.");

                    // Glorious invocation
                    Dispatcher.Invoke((Action)(() =>
                    {
                        TemporaryTextBox.SelectAll();

                        TemporaryTextBox.Selection.Text = "Rate limits are currently unavailable.";
                    }));
                }
            });
        }
Esempio n. 3
0
        private List <long> GetIDs(string action_name, string screen_name)
        {
            Log.WriteLine("Started getting IDs - " + action_name);

            long        cursor = -1;
            List <long> ids    = new List <long>();

            Func <string, long, JObject> action = actions[action_name];

            bool done = false;

            RunOnUiThread(() =>
            {
                mainWin.AppStatusLabel.Content = String.Format("{0} - Getting IDs ({1})", screen_name, action_name);
            });

            while (!done)
            {
                try
                {
                    Log.WriteLine("Still getting IDs. Current cursor is : " + cursor.ToString() + " and we have a total of " + ids.Count + " ids thus far.");

                    JObject result = action(screen_name, cursor);

                    JArray json_ids    = result["ids"].Value <JArray>();
                    long   next_cursor = result["next_cursor"].Value <long>();

                    foreach (long id in json_ids)
                    {
                        ids.Add(id);
                    }

                    if (cursor == 0)
                    {
                        done = true;
                    }

                    cursor = next_cursor;
                }
                catch (RateLimitHitException rex)
                {
                    RateLimits limits = api.GetRateLimits();

                    RunOnUiThread(() => mainWin.rlWin.SetRateLimits(limits));

                    Log.WriteLine("Waiting for rate limits to reset.");

                    if (action_name == "friends" && limits.friendsIds.remaining == 0)
                    {
                        Wait(limits.friendsIds.resetTime, "Waiting for friends IDs rate to reset.");
                    }
                    else if (action_name == "friends" && limits.friendsIds.remaining == 0)
                    {
                        Wait(limits.friendsIds.resetTime, "Waiting for followers IDs rate to reset.");
                    }
                }
            }

            Log.WriteLine("Finished getting IDs");

            RunOnUiThread(() =>
            {
                mainWin.AppStatusLabel.Content = "Finished getting IDs for " + screen_name;
            });

            return(ids);
        }
        public void SetRateLimits(RateLimits limits)
        {
            TemporaryTextBox.SelectAll();

            TemporaryTextBox.Selection.Text = limits.ToString();
        }