public static bool CheckForNotExpiredAccess(string AccessTokenStatus, string RefreshTokenStatus)
    {
        GoogleTokenModel TokenObject = new GoogleTokenModel();

        TokenObject.Access_Token  = AccessTokenStatus;
        TokenObject.Refresh_Token = RefreshTokenStatus;
        CalendarService CalService      = GoogleCalendarManager.GetCalendarService(TokenObject);
        string          AllCalendarFeed = @"http://www.google.com/calendar/feeds/default/allcalendars/full";
        Uri             postUri         = new Uri(AllCalendarFeed);

        CalendarQuery CalendarQuery = new CalendarQuery();

        CalendarQuery.Uri = postUri;

        bool inform = true;

        try
        {
            CalendarFeed calFeed = CalService.Query(CalendarQuery);
        }
        catch (Exception e) { inform = false; };



        return(inform);
    }
        private bool SaveCalendarIdAndUrl()
        {
            CalendarFeed resultFeed = null;

            CalendarService myService = new CalendarService("MyCalendar-1");

            m_Service.setUserCredentials(m_UserName, m_Password);

            CalendarQuery query = new CalendarQuery();

            // query.Uri = new Uri(CALENDARS_URL);
            query.Uri = new Uri("https://www.google.com/calendar/feeds/default/allcalendars/full");

            resultFeed = (CalendarFeed)m_Service.Query(query);


            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                //LogManager.Instance.WriteToFlatFile(entry.Title.Text);
                //LogManager.Instance.WriteToFlatFile(m_CalendarName);
                if (entry.Title.Text == m_CalendarName)
                {
                    int p = entry.Id.AbsoluteUri.IndexOf("full/");
                    m_CalendarId = entry.Id.AbsoluteUri.Substring(p + 5);
                    //m_CalendarId = entry.Id.AbsoluteUri.Substring(63);
                    m_CalendarUrl = string.Format(CALENDAR_TEMPLATE, m_CalendarId);
                    //"https://www.google.com/calendar/feeds/" + m_CalendarId + "/private/full";// string.Format(CALENDAR_TEMPLATE, m_CalendarId);

                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Gets all the calendars the user has write access to
        /// </summary>
        public List <string> GetAllOwnedCalendars()
        {
            List <string> calendars = new List <string>();
            CalendarQuery query     = new CalendarQuery();

            query.Uri = new Uri(calendarsOwnedUrl);
            CalendarFeed resultFeed = (CalendarFeed)this.calService.Query(query);

            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                calendars.Add(entry.Title.Text);
            }

            return(calendars);
        }
Exemplo n.º 4
0
        private void refreshCalendar()
        {
            CalendarQuery query = new CalendarQuery();

            query.Uri = new Uri("https://www.google.com/calendar/feeds/default/owncalendars/full");
            CalendarFeed resultFeed = (CalendarFeed)myService.Query(query);

            //Console.WriteLine("Your calendars:\n");
            listBox1.Items.Clear();
            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                listBox1.Items.Add(entry.Title.Text);
                richTextBox1.AppendText(entry.Content.AbsoluteUri.ToString() + "\n");
                //richTextBox1.Text += entry.Title.Text + "\n";
            }
        }
Exemplo n.º 5
0
        private string getUriOfSelectedCalendar(string calendarTitle)
        {
            CalendarQuery query = new CalendarQuery();

            query.Uri = new Uri("https://www.google.com/calendar/feeds/default/owncalendars/full");
            CalendarFeed resultFeed = (CalendarFeed)myService.Query(query);

            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                if (calendarTitle == entry.Title.Text)
                {
                    return(entry.Content.AbsoluteUri);
                }
            }
            return("NO");
        }
Exemplo n.º 6
0
        private bool SaveCalendarIdAndUrl()
        {
            CalendarQuery query = new CalendarQuery();

            query.Uri = new Uri(CALENDARS_URL);
            CalendarFeed resultFeed = (CalendarFeed)m_Service.Query(query);

            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                if (entry.Title.Text == m_CalendarName)
                {
                    m_CalendarId  = entry.Id.AbsoluteUri.Substring(63);
                    m_CalendarUrl = string.Format(CALENDAR_TEMPLATE, m_CalendarId);
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 7
0
            private bool SaveCalIdAndUrl()
            {
                CalendarQuery qry = new CalendarQuery();

                qry.Uri = new Uri(CAL_URL);
                CalendarFeed resultFeed = (CalendarFeed)g_calService.Query(qry);

                foreach (CalendarEntry entry in resultFeed.Entries)
                {
                    if (entry.Title.Text == g_CalendarName)
                    {
                        g_CalId  = entry.Id.AbsoluteUri.Substring(63);
                        g_CalUrl = string.Format(CAL_TEMPLATE, g_CalId);
                        return(true);
                    }
                }
                return(false);
            }
Exemplo n.º 8
0
        public void TestCalendarGroupIDError()
        {
            // arrange
            CalendarFeed      TestFeed          = new CalendarFeed();
            Rss               calendarDataBlock = new Rss();
            IEnumerable <Rss> calendarDataList  = new Rss[0];

            // act
            calendarDataBlock.Title         = "Error";
            calendarDataBlock.Description   = "Group ID error";
            calendarDataBlock.Link          = "webmaster";
            calendarDataBlock.PubDateString = DateTime.Now;

            calendarDataList = TestFeed.GetRssFeed("BadGroupID", "5", CalendarData.CalendarURL);

            // assert
            StringAssert.Contains(calendarDataList.Last().Title, calendarDataBlock.Title);
            StringAssert.Contains(calendarDataList.Last().Description, calendarDataBlock.Description);
            StringAssert.Contains(calendarDataList.Last().Link, calendarDataBlock.Link);
            StringAssert.StartsWith(calendarDataList.Last().PubDateString.ToString(), calendarDataBlock.PubDateString.ToString("d"));  // just check date
        }
Exemplo n.º 9
0
        public void TestCalendarValidDataFromFile()
        {
            // arrange
            CalendarFeed      TestFeed          = new CalendarFeed();
            Rss               calendarDataBlock = new Rss();
            IEnumerable <Rss> calendarDataList  = new Rss[0];

            // act
            calendarDataBlock.Title         = "Worship";
            calendarDataBlock.Description   = "<b>Worship</b> - 12/11/2016 - 9:00 AM to 10:00 AM<br /><br />";
            calendarDataBlock.Link          = "http://calendar.churchart.com/calendar/calendar.aspx?cei=262662443&event_date=12/11/2016&ci=73866977&igd=98186886";
            calendarDataBlock.PubDateString = Convert.ToDateTime(" 2016 - 12 - 11T14: 00:00Z ").ToLocalTime();

            calendarDataList = TestFeed.GetRssFeed("All", "0", "http://www.monckscornerumc.org/documents/RSS_Data_Feed.xml");  // must use invalid group id to use empty group index

            // assert
            Assert.AreEqual(calendarDataBlock.Title, calendarDataList.First().Title);
            Assert.AreEqual(calendarDataBlock.Description, calendarDataList.First().Description);
            Assert.AreEqual(calendarDataBlock.Link, calendarDataList.First().Link);
            Assert.AreEqual(calendarDataBlock.PubDateString, calendarDataList.First().PubDateString);
        }
Exemplo n.º 10
0
        public void TestCalendarInvalidXmlDataFromFile()
        {
            // arrange
            CalendarFeed      TestFeed          = new CalendarFeed();
            Rss               calendarDataBlock = new Rss();
            IEnumerable <Rss> calendarDataList  = new Rss[0];

            // act
            calendarDataBlock.Title         = "Error";
            calendarDataBlock.Description   = "Group ID error";
            calendarDataBlock.Link          = "webmaster";
            calendarDataBlock.PubDateString = DateTime.Now;

            calendarDataList = TestFeed.GetRssFeed("dont care", "0", "http://www.monckscornerumc.org/documents/RSS_Corrupt_Data.xml");  // must use invalid group id to use empty group index

            // assert
            StringAssert.Contains(calendarDataList.Last().Title, calendarDataBlock.Title);
            StringAssert.Contains(calendarDataList.Last().Description, calendarDataBlock.Description);
            StringAssert.Contains(calendarDataList.Last().Link, calendarDataBlock.Link);
            StringAssert.StartsWith(calendarDataList.Last().PubDateString.ToString(), calendarDataBlock.PubDateString.ToString("d"));  // just check date
        }
Exemplo n.º 11
0
        public void TestCalendarRssError()
        {
            // arrange
            CalendarFeed      TestFeed          = new CalendarFeed();
            Rss               calendarDataBlock = new Rss();
            IEnumerable <Rss> calendarDataList  = new Rss[0];

            // act
            calendarDataBlock.Title         = "Error";
            calendarDataBlock.Description   = "RSS error";
            calendarDataBlock.Link          = "webmaster";
            calendarDataBlock.PubDateString = DateTime.Now;

            calendarDataList = TestFeed.GetRssFeed("Worship", "7", "http://www.bartbrock.com/");  // returns HTTP data stream instead of RSS

            // assert
            StringAssert.Contains(calendarDataList.First().Title, calendarDataBlock.Title);
            StringAssert.Contains(calendarDataList.First().Description, calendarDataBlock.Description);
            StringAssert.Contains(calendarDataList.First().Link, calendarDataBlock.Link);
            StringAssert.StartsWith(calendarDataList.First().PubDateString.ToString(), calendarDataBlock.PubDateString.ToString("d"));  // just check date
        }
Exemplo n.º 12
0
        public void TestCalendarValidData()
        {
            // arrange
            CalendarFeed      TestFeed          = new CalendarFeed();
            Rss               calendarDataBlock = new Rss();
            IEnumerable <Rss> calendarDataList  = new Rss[0];

            // act
            calendarDataBlock.Title         = "Worship";
            calendarDataBlock.Description   = "<b>Worship</b> - 12/11/2016 - 9:00 AM to 10:00 AM<br /><br />";
            calendarDataBlock.Link          = "http://calendar.churchart.com/calendar/calendar.aspx?cei=262662443&event_date=12/11/2016&ci=73866977&igd=98186886";
            calendarDataBlock.PubDateString = Convert.ToDateTime(" 2016 - 12 - 11T14: 00:00Z ").ToLocalTime();

            calendarDataList = TestFeed.GetRssFeed("Worship", "10", CalendarData.CalendarURL);

            // assert
            Assert.AreEqual(calendarDataBlock.Title, calendarDataList.First().Title);
            Assert.AreEqual(calendarDataBlock.Description, calendarDataList.First().Description);
            Assert.AreEqual(calendarDataBlock.Link, calendarDataList.First().Link);
            Assert.AreEqual(calendarDataBlock.PubDateString, calendarDataList.First().PubDateString);
        }
Exemplo n.º 13
0
        static void Main(string[] args)
        {
            string calendarURI = "http://www.google.com/calendar/feeds/default/allcalendars/full";
            string userName    = "******";
            string passWord    = "******";

            //创建日历服务对象
            CalendarService services = new CalendarService("CalendarTestApp");

            services.setUserCredentials(userName, passWord);

            CalendarQuery query = new CalendarQuery();

            query.Uri = new Uri("http://www.google.com/calendar/feeds/default/allcalendars/full");
            CalendarFeed resultFeed = (CalendarFeed)services.Query(query);

            Console.WriteLine("Your calendars:\n");
            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                Console.WriteLine(entry.Title.Text + "\n");
            }
            Console.ReadKey();
        }
Exemplo n.º 14
0
        private void deleteCalendar(CalendarService service, string calendarTitle)
        {
            //assume title is non-empty for now
            CalendarQuery query = new CalendarQuery();

            query.Uri = new Uri("https://www.google.com/calendar/feeds/default/owncalendars/full");
            CalendarFeed resultFeed = (CalendarFeed)service.Query(query);

            foreach (CalendarEntry entry in resultFeed.Entries)
            {
                if (entry.Title.Text == calendarTitle)
                {
                    try
                    {
                        entry.Delete();
                    }
                    catch (GDataRequestException)
                    {
                        MessageBox.Show("Unable to delete primary calendar.\n");
                    }
                }
            }
        }
Exemplo n.º 15
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            string[] uris;
            string   povtoruvanje = "";
            mwGoogleEvent.ActiveViewIndex = 0;



            if ((Request.QueryString["token"] != null) && Session["sessionToken"] == null)
            {
                Session["sessionToken"] = AuthSubUtil.exchangeForSessionToken(Request.QueryString["token"], null);
            }
            GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "FEITPortal");
            authFactory.Token = (string)Session["sessionToken"];
            myCalendarService.RequestFactory = authFactory;
            CalendarQuery query = new CalendarQuery();
            query.Uri = new Uri("http://www.google.com/calendar/feeds/default/owncalendars/full");
            try
            {
                CalendarFeed resultFeed = myCalendarService.Query(query);
                foreach (CalendarEntry entry in resultFeed.Entries)
                {
                    uris = entry.Id.Uri.ToString().Split('/');
                    ListItem li = new ListItem();
                    li.Text  = entry.Title.Text;
                    li.Value = uris[8];
                    ddlKalendari.Items.Add(li);
                }
            }
            catch (Exception ex)
            {
                hlGcal1.Visible  = true;
                hlNazad1.Visible = true;
                lblGreska.Text   = "Немате креирано Google Calendar";
                mwGoogleEvent.ActiveViewIndex = 3;
            }


            Calendar.COURSE_EVENTS_INSTANCEDataTable nastan = (Calendar.COURSE_EVENTS_INSTANCEDataTable)Session["gNastan"];



            foreach (Calendar.COURSE_EVENTS_INSTANCERow r in nastan)
            {
                CoursesTier CourseTier = new CoursesTier(Convert.ToInt32(Session["COURSE_ID"]));
                novNastan.Content.Language = r.COURSE_EVENT_ID.ToString();
                novNastan.Title.Text       = r.TITLE;
                novNastan.Content.Content  = "Предмет: " + CourseTier.Name + " Опис: " + r.DESCRIPTION + " Тип: " + r.TYPEDESCRIPTION + " ID:" + r.COURSE_EVENT_ID.ToString();
                Where mesto = new Where();
                mesto.ValueString = r.ROOM;
                novNastan.Locations.Add(mesto);
                int recType = Convert.ToInt32(r.RECURRENCE_TYPE);


                DateTime startDate = Convert.ToDateTime(r.STARTDATE);
                DateTime endDate   = Convert.ToDateTime(r.ENDDATE);
                DateTime startTime = Convert.ToDateTime(r.STARTIME);
                DateTime endTime   = Convert.ToDateTime(r.ENDTIME);
                TimeSpan span      = endTime - startTime;

                if (recType != 0)
                {
                    Recurrence rec = new Recurrence();
                    string     recData;
                    string     dStart = "DTSTART;TZID=" + System.TimeZone.CurrentTimeZone.StandardName + ":" + startDate.ToString("yyyyMMddT") + startTime.AddHours(-1).ToString("HHmm") + "00\r\n";
                    string     dEnd   = "DTEND;TZID=" + System.TimeZone.CurrentTimeZone.StandardName + ":" + startDate.ToString("yyyyMMddT") + startTime.AddHours(-1 + span.Hours).ToString("HHmm") + "00\r\n";
                    string     rRule  = "";
                    povtoruvanje = "<b>Повторување:</b> ";

                    switch (recType)
                    {
                    case 1:
                        rRule         = "RRULE:FREQ=DAILY;INTERVAL=" + r.RECURRENCE_NUMBER + ";UNTIL=" + endDate.ToString("yyyyMMddTHHmm") + "00Z\r\n";
                        povtoruvanje += "Дневно, секој " + r.RECURRENCE_NUMBER.ToString() + " ден <br> </br> <br> </br>";
                        break;

                    case 2:
                        string daysInWeek = "";
                        string denovi     = "";

                        if (r.DAYSINWEEK[0] == '1')
                        {
                            daysInWeek += "MO,";
                            denovi     += " Понеделник,";
                        }
                        if (r.DAYSINWEEK[1] == '1')
                        {
                            daysInWeek += "TU,";
                            denovi     += " Вторник,";
                        }
                        if (r.DAYSINWEEK[2] == '1')
                        {
                            daysInWeek += "WE,";
                            denovi     += " Среда,";
                        }
                        if (r.DAYSINWEEK[3] == '1')
                        {
                            daysInWeek += "TH,";
                            denovi     += " Четврток,";
                        }
                        if (r.DAYSINWEEK[4] == '1')
                        {
                            daysInWeek += "FR,";
                            denovi     += " Петок,";
                        }
                        if (r.DAYSINWEEK[5] == '1')
                        {
                            daysInWeek += "SA,";
                            denovi     += " Сабота,";
                        }
                        if (r.DAYSINWEEK[6] == '1')
                        {
                            daysInWeek += "SU,";
                            denovi     += " Недела,";
                        }
                        daysInWeek    = daysInWeek.Substring(0, daysInWeek.Length - 1);
                        denovi        = denovi.Substring(0, denovi.Length - 1);
                        rRule         = "RRULE:FREQ=WEEKLY;INTERVAL=" + r.RECURRENCE_NUMBER + ";BYDAY=" + daysInWeek + ";UNTIL=" + endDate.ToString("yyyyMMddTHHmm") + "00Z\r\n";
                        povtoruvanje += "Неделно, секоја " + r.RECURRENCE_NUMBER + " недела и тоа во: " + denovi + " <br> </br> <br> </br>";
                        break;

                    case 3:
                        rRule         = "RRULE:FREQ=MONTHLY;INTERVAL=" + r.RECURRENCE_NUMBER + ";UNTIL=" + endDate.ToString("yyyyMMddTHHmm") + "00Z\r\n";
                        povtoruvanje += "Месечно, секој " + r.RECURRENCE_NUMBER + " месец <br> </br> <br> </br>";
                        break;
                    }
                    recData              = dStart + dEnd + rRule;
                    rec.Value            = recData;
                    novNastan.Recurrence = rec;
                }
                else
                {
                    When vreme = new When();
                    vreme.StartTime = r.STARTIME;
                    vreme.EndTime   = r.ENDTIME;
                    novNastan.Times.Add(vreme);
                }


                lblPrikaz.Text += "<b>Наслов: </b>" + r.TITLE + "<br> </br> <br> </br>";
                lblPrikaz.Text += "<b>Опис: </b>" + r.DESCRIPTION + "<br> </br> <br> </br>";
                lblPrikaz.Text += "<b>Просторија: </b>" + r.ROOM + "<br> </br> <br> </br>";
                lblPrikaz.Text += "<b>Тип: </b>" + r.TYPEDESCRIPTION + "<br> </br> <br> </br>";
                lblPrikaz.Text += povtoruvanje;
                lblPrikaz.Text += "<b>Почетен датум: </b>" + startDate.ToShortDateString() + "  <b>Краен датум: </b>" + endDate.ToShortDateString() + "<br> </br> <br> </br>";
                lblPrikaz.Text += "<b>Време: Од </b>" + startTime.ToShortTimeString() + " <b>До</b> " + endTime.ToShortTimeString();
            }
            Session["novNastan"] = novNastan;
        }
    }
Exemplo n.º 16
0
    // povikuvanje na id na defaultniot calendar
    public string GetCalendarIdentifier()
    {
        GoogleTokenModel GoogleTokenModelObject = new GoogleTokenModel();


        SqlConnection konekcija3 = new SqlConnection();

        konekcija3.ConnectionString = ConfigurationManager.ConnectionStrings["mojaKonekcija"].ConnectionString;

        SqlCommand komanda = new SqlCommand();

        komanda.Connection  = konekcija3;
        komanda.CommandText = "SELECT * FROM Users WHERE UserName=@UserName";
        komanda.Parameters.Add("@UserName", (string)Session["UserName"]);

        try
        {
            konekcija3.Open();
            SqlDataReader citac = komanda.ExecuteReader();
            while (citac.Read())
            {
                GoogleTokenModelObject.Access_Token  = (string)citac["AccessToken"];
                GoogleTokenModelObject.Refresh_Token = (string)citac["RefreshToken"];
            }
            citac.Close();
        }
        catch (Exception ex) { lblMessage.Text = ex.ToString(); }
        finally { konekcija3.Close(); }

        // zapocnuva get calendar id
        CalendarService CalService      = GoogleCalendarManager.GetCalendarService(GoogleTokenModelObject);
        string          AllCalendarFeed = @"http://www.google.com/calendar/feeds/default/allcalendars/full";
        Uri             postUri         = new Uri(AllCalendarFeed);

        CalendarQuery CalendarQuery = new CalendarQuery();

        CalendarQuery.Uri = postUri;
        string CalendarID = "";

        try
        {
            CalendarFeed calFeed = CalService.Query(CalendarQuery);



            if (calFeed != null && calFeed.Entries.Count > 0)
            {
                foreach (CalendarEntry CalEntry in calFeed.Entries)
                {
                    //Commented to post the new appointments on the main calendar instead of cleverfox calendar
                    //if (CalEntry.Title.Text.Contains("Cleverfox") == true)
                    //{
                    //CalendarID = CalEntry.Title.Text;
                    CalendarID = CalEntry.EditUri.ToString().Substring(CalEntry.EditUri.ToString().LastIndexOf("/") + 1);
                    break;
                    //}
                }
            }
        }
        catch (Exception e) { lblMessage.Text = e.ToString(); }
        return(CalendarID);
    }
    //zamanje na id od default calendar
    private static string GetCalendarID(CalendarService CalService)
    {
        Uri           postUri       = new Uri(AllCalendarFeed);
        CalendarQuery CalendarQuery = new CalendarQuery();

        CalendarQuery.Uri = postUri;

        CalendarFeed calFeed = CalService.Query(CalendarQuery);

        string CalendarID = "";

        if (calFeed != null && calFeed.Entries.Count > 0)
        {
            foreach (CalendarEntry CalEntry in calFeed.Entries)
            {
                //Commented to post the new appointments on the main calendar instead of cleverfox calendar
                //if (CalEntry.Title.Text.Contains("Cleverfox") == true)
                //{
                //CalendarID = CalEntry.Title.Text;
                CalendarID = CalEntry.EditUri.ToString().Substring(CalEntry.EditUri.ToString().LastIndexOf("/") + 1);
                break;
                //}
            }
        }

        #region Commented to post the new appointments on the main calendar instead of cleverfox calendar

        /*if (string.IsNullOrEmpty(CalendarID) == false)
         *  {
         *
         *  }
         *  else
         *  {
         *      Google.GData.Client.AtomEntry cal = new AtomEntry();
         *      cal.Title.Text = "Cleverfox";
         *
         *      CalService.Insert(new Uri(OwnCalendarFeed), cal);
         *  }
         *  calFeed = CalService.Query(CalendarQuery);
         *
         *  //if search contains result then update
         *  if (calFeed != null && calFeed.Entries.Count > 0)
         *  {
         *      foreach (CalendarEntry CalEntry in calFeed.Entries)
         *      {
         *          if (CalEntry.Title.Text.Contains("Cleverfox") == true)
         *          {
         *              //CalendarName = CalEntry.Title.Text;
         *              CalendarID = CalEntry.EditUri.ToString().Substring(CalEntry.EditUri.ToString().LastIndexOf("/") + 1);
         *              //if (CalEntry.TimeZone != "Canada/Vancouver")
         *              //{
         *              //    CalEntry.TimeZone = "(GMT-07:00) Arizona";
         *              //    CalEntry.Update();
         *              //}
         *              if (CalEntry.TimeZone != MerchantTimeZone)
         *              {
         *                  CalEntry.TimeZone = MerchantTimeZone;
         *                  CalEntry.Update();
         *              }
         *              break;
         *          }
         *      }
         *  }*/
        #endregion
        return(CalendarID);
    }
Exemplo n.º 18
0
        //private static IEnumerable<CalendarEntry> DownloadAll(CalendarQuery query, CalendarService service)
        //{
        //	IEnumerable<CalendarEntry> allCalendars = new List<CalendarEntry>();
        //	CalendarFeed feed = service.Query(query);
        //	bool hasCals = false;

        //	while (feed != null && feed.Entries.Count > 0)
        //	{
        //		hasCals = true;
        //		allCalendars = allCalendars.Concat<CalendarEntry>(feed.Entries.Cast<CalendarEntry>());

        //		// just query the same query again.
        //		if (feed.NextChunk != null)
        //		{
        //			query.Uri = new Uri(feed.NextChunk);
        //			feed = service.Query(query);
        //		}
        //		else
        //			feed = null;
        //	}

        //	return hasCals ? allCalendars : null;
        //}

        private static IEnumerable <CalendarEntry> DownloadAll(CalendarQuery query, CalendarService service, CancellationToken token)
        {
            CalendarFeed feed = null;

            for (int i = 0; i < MaxTries; i++)
            {
                try
                {
                    feed = service.Query(query);
                    break;
                }
                catch
                {
                    if (i == MaxTries - 1)
                    {
                        throw;
                    }

                    Thread.Sleep(AttemptDelay);
                }

                token.ThrowIfCancellationRequested();
            }

            while (feed != null && feed.Entries.Count > 0)
            {
                foreach (CalendarEntry entry in feed.Entries.Cast <CalendarEntry>())
                {
                    yield return(entry);
                }

                // just query the same query again.
                if (feed.NextChunk != null)
                {
                    query.Uri = new Uri(feed.NextChunk);

                    for (int i = 0; i < MaxTries; i++)
                    {
                        try
                        {
                            feed = service.Query(query);
                            break;
                        }
                        catch
                        {
                            if (i == MaxTries - 1)
                            {
                                throw;
                            }

                            Thread.Sleep(AttemptDelay);
                        }

                        token.ThrowIfCancellationRequested();
                    }
                }
                else
                {
                    feed = null;
                }
            }
        }