using System; using System.Text; using Google.GData.AccessControl; using Google.GData.Calendar; using Google.GData.Client; using Google.GData.Extensions; namespace CalendarDemoConsoleApplication { class CalendarDemo { private static String userName, userPassword, feedUri; /// /// Prints a list of the user's calendars. /// /// The authenticated CalendarService object. static void PrintUserCalendars(CalendarService service) { FeedQuery query = new FeedQuery(); query.Uri = new Uri("http://www.google.com/calendar/feeds/default"); // Tell the service to query: AtomFeed calFeed = service.Query(query); Console.WriteLine("Your calendars:"); Console.WriteLine(); for (int i = 0; i < calFeed.Entries.Count; i++) { Console.WriteLine(calFeed.Entries[i].Title.Text); } Console.WriteLine(); } /// /// Prints the titles of all events on the specified calendar. /// /// The authenticated CalendarService object. static void PrintAllEvents(CalendarService service) { EventQuery myQuery = new EventQuery(feedUri); EventFeed myResultsFeed = service.Query(myQuery) as EventFeed; Console.WriteLine("All events on your calendar:"); Console.WriteLine(); for (int i = 0; i < myResultsFeed.Entries.Count; i++) { Console.WriteLine(myResultsFeed.Entries[i].Title.Text); } Console.WriteLine(); } /// /// Prints the titles of all events matching a full-text query. /// /// The authenticated CalendarService object. /// The text for which to query. static void FullTextQuery(CalendarService service, String queryString) { EventQuery myQuery = new EventQuery(feedUri); myQuery.Query = queryString; EventFeed myResultsFeed = service.Query(myQuery) as EventFeed; Console.WriteLine("Events matching \"{0}\":", queryString); Console.WriteLine(); for (int i = 0; i < myResultsFeed.Entries.Count; i++) { Console.WriteLine(myResultsFeed.Entries[i].Title.Text); } Console.WriteLine(); } /// /// Prints the titles of all events in a specified date/time range. /// /// The authenticated CalendarService object. /// Start time (inclusive) of events to print. /// End time (exclusive) of events to print. static void DateRangeQuery(CalendarService service, DateTime startTime, DateTime endTime) { EventQuery myQuery = new EventQuery(feedUri); myQuery.StartTime = startTime; myQuery.EndTime = endTime; EventFeed myResultsFeed = service.Query(myQuery) as EventFeed; Console.WriteLine("Matching events from {0} to {1}:", startTime.ToShortDateString(), endTime.ToShortDateString()); Console.WriteLine(); for (int i = 0; i < myResultsFeed.Entries.Count; i++) { Console.WriteLine(myResultsFeed.Entries[i].Title.Text); } Console.WriteLine(); } /// /// Helper method to create either single-instance or recurring events. /// For simplicity, some values that might normally be passed as parameters /// (such as author name, email, etc.) are hard-coded. /// /// The authenticated CalendarService object. /// Title of the event to create. /// Recurrence value for the event, or null for /// single-instance events. /// The newly-created EventEntry on the calendar. static EventEntry CreateEvent(CalendarService service, String entryTitle, String recurData) { EventEntry entry = new EventEntry(); // Set the title and content of the entry. entry.Title.Text = entryTitle; entry.Content.Content = "Meet for a quick lesson."; // Set a location for the event. Where eventLocation = new Where(); eventLocation.ValueString = "South Tennis Courts"; entry.Locations.Add(eventLocation); // If a recurrence was requested, add it. Otherwise, set the // time (the current date and time) and duration (30 minutes) // of the event. if (recurData == null) { When eventTime = new When(); eventTime.StartTime = DateTime.Now; eventTime.EndTime = eventTime.StartTime.AddMinutes(30); entry.Times.Add(eventTime); } else { Recurrence recurrence = new Recurrence(); recurrence.Value = recurData; entry.Recurrence = recurrence; } // Send the request and receive the response: Uri postUri = new Uri(feedUri); AtomEntry insertedEntry = service.Insert(postUri, entry); return (EventEntry)insertedEntry; } /// /// Creates a single-instance event on a calendar. /// /// The authenticated CalendarService object. /// Title of the event to create. /// The newly-created EventEntry on the calendar. static EventEntry CreateSingleEvent(CalendarService service, String entryTitle) { return CreateEvent(service, entryTitle, null); } /// /// Creates a recurring event on a calendar. In this example, the event /// occurs every Tuesday from May 1, 2007 through September 4, 2007. Note /// that we are using iCal (RFC 2445) syntax; see http://www.ietf.org/rfc/rfc2445.txt /// for more information. /// /// The authenticated CalendarService object. /// Title of the event to create. /// The newly-created EventEntry on the calendar. static EventEntry CreateRecurringEvent(CalendarService service, String entryTitle) { String recurData = "DTSTART;VALUE=DATE:20070501\r\n" + "DTEND;VALUE=DATE:20070502\r\n" + "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n"; return CreateEvent(service, entryTitle, recurData); } /// /// Updates the title of an existing calendar event. /// /// The event to update. /// The new title for this event. /// The updated EventEntry object. static EventEntry UpdateTitle(EventEntry entry, String newTitle) { entry.Title.Text = newTitle; return (EventEntry)entry.Update(); } /// /// Adds a reminder to a calendar event. /// /// The event to update. /// Reminder time, in minutes. /// The updated EventEntry object. static EventEntry AddReminder(EventEntry entry, int numMinutes) { Reminder reminder = new Reminder(); reminder.Minutes = numMinutes; entry.Reminder = reminder; return (EventEntry)entry.Update(); } /// /// Adds an extended property to a calendar event. /// /// The event to update. /// The updated EventEntry object. static EventEntry AddExtendedProperty(EventEntry entry) { ExtendedProperty property = new ExtendedProperty(); property.Name = "http://www.example.com/schemas/2005#mycal.id"; property.Value = "1234"; entry.ExtensionElements.Add(property); return (EventEntry)entry.Update(); } /// /// Retrieves and prints the access control lists of all /// of the authenticated user's calendars. /// /// The authenticated CalendarService object. static void RetrieveAcls(CalendarService service) { FeedQuery query = new FeedQuery(); query.Uri = new Uri("http://www.google.com/calendar/feeds/default"); AtomFeed calFeed = service.Query(query); Console.WriteLine(); Console.WriteLine("Sharing permissions for your calendars:"); // Retrieve the meta-feed of all calendars. foreach (AtomEntry calendarEntry in calFeed.Entries) { Console.WriteLine("Calendar: {0}", calendarEntry.Title.Text); AtomLink link = calendarEntry.Links.FindService( AclNameTable.LINK_REL_ACCESS_CONTROL_LIST, null); // For each calendar, retrieve its ACL feed. if (link != null) { AclFeed feed = service.Query(new AclQuery(link.HRef.ToString())); foreach (AclEntry aclEntry in feed.Entries) { Console.WriteLine("\tScope: Type={0} ({1})", aclEntry.Scope.Type, aclEntry.Scope.Value); Console.WriteLine("\tRole: {0}", aclEntry.Role.Value); } } } } /// /// Shares a calendar with the specified user. Note that this method /// will not run by default. /// /// The authenticated CalendarService object. /// the ACL feed URI of the calendar being shared. /// The email address of the user with whom to share. /// The role of the user with whom to share. /// The AclEntry returned by the server. static AclEntry AddAccessControl(CalendarService service, string aclFeedUri, string userEmail, AclRole role) { AclEntry entry = new AclEntry(); entry.Scope = new AclScope(); entry.Scope.Type = AclScope.SCOPE_USER; entry.Scope.Value = userEmail; entry.Role = role; Uri aclUri = new Uri("http://www.google.com/calendar/feeds/gdata.ops.test@gmail.com/acl/full"); AclEntry insertedEntry = service.Insert(aclUri, entry) as AclEntry; Console.WriteLine("Added user {0}", insertedEntry.Scope.Value); return insertedEntry; } /// /// Updates a user to have new access permissions over a calendar. /// Note that this method will not run by default. /// /// An existing AclEntry representing sharing permissions. /// The new role (access permissions) for the user. /// The updated AclEntry. static AclEntry UpdateEntry(AclEntry entry, AclRole newRole) { entry.Role = newRole; AclEntry updatedEntry = entry.Update() as AclEntry; Console.WriteLine("Updated {0} to have role {1}", updatedEntry.Scope.Value, entry.Role.Value); return updatedEntry; } /// /// Deletes a user from a calendar's access control list, preventing /// that user from accessing the calendar. Note that this method will /// not run by default. /// /// An existing AclEntry representing sharing permissions. static void DeleteEntry(AclEntry entry) { entry.Delete(); } /// /// Runs the methods above to demonstrate usage of the .NET /// client library. The methods that add, update, or remove /// users on access control lists will not run by default. /// static void RunSample() { CalendarService service = new CalendarService("exampleCo-exampleApp-1"); service.setUserCredentials(userName, userPassword); // Demonstrate retrieving a list of the user's calendars. PrintUserCalendars(service); // Demonstrate various feed queries. PrintAllEvents(service); FullTextQuery(service, "Tennis"); DateRangeQuery(service, new DateTime(2007, 1, 5), new DateTime(2007, 1, 7)); // Demonstrate creating a single-occurrence event. EventEntry singleEvent = CreateSingleEvent(service, "Tennis with Mike"); Console.WriteLine("Successfully created event {0}", singleEvent.Title.Text); // Demonstrate creating a recurring event. AtomEntry recurringEvent = CreateRecurringEvent(service, "Tennis with Dan"); Console.WriteLine("Successfully created recurring event {0}", recurringEvent.Title.Text); // Demonstrate updating the event's text. singleEvent = UpdateTitle(singleEvent, "Important meeting"); Console.WriteLine("Event's new title is {0}", singleEvent.Title.Text); // Demonstrate adding a reminder. Note that this will only work on a primary // calendar. singleEvent = AddReminder(singleEvent, 15); Console.WriteLine("Set a {0}-minute reminder for the event.", singleEvent.Reminder.Minutes); // Demonstrate adding an extended property. AddExtendedProperty(singleEvent); // Demonstrate deleting the item. singleEvent.Delete(); // Demonstrate retrieving access control lists for all calendars. RetrieveAcls(service); } static void Main(string[] args) { if (args.Length != 3) { Console.WriteLine("Usage: gcal_demo "); } else { userName = args[0]; userPassword = args[1]; feedUri = args[2]; RunSample(); } } } }