// // Calendar.cs // // Author: // Paul Schneider // // Copyright (c) 2015 Paul Schneider // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . using System; using System.Net; using System.IO; using System.Web; using Yavsc.Models.Google; using Yavsc.Models.Auth; using Newtonsoft.Json; namespace Yavsc.GoogleApis { /// /// Google Calendar API client. /// public class CalendarApi { protected static string scopeCalendar = "https://www.googleapis.com/auth/calendar"; private string _ApiKey; public CalendarApi(string ApiKey) { _ApiKey = ApiKey; } /// /// The get cal list URI. /// protected static string getCalListUri = "https://www.googleapis.com/calendar/v3/users/me/calendarList"; /// /// The get cal entries URI. /// protected static string getCalEntriesUri = "https://www.googleapis.com/calendar/v3/calendars/{0}/events"; /// /// The date format. /// private static string dateFormat = "yyyy-MM-ddTHH:mm:ss"; /// /// The time zone. TODO Fixme with machine time zone /// private string timeZone = "+01:00"; /// /// Gets the calendar list. /// /// The calendars. /// Cred. public CalendarList GetCalendars (UserCredential creds) { if (creds==null) throw new InvalidOperationException("No credential"); CalendarList res = null; HttpWebRequest webreq = WebRequest.CreateHttp (getCalListUri); webreq.Headers.Add (HttpRequestHeader.Authorization, creds.GetHeader()); webreq.Method = "GET"; webreq.ContentType = "application/http"; using (WebResponse resp = webreq.GetResponse ()) { using (Stream respstream = resp.GetResponseStream ()) { using (var rdr = new StreamReader(respstream)) { res = JsonConvert.DeserializeObject(rdr.ReadToEnd()); } } resp.Close (); } webreq.Abort (); return res; } /// /// Gets a calendar event list, between the given dates. /// /// The calendar. /// Calendar identifier. /// Mindate. /// Maxdate. /// credential string. public CalendarEventList GetCalendar (string calid, DateTime mindate, DateTime maxdate,string cred) { if (string.IsNullOrWhiteSpace (calid)) throw new Exception ("the calendar identifier is not specified"); string uri = string.Format ( getCalEntriesUri, HttpUtility.UrlEncode (calid)) + string.Format ("?orderBy=startTime&singleEvents=true&timeMin={0}&timeMax={1}&key=" + _ApiKey, HttpUtility.UrlEncode (mindate.ToString (dateFormat) + timeZone), HttpUtility.UrlEncode (maxdate.ToString (dateFormat) + timeZone)); HttpWebRequest webreq = WebRequest.CreateHttp (uri); webreq.Headers.Add (HttpRequestHeader.Authorization, cred); webreq.Method = "GET"; webreq.ContentType = "application/http"; CalendarEventList res = null; try { using (WebResponse resp = webreq.GetResponse ()) { using (Stream respstream = resp.GetResponseStream ()) { try { using (var rdr = new StreamReader(respstream)) { res= JsonConvert.DeserializeObject(rdr.ReadToEnd()); } } catch (Exception ) { respstream.Close (); resp.Close (); webreq.Abort (); throw ; } } resp.Close (); } } catch (WebException ) { webreq.Abort (); throw; } webreq.Abort (); return res; } } }