private void createNewCalendar(CalendarService service) { CalendarEntry calendar = new CalendarEntry(); calendar.Title.Text = textBox1.Text;//"Little League Schedule"; calendar.Summary.Text = "This calendar contains the practice schedule and game times."; calendar.TimeZone = "America/Los_Angeles"; calendar.Hidden = false; calendar.Color = "#2952A3"; calendar.Location = new Where("", "", "Oakland"); Uri postUri = new Uri("https://www.google.com/calendar/feeds/default/owncalendars/full"); CalendarEntry createdCalendar = (CalendarEntry)service.Insert(postUri, calendar); refreshCalendar(); }
/// <summary> /// Shares a calendar with the specified user. Note that this method /// will not run by default. /// </summary> /// <param name="service">The authenticated CalendarService object.</param> /// <param name="aclFeedUri">the ACL feed URI of the calendar being shared.</param> /// <param name="userEmail">The email address of the user with whom to share.</param> /// <param name="role">The role of the user with whom to share.</param> /// <returns>The AclEntry returned by the server.</returns> 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/[email protected]/acl/full"); AclEntry insertedEntry = service.Insert(aclUri, entry); Console.WriteLine("Added user {0}", insertedEntry.Scope.Value); return insertedEntry; }
public static void export(string email, string password, List<LeadTask> tasks) { CalendarService myService = new CalendarService("exportToGCalendar"); myService.setUserCredentials(email, password); foreach (LeadTask task in tasks) { EventEntry entry = new EventEntry(); // Set the title and content of the entry. entry.Title.Text = task.text; entry.Content.Content = task.details; When eventTime = new When((DateTime)task.start_date, (DateTime)task.end_date); entry.Times.Add(eventTime); Uri postUri = new Uri("https://www.google.com/calendar/feeds/default/private/full"); // Send the request and receive the response: Google.GData.Client.AtomEntry insertedEntry = myService.Insert(postUri, entry); } }
public async Task<string> Insert(Guid userId, string title, string content, DateTime start, DateTime end) { try { //同步到Google日历 var item = _iSysUserService.GetById(userId); if (string.IsNullOrEmpty(item.GoogleUserName) || string.IsNullOrEmpty(item.GooglePassword)) return ""; var myService = new CalendarService(item.GoogleUserName); myService.setUserCredentials(item.GoogleUserName, item.GooglePassword); // Set the title and content of the entry. var entry = new EventEntry { Title = { Text = "云集 " + title }, Content = { Content = content } }; //计划时间 var eventTime = new When(start, end); //判断是否为全天计划 if (start.Date != end.Date) eventTime.AllDay = true; entry.Times.Add(eventTime); var postUri = new Uri("https://www.google.com/calendar/feeds/default/private/full"); // Send the request and receive the response: var eventEntry = myService.Insert(postUri, entry); return eventEntry.EventId; } catch { return ""; } }
///////////////////////////////////////////////////////////////////////////// /// <summary> /// Test to check creating/updating/deleting a secondary calendar. /// </summary> [Test] public void CalendarOwnCalendarsTest() { Tracing.TraceMsg("Enterting CalendarOwnCalendarsTest"); CalendarService service = new CalendarService(this.ApplicationName); if (this.defaultOwnCalendarsUri != null) { if (this.userName != null) { service.Credentials = new GDataCredentials(this.userName, this.passWord); } service.RequestFactory = this.factory; CalendarEntry newCalendar = new CalendarEntry(); newCalendar.Title.Text = "new calendar" + Guid.NewGuid().ToString(); newCalendar.Summary.Text = "some unique summary" + Guid.NewGuid().ToString(); newCalendar.TimeZone = "America/Los_Angeles"; newCalendar.Hidden = false; newCalendar.Selected = true; newCalendar.Color = "#2952A3"; newCalendar.Location = new Where("", "", "Test City"); Uri postUri = new Uri(this.defaultOwnCalendarsUri); CalendarEntry createdCalendar = (CalendarEntry) service.Insert(postUri, newCalendar); Assert.IsNotNull(createdCalendar, "created calendar should be returned."); Assert.AreEqual(newCalendar.Title.Text, createdCalendar.Title.Text, "Titles should be equal"); Assert.AreEqual(newCalendar.Summary.Text, createdCalendar.Summary.Text, "Summaries should be equal"); Assert.AreEqual(newCalendar.TimeZone, createdCalendar.TimeZone, "Timezone should be equal"); Assert.AreEqual(newCalendar.Hidden, createdCalendar.Hidden, "Hidden property should be equal"); Assert.AreEqual(newCalendar.Color, createdCalendar.Color, "Color property should be equal"); Assert.AreEqual(newCalendar.Location.ValueString, createdCalendar.Location.ValueString, "Where should be equal"); createdCalendar.Title.Text = "renamed calendar" + Guid.NewGuid().ToString(); createdCalendar.Hidden = true; CalendarEntry updatedCalendar = (CalendarEntry) createdCalendar.Update(); Assert.AreEqual(createdCalendar.Title.Text, updatedCalendar.Title.Text, "entry should have been updated"); updatedCalendar.Delete(); CalendarQuery query = new CalendarQuery(); query.Uri = postUri; CalendarFeed calendarList = service.Query(query); foreach (CalendarEntry entry in calendarList.Entries) { Assert.IsTrue(entry.Title.Text != updatedCalendar.Title.Text, "Calendar should have been removed"); } service.Credentials = null; } }
///////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// /// <summary>Tests the ACL extensions, this time getting the feed from the entry</summary> ////////////////////////////////////////////////////////////////////// [Test] public void CalendarACL2Test() { Tracing.TraceMsg("Entering CalendarACL2Test"); CalendarQuery query = new CalendarQuery(); CalendarService service = new CalendarService(this.ApplicationName); if (this.defaultCalendarUri != null) { if (this.userName != null) { service.Credentials = new GDataCredentials(this.userName, this.passWord); } service.RequestFactory = this.factory; query.Uri = new Uri(this.defaultOwnCalendarsUri); CalendarFeed calFeed = service.Query(query); if (calFeed != null && calFeed.Entries != null && calFeed.Entries[0] != null) { AtomLink link = calFeed.Entries[0].Links.FindService(AclNameTable.LINK_REL_ACCESS_CONTROL_LIST, null); AclEntry aclEntry = new AclEntry(); aclEntry.Scope = new AclScope(); aclEntry.Scope.Type = AclScope.SCOPE_USER; aclEntry.Scope.Value = "*****@*****.**"; aclEntry.Role = AclRole.ACL_CALENDAR_READ; Uri aclUri = null; if (link != null) { aclUri = new Uri(link.HRef.ToString()); } else { throw new Exception("ACL link was null."); } AclEntry insertedEntry = service.Insert(aclUri, aclEntry); insertedEntry.Delete(); } } }
// TODO: dynamically generate study time based on credit hours of each class private void generateBtn_Click(object sender, EventArgs e) { timeSlots.Clear(); String report = ""; if (username == "" || password == "" || calendarUrl == "") { MessageBox.Show("Please add Google login and password information."); } else { foreach (ClassGroupBox g in groupBoxList) { firstDayOfClass = assignClassStartDay(g.getDays()[0], startOfSemester); String recursionString = "DTSTART;TZID=US/Eastern:" + startOfSemester.Year + startOfSemester.Month.ToString("00") + firstDayOfClass.ToString() + "T" + g.getStartHour() + g.getStartMin() + "00" + "\r\nDTEND;TZID=US/Eastern:" + startOfSemester.Year + startOfSemester.Month.ToString("00") + startOfSemester.Day.ToString("00") + "T" + g.getEndHour() + g.getEndMin() + "00" + "\r\n" + "RRULE:FREQ=WEEKLY;BYDAY=" + buildDayString(g.getDays()) + ";UNTIL=" + endOfSemester.Year + endOfSemester.Month.ToString("00") + endOfSemester.Day.ToString("00") + "\r\n"; Recurrence recurrence = new Recurrence(); recurrence.Value = recursionString; Console.Out.WriteLine(recursionString); CalendarService service = new CalendarService("ggco-purdueScheduler-0.01"); Uri postUri = new Uri("https://www.google.com/calendar/feeds/" + calendarUrl + "/private/full"); service.setUserCredentials(username, password); EventEntry calendarEntry = new EventEntry(); calendarEntry.Title.Text = g.getCourseName(); calendarEntry.Recurrence = recurrence; report += buildDayReport(g); try { AtomEntry insertedEntry = service.Insert(postUri, calendarEntry); resultLbl.Text = "SUCCESS"; resultLbl.ForeColor = Color.White; resultLbl.BackColor = Color.Green; } catch { resultLbl.Text = "FAILURE"; resultLbl.ForeColor = Color.White; resultLbl.BackColor = Color.Red; } //// BASELINE - used to ensure no overlap in a given day //DateTime start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, // DateTime.Now.Day, int.Parse(g.getStartHour()), int.Parse(g.getStartMin()), 0); //DateTime end = new DateTime(DateTime.Now.Year, DateTime.Now.Month, // DateTime.Now.Day, int.Parse(g.getEndHour()), int.Parse(g.getEndMin()), 0); //if (groupBoxList.Count == 0) //{ // timeSlots.Add(new TimeSlot(start, end)); //} //else //{ // foreach (TimeSlot t in timeSlots) // { // if (start <= t.getStartTime() && end > t.getStartTime()) // { // MessageBox.Show("Classes overlap - one ends after another starts."); // } // else if (start >= t.getStartTime() && start < t.getEndTime()) // { // MessageBox.Show("Classes overlap - one starts before another ends."); // } // else // { // MessageBox.Show("No errors"); // } // } // timeSlots.Add(new TimeSlot(start, end)); //} } } reportRichTxt.Text = report; }
public void googlecalendarSMSreminder(string sendstring) { CalendarService service = new CalendarService("exampleCo-exampleApp-1"); service.setUserCredentials("*****@*****.**", "joneson55"); EventEntry entry = new EventEntry(); // Set the title and content of the entry. entry.Title.Text = sendstring; entry.Content.Content = "Lockerz Login Page Check."; // Set a location for the event. Where eventLocation = new Where(); eventLocation.ValueString = "Lockerz Login"; entry.Locations.Add(eventLocation); When eventTime = new When(DateTime.Now.AddMinutes(3), DateTime.Now.AddHours(1)); entry.Times.Add(eventTime); if (checkBox1.Checked == true) //Reminder ON/OFF { //Add SMS Reminder Reminder fiftyMinReminder = new Reminder(); fiftyMinReminder.Minutes = 1; fiftyMinReminder.Method = Reminder.ReminderMethod.sms; entry.Reminders.Add(fiftyMinReminder); } else { } Uri postUri = new Uri("http://www.google.com/calendar/feeds/default/private/full"); // Send the request and receive the response: AtomEntry insertedEntry = service.Insert(postUri, entry); }
public static void AddMenuButton() { //string googleAcc = "*****@*****.**", googlePWD = "<Cg4&YYN"; string googleAcc = "*****@*****.**", googlePWD = "A123456&"; var accessHelper = new FISCA.UDT.AccessHelper(); var ribbonBarItem = K12.Presentation.NLDPanels.Course.RibbonBarItems["課程行事曆"]; var syncButton = ribbonBarItem["同步修課學生"]; Catalog button_syncCalendar = RoleAclSource.Instance["課程"]["功能按鈕"]; button_syncCalendar.Add(new RibbonFeature("Sync_Course_Calendar_Student", "同步修課學生")); bool isEnabled = UserAcl.Current["Sync_Course_Calendar_Student"].Executable; syncButton.Enable = isEnabled; K12.Presentation.NLDPanels.Course.SelectedSourceChanged += delegate(object sender, EventArgs e) { syncButton.Enable = ((K12.Presentation.NLDPanels.Course.SelectedSource.Count > 0) && isEnabled); }; //syncButton.Enable = false; //K12.Presentation.NLDPanels.Course.SelectedSourceChanged += delegate(object sender, EventArgs e) //{ // syncButton.Enable = K12.Presentation.NLDPanels.Course.SelectedSource.Count > 0; //}; syncButton.Click += delegate { bool hasFaild = false; FISCA.Presentation.MotherForm.SetStatusBarMessage("修課學生行事曆同步中...", 0); List<string> selectedSource = new List<string>(K12.Presentation.NLDPanels.Course.SelectedSource); BackgroundWorker bkw = new System.ComponentModel.BackgroundWorker() { WorkerReportsProgress = true }; bkw.ProgressChanged += delegate(object sender, ProgressChangedEventArgs e) { FISCA.Presentation.MotherForm.SetStatusBarMessage("修課學生行事曆同步中...", e.ProgressPercentage); }; bkw.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) { SectionSyncColumn.Reload(); FISCA.Presentation.MotherForm.SetStatusBarMessage("修課學生行事曆同步完成"); if (hasFaild) { FISCA.Presentation.Controls.MsgBox.Show("修課學生行事曆同步完成,其中部分資同步失敗,請稍後再試。"); } }; bkw.DoWork += delegate { int count = 0; int syncedSections = 0; Dictionary<string, List<string>> courseAttend = new Dictionary<string, List<string>>(); //foreach (var item in K12.Data.SCAttend.SelectByCourseIDs(selectedSource)) AccessHelper helper = new AccessHelper(); string condition2 = "ref_course_id in ("; foreach (string key in selectedSource) { if (condition2 != "ref_course_id in (") condition2 += ","; condition2 += "'" + key + "'"; } condition2 += ")"; foreach (var item in helper.Select<SCAttendExt>(condition2)) { if (!courseAttend.ContainsKey(item.CourseID.ToString())) courseAttend.Add(item.CourseID.ToString(), new List<string>()); courseAttend[item.CourseID.ToString()].Add(item.StudentID.ToString()); count++; } Dictionary<string, Calendar> courseCalendar = new Dictionary<string, Calendar>(); string condition = "RefCourseID in ("; foreach (string key in selectedSource) { if (condition != "RefCourseID in (") condition += ","; condition += "'" + key + "'"; } condition += ")"; foreach (Calendar cal in accessHelper.Select<Calendar>(condition)) { if (!courseCalendar.ContainsKey(cal.RefCourseID)) courseCalendar.Add(cal.RefCourseID, cal); } bkw.ReportProgress(5); CalendarService myService = new CalendarService("ischool.CourseCalendar"); myService.setUserCredentials(googleAcc, googlePWD); bkw.ReportProgress(20); foreach (K12.Data.CourseRecord course in K12.Data.Course.SelectByIDs(courseAttend.Keys)) { Calendar targetCal = null; try { if (!courseCalendar.ContainsKey(course.ID)) { #region 建立新Calender string[] colorLists = new string[]{"#A32929","#B1365F","#7A367A","#5229A3","#29527A","#2952A3","#1B887A", "#28754E","#0D7813","#528800","#88880E","#AB8B00","#BE6D00","#B1440E", "#865A5A","#705770","#4E5D6C","#5A6986","#4A716C","#6E6E41","#8D6F47"}; CalendarEntry newCal = new CalendarEntry(); newCal.Title.Text = course.Name; newCal.Summary.Text = "科目:" + course.Subject + "\n學年度:" + course.SchoolYear + "\n學期:" + course.Semester + "\n學分數:" + course.Credit; newCal.TimeZone = "Asia/Taipei"; //targetCalender.Hidden = false; newCal.Color = colorLists[new Random(DateTime.Now.Millisecond).Next(0, colorLists.Length)]; Uri postUri = new Uri("http://www.google.com/calendar/feeds/default/owncalendars/full"); newCal = (CalendarEntry)myService.Insert(postUri, newCal); #endregion String calendarURI = newCal.Id.Uri.ToString(); String calendarID = calendarURI.Substring(calendarURI.LastIndexOf("/") + 1); targetCal = new Calendar() { RefCourseID = course.ID, GoogleCalanderID = calendarID }; targetCal.Save(); courseCalendar.Add(course.ID, targetCal); } else { targetCal = courseCalendar[course.ID]; } } catch { hasFaild = true; } if (targetCal != null) { List<string> aclList = new List<string>(targetCal.ACLList.Split("%".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); foreach (var student in K12.Data.Student.SelectByIDs(courseAttend[course.ID])) { try { if (student.SALoginName != "" && !aclList.Contains(student.SALoginName)) { #region 新增分享 AclEntry entry = new AclEntry(); entry.Scope = new AclScope(); entry.Scope.Type = AclScope.SCOPE_USER; entry.Scope.Value = student.SALoginName; entry.Role = AclRole.ACL_CALENDAR_READ; try { AclEntry insertedEntry = myService.Insert(new Uri("https://www.google.com/calendar/feeds/" + targetCal.GoogleCalanderID + "/acl/full"), entry); } catch (GDataRequestException gex) { if (!gex.InnerException.Message.Contains("(409)")) throw; } #endregion aclList.Add(student.SALoginName); targetCal.ACLList += (targetCal.ACLList == "" ? "" : "%") + student.SALoginName; } } catch { hasFaild = true; } syncedSections++; int p = syncedSections * 80 / count + 20; if (p > 100) p = 100; if (p < 0) p = 0; bkw.ReportProgress(p); } } } courseCalendar.Values.SaveAll(); }; bkw.RunWorkerAsync(); }; }
static void Main(string[] args) { string username = Properties.Settings.Default.username; string password = Properties.Settings.Default.password; Uri calendarUri = Properties.Settings.Default.calendarUri; Division divisionExclusion = Properties.Settings.Default.divisionExclusion; // Filter by division List<Contest> contests = getContests().Where((contest) => (contest.Division ^ divisionExclusion) > 0).ToList(); CalendarService service = new CalendarService("codeforces-export"); service.setUserCredentials(username, password); foreach (Contest contest in contests) { // Check if this contest already exists, update then EventQuery q = new EventQuery(); q.Uri = calendarUri; q.StartTime = contest.Start; q.EndTime = contest.End; EventFeed feed = service.Query(q); EventEntry eventEntry; bool contestExists; if (feed.Entries.Count == 1) { eventEntry = (EventEntry)feed.Entries[0]; contestExists = true; } else { // No such contest, create new eventEntry = new EventEntry(); contestExists = false; } eventEntry.Title.Text = contest.Title; eventEntry.Content.Content = contest.Title + " ("; if (contest.Division == Division.Both) eventEntry.Content.Content += "Both divs."; else if (contest.Division == Division.First) eventEntry.Content.Content += "Div. 1"; else eventEntry.Content.Content += "Div. 2"; eventEntry.Content.Content += ")"; eventEntry.Times.Add(new When(contest.Start, contest.End)); if (contestExists) { eventEntry.Update(); Console.WriteLine("Updated " + eventEntry.Content.Content + " event"); } else { service.Insert(calendarUri, eventEntry); Console.WriteLine("Added " + eventEntry.Content.Content + " event"); } } }
/// <summary> /// 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. /// </summary> /// <param name="service">The authenticated CalendarService object.</param> /// <param name="entryTitle">Title of the event to create.</param> /// <param name="recurData">Recurrence value for the event, or null for /// single-instance events.</param> /// <returns>The newly-created EventEntry on the calendar.</returns> 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; }
public bool Insert(Task task) { EventEntry eventEntry = new EventEntry { Title = {Text = task.Head}, Content = {Content = task.Description,}, Locations = {new Where("", "", task.Location)}, Times = {new When(task.StartDate, task.StopDate)}, }; Log.InfoFormat("Inserting new entry to google : [{0}]", task.ToString()); CalendarService service = new CalendarService("googleCalendarInsert"); service.setUserCredentials(task.AccountInfo.Username, task.AccountInfo.Password); Uri postUri = new Uri("https://www.google.com/calendar/feeds/default/private/full"); ErrorMessage = String.Empty; try { EventEntry createdEntry = service.Insert(postUri, eventEntry); return createdEntry != null; } catch (Exception exception) { Log.ErrorFormat(exception.Message); Log.ErrorFormat(exception.ToString()); ErrorMessage = exception.Message; } return false; }
private void CreateReminder(CalendarService calendarService, String reminderText, DateTime reminderTime) { EventEntry newEvent = new EventEntry(); newEvent.Title.Text = reminderText; newEvent.Content.Content = reminderText + " (Reminder added by RemGen from " + Environment.MachineName + " by " + Environment.UserName + " " + Environment.UserDomainName + ")"; //Where eventLocation = new Where(); //eventLocation.ValueString = "Test event location 2"; //newEvent.Locations.Add(eventLocation); When eventTime = new When(reminderTime, reminderTime); newEvent.Times.Add(eventTime); Reminder reminder = new Reminder(); reminder.Method = Reminder.ReminderMethod.sms; reminder.AbsoluteTime = reminderTime; newEvent.Reminders.Add(reminder); Uri postUri = new Uri(calendarApiUri); try { AtomEntry insertedEntry = calendarService.Insert(postUri, newEvent); MessageBox.Show("Reminder added successfully"); } catch (Exception ex) { MessageBox.Show("Failed to create event" + Environment.NewLine + Environment.NewLine + ex.ToString(), "RemGen"); } }
public static void AddMenuButton() { var accessHelper = new FISCA.UDT.AccessHelper(); var ribbonBarItem = K12.Presentation.NLDPanels.Course.RibbonBarItems["課程行事曆"]; var syncButton = ribbonBarItem["同步行事曆"]; Catalog button_syncCalendar = RoleAclSource.Instance["課程"]["功能按鈕"]; button_syncCalendar.Add(new RibbonFeature("Sync_Course_Calendar", "同步課程行事曆")); bool isEnabled = UserAcl.Current["Sync_Course_Calendar"].Executable; syncButton.Enable = ((K12.Presentation.NLDPanels.Course.SelectedSource.Count > 0) && isEnabled); K12.Presentation.NLDPanels.Course.SelectedSourceChanged += delegate(object sender, EventArgs e) { syncButton.Enable = ((K12.Presentation.NLDPanels.Course.SelectedSource.Count > 0) && isEnabled); }; syncButton.Click += delegate { bool hasFaild = false; FISCA.Presentation.MotherForm.SetStatusBarMessage("課程行事曆同步中...", 0); List<string> selectedSource = new List<string>(K12.Presentation.NLDPanels.Course.SelectedSource); BackgroundWorker bkw = new System.ComponentModel.BackgroundWorker() { WorkerReportsProgress = true }; bkw.ProgressChanged += delegate(object sender, ProgressChangedEventArgs e) { FISCA.Presentation.MotherForm.SetStatusBarMessage("課程行事曆同步中...", e.ProgressPercentage); }; bkw.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) { SectionSyncColumn.Reload(); FISCA.Presentation.MotherForm.SetStatusBarMessage("課程行事曆同步完成"); if (hasFaild) { FISCA.Presentation.Controls.MsgBox.Show("課程行事曆同步完成,其中部分資料同步失敗,請稍後再試。"); } }; bkw.DoWork += delegate(object sender, DoWorkEventArgs e) { Dictionary<string, Calendar> calendars = new Dictionary<string, Calendar>(); Dictionary<string, List<string>> courseAttend = new Dictionary<string, List<string>>(); Dictionary<string, List<Section>> publishItems = new Dictionary<string, List<Section>>(); Dictionary<string, string> studentLoginAccount = new Dictionary<string, string>(); List<string> syncCourses = new List<string>(); int count = 0; string condition = "RefCourseID in ("; foreach (string key in selectedSource) { if (condition != "RefCourseID in (") condition += ","; condition += "'" + key + "'"; } condition += ")"; string condition2 = "ref_course_id in ("; foreach (string key in selectedSource) { if (condition2 != "ref_course_id in (") condition2 += ","; condition2 += "'" + key + "'"; } condition2 += ")"; bkw.ReportProgress(3); foreach (Section section in accessHelper.Select<Section>(condition)) { if (!section.IsPublished || section.Removed) { if (!publishItems.ContainsKey(section.RefCourseID)) publishItems.Add(section.RefCourseID, new List<Section>()); publishItems[section.RefCourseID].Add(section); count++; } } foreach (Calendar cal in accessHelper.Select<Calendar>(condition)) { if (!calendars.ContainsKey(cal.RefCourseID)) calendars.Add(cal.RefCourseID, cal); } syncCourses.AddRange(publishItems.Keys); foreach (var item in accessHelper.Select<SCAttendExt>(condition2)) { if (!courseAttend.ContainsKey(item.CourseID.ToString())) courseAttend.Add(item.CourseID.ToString(), new List<string>()); courseAttend[item.CourseID.ToString()].Add(item.StudentID.ToString()); if (!studentLoginAccount.ContainsKey(item.StudentID.ToString())) studentLoginAccount.Add(item.StudentID.ToString(), ""); count++; } foreach (string key in selectedSource) { if (!courseAttend.ContainsKey(key)) courseAttend.Add(key, new List<string>()); } foreach (var student in K12.Data.Student.SelectByIDs(studentLoginAccount.Keys)) { if (student.SALoginName != "") { studentLoginAccount[student.ID] = student.SALoginName.ToLower(); } } foreach (string calid in courseAttend.Keys) { if (calendars.ContainsKey(calid)) { Calendar cal = calendars[calid]; List<string> aclList = new List<string>(cal.ACLList.Split("%".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); List<string> attentAccounts = new List<string>(); foreach (string sid in courseAttend[calid]) { if (studentLoginAccount[sid] != "") attentAccounts.Add(studentLoginAccount[sid]); } if (aclList.Count != attentAccounts.Count) { if (!syncCourses.Contains(calid)) syncCourses.Add(calid); } else { foreach (string acc in aclList) { if (!attentAccounts.Contains(acc.ToLower())) { if (!syncCourses.Contains(calid)) syncCourses.Add(calid); break; } } } } } bkw.ReportProgress(5); CalendarService myService = new CalendarService("ischool.CourseCalendar"); myService.setUserCredentials(googleAcc, googlePWD); bkw.ReportProgress(20); List<Section> syncedSections = new List<Section>(); foreach (K12.Data.CourseRecord course in K12.Data.Course.SelectByIDs(syncCourses)) { //CalendarEntry targetCalender = null; Calendar targetCal = null; try { if (!calendars.ContainsKey(course.ID)) { #region 建立新Calender string[] colorLists = new string[]{"#A32929","#B1365F","#7A367A","#5229A3","#29527A","#2952A3","#1B887A", "#28754E","#0D7813","#528800","#88880E","#AB8B00","#BE6D00","#B1440E", "#865A5A","#705770","#4E5D6C","#5A6986","#4A716C","#6E6E41","#8D6F47"}; CalendarEntry newCal = new CalendarEntry(); newCal.Title.Text = course.Name; newCal.Summary.Text = "科目:" + course.Subject + "\n學年度:" + course.SchoolYear + "\n學期:" + course.Semester + "\n學分數:" + course.Credit; newCal.TimeZone = "Asia/Taipei"; //targetCalender.Hidden = false; newCal.Color = colorLists[new Random(DateTime.Now.Millisecond).Next(0, colorLists.Length)]; Uri postUri = new Uri("http://www.google.com/calendar/feeds/default/owncalendars/full"); newCal = (CalendarEntry)myService.Insert(postUri, newCal); #endregion String calendarURI = newCal.Id.Uri.ToString(); String calendarID = calendarURI.Substring(calendarURI.LastIndexOf("/") + 1); targetCal = new Calendar() { RefCourseID = course.ID, GoogleCalanderID = calendarID }; targetCal.Save(); } else { targetCal = calendars[course.ID]; } } catch { hasFaild = true; } if (targetCal != null) { try { #region ACL if (courseAttend.ContainsKey(course.ID)) { List<string> aclList = new List<string>(targetCal.ACLList.Split("%".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); for (int i = 0; i < aclList.Count; i++) { aclList[i] = aclList[i].ToLower(); } List<string> attentAccounts = new List<string>(); foreach (string sid in courseAttend[course.ID]) { if (studentLoginAccount[sid] != "") attentAccounts.Add(studentLoginAccount[sid]); } foreach (string acc in attentAccounts) { if (!aclList.Contains(acc)) { try { #region 新增分享 AclEntry entry = new AclEntry(); entry.Scope = new AclScope(); entry.Scope.Type = AclScope.SCOPE_USER; entry.Scope.Value = acc; entry.Role = AclRole.ACL_CALENDAR_READ; try { AclEntry insertedEntry = myService.Insert(new Uri("https://www.google.com/calendar/feeds/" + targetCal.GoogleCalanderID + "/acl/full"), entry); } catch (GDataRequestException gex) { if (!gex.InnerException.Message.Contains("(409)")) throw; } #endregion aclList.Add(acc); } catch { hasFaild = true; } } } List<string> removeList = new List<string>(); if (aclList.Count != attentAccounts.Count) { #region 移除分享 AtomFeed calFeed = myService.Query(new FeedQuery("https://www.google.com/calendar/feeds/" + targetCal.GoogleCalanderID + "/acl/full")); foreach (string acc in aclList) { if (!attentAccounts.Contains(acc)) { try { foreach (AtomEntry atomEntry in calFeed.Entries) { if (atomEntry is AtomEntry) { AclEntry aclEntry = (AclEntry)atomEntry; if (aclEntry.Scope.Value.ToLower() == acc) { aclEntry.Delete(); break; } } } removeList.Add(acc); } catch { hasFaild = true; } } } #endregion } foreach (string acc in removeList) { if (aclList.Contains(acc)) aclList.Remove(acc); } targetCal.ACLList = ""; foreach (string acc in aclList) { targetCal.ACLList += (targetCal.ACLList == "" ? "" : "%") + acc; } } #endregion #region Events if (publishItems.ContainsKey(course.ID)) { EventFeed feed = myService.Query(new EventQuery("https://www.google.com/calendar/feeds/" + targetCal.GoogleCalanderID + "/private/full")); AtomFeed batchFeed = new AtomFeed(feed); foreach (Section section in publishItems[course.ID]) { if (!section.Removed) { #region 新增Event Google.GData.Calendar.EventEntry eventEntry = new Google.GData.Calendar.EventEntry(); eventEntry.Title.Text = course.Name; //eventEntry Where eventLocation = new Where(); eventLocation.ValueString = section.Place; eventEntry.Locations.Add(eventLocation); eventEntry.Notifications = true; eventEntry.Times.Add(new When(section.StartTime, section.EndTime)); eventEntry.Participants.Add(new Who() { ValueString = googleAcc, Attendee_Type = new Who.AttendeeType() { Value = Who.AttendeeType.EVENT_REQUIRED }, Attendee_Status = new Who.AttendeeStatus() { Value = Who.AttendeeStatus.EVENT_ACCEPTED }, Rel = Who.RelType.EVENT_ATTENDEE }); eventEntry.BatchData = new GDataBatchEntryData(section.UID, GDataBatchOperationType.insert); batchFeed.Entries.Add(eventEntry); #endregion } else { #region 刪除Event EventEntry toDelete = (EventEntry)feed.Entries.FindById(new AtomId(feed.Id.AbsoluteUri + "/" + section.EventID)); if (toDelete != null) { toDelete.Id = new AtomId(toDelete.EditUri.ToString()); toDelete.BatchData = new GDataBatchEntryData(section.UID, GDataBatchOperationType.delete); batchFeed.Entries.Add(toDelete); } else { section.Deleted = true; syncedSections.Add(section); } #endregion } int p = syncedSections.Count * 80 / count + 20; if (p > 100) p = 100; if (p < 0) p = 0; bkw.ReportProgress(p); } EventFeed batchResultFeed = (EventFeed)myService.Batch(batchFeed, new Uri(feed.Batch)); foreach (Section section in publishItems[course.ID]) { if (syncedSections.Contains(section)) continue; #region 儲存Section狀態 bool match = false; if (section.Removed) { foreach (EventEntry entry in batchResultFeed.Entries) { if (entry.BatchData.Status.Code == 200) { if (section.UID == entry.BatchData.Id) { section.Deleted = true; match = true; syncedSections.Add(section); break; } } } } else { foreach (EventEntry entry in batchResultFeed.Entries) { if (entry.BatchData.Status.Code == 201) { if (section.UID == entry.BatchData.Id) { section.IsPublished = true; match = true; section.EventID = entry.EventId; syncedSections.Add(section); break; } } } } if (!match) hasFaild = true; #endregion } } #endregion } catch { hasFaild = true; } targetCal.Save(); } } syncedSections.SaveAll(); }; bkw.RunWorkerAsync(); }; }
private static void addACLShared(string calID, string acc) { #region 新增分享 CalendarService myService = new CalendarService("ischool.CourseCalendar"); myService.setUserCredentials(googleAcc, googlePWD); AclEntry entry = new AclEntry(); entry.Scope = new AclScope(); entry.Scope.Type = AclScope.SCOPE_USER; entry.Scope.Value = acc; entry.Role = AclRole.ACL_CALENDAR_READ; try { AclEntry insertedEntry = myService.Insert(new Uri("https://www.google.com/calendar/feeds/" + calID + "/acl/full"), entry); } catch (GDataRequestException gex) { if (!gex.InnerException.Message.Contains("(409)")) throw; } #endregion }
private static string addNewCalender(string refid) { CalendarService myService = new CalendarService("ischool.CourseCalendar"); myService.setUserCredentials(googleAcc, googlePWD); #region 建立新Calender string[] colorLists = new string[]{"#A32929","#B1365F","#7A367A","#5229A3","#29527A","#2952A3","#1B887A", "#28754E","#0D7813","#528800","#88880E","#AB8B00","#BE6D00","#B1440E", "#865A5A","#705770","#4E5D6C","#5A6986","#4A716C","#6E6E41","#8D6F47"}; CalendarEntry newCal = new CalendarEntry(); newCal.Title.Text = "TEST" + DateTime.Now.ToShortTimeString(); newCal.TimeZone = "Asia/Taipei"; newCal.Color = colorLists[new Random(DateTime.Now.Millisecond).Next(0, colorLists.Length)]; Uri postUri = new Uri("http://www.google.com/calendar/feeds/default/owncalendars/full"); newCal = (CalendarEntry)myService.Insert(postUri, newCal); #endregion String calendarURI = newCal.Id.Uri.ToString(); String calendarID = calendarURI.Substring(calendarURI.LastIndexOf("/") + 1); return calendarID; }
public bool Save() { // TODO : Test me! try { if (_entry == null) { var service = new CalendarService(_applicationName); service.setUserCredentials(_credentials.EmailAddress, _credentials.Password); // this will create the entry for us and set it to the current calendar event info _setEventEntryToCurrent(); // this is the calendar it is being posted to var postUri = new Uri(_credentials.CalendarUri); // Send the request and receive the response: this._entry = service.Insert(postUri, _entry); // grab the eventId back this.EventID = _entry.EventId; } else { // set the entry to the current calendar event info and update _setEventEntryToCurrent(); _entry.Update(); } return true; } catch { return false; } }
public void OAuth2LeggedAuthenticationTest() { Tracing.TraceMsg("Entering OAuth2LeggedAuthenticationTest"); CalendarService service = new CalendarService("OAuthTestcode"); GOAuthRequestFactory requestFactory = new GOAuthRequestFactory("cl", "OAuthTestcode"); requestFactory.ConsumerKey = this.oAuthConsumerKey; requestFactory.ConsumerSecret = this.oAuthConsumerSecret; requestFactory.UseSSL = true; service.RequestFactory = requestFactory; CalendarEntry calendar = new CalendarEntry(); calendar.Title.Text = "Test OAuth"; OAuthUri postUri = new OAuthUri("https://www.google.com/calendar/feeds/default/owncalendars/full", this.oAuthUser, this.oAuthDomain); CalendarEntry createdCalendar = (CalendarEntry)service.Insert(postUri, calendar); }
/// <summary> /// Inserts the event in the calendar. /// </summary> public void InsertEvent(EventEntry entry) { var service = new CalendarService( AppInfo.Name ); if ( this.IsUsrSet ) { service.setUserCredentials( this.Usr, this.Psw ); service.Insert( new Uri( GCalURI ), entry ); } return; }
public void OAuth3LeggedAuthenticationTest() { Tracing.TraceMsg("Entering OAuth3LeggedAuthenticationTest"); CalendarService service = new CalendarService("OAuthTestcode"); OAuthParameters parameters = new OAuthParameters() { ConsumerKey = this.oAuthConsumerKey, ConsumerSecret = this.oAuthConsumerSecret, Token = this.oAuthToken, TokenSecret = this.oAuthTokenSecret, Scope = this.oAuthScope, SignatureMethod = this.oAuthSignatureMethod }; GOAuthRequestFactory requestFactory = new GOAuthRequestFactory("cl", "OAuthTestcode", parameters); service.RequestFactory = requestFactory; CalendarEntry calendar = new CalendarEntry(); calendar.Title.Text = "Test OAuth"; Uri postUri = new Uri("https://www.google.com/calendar/feeds/default/owncalendars/full"); CalendarEntry createdCalendar = (CalendarEntry)service.Insert(postUri, calendar); // delete the new entry createdCalendar.Delete(); }
public static void AddEvent(CalendarService service, string title, string contents, string location, DateTime startTime, DateTime endTime) { EventEntry entry = new EventEntry(); // Set the title and content of the entry. entry.Title.Text = title; entry.Content.Content = contents; // Set a location for the event. Where eventLocation = new Where(); eventLocation.ValueString = location; entry.Locations.Add(eventLocation); When eventTime = new When(startTime, endTime); entry.Times.Add(eventTime); Uri postUri = new Uri ("http://www.google.com/calendar/feeds/default/private/full"); // Send the request and receive the response: AtomEntry insertedEntry = service.Insert(postUri, entry); }
/// <summary> /// Add a local event to Google Calendar /// </summary> /// <param name="GGService">Google calendar service object</param> /// <param name="GGCalendar">GG calendar object</param> /// <param name="myGGItem">GGItem object to be added to GG calendar</param> /// <returns>Google event's ID</returns> private string AddGGEvent(CalendarService GGService, CalendarEntry GGCalendar, GGItem myGGItem) { // Create a event object EventEntry entry = new EventEntry(); // Use description as event title (necessary) entry.Title.Text = myGGItem.GetDescription(); // Use tag as event content (optional) entry.Content.Content = myGGItem.GetTag() + " | " + myGGItem.GetPath(); // Set event start and end time if (myGGItem.GetEndDate().CompareTo(GGItem.DEFAULT_ENDDATE) != 0) { // Specified endDate // Use endDate - 2hours as start time and endDate as end time When eventTime = new When(myGGItem.GetEndDate().AddHours(-2), myGGItem.GetEndDate()); entry.Times.Add(eventTime); } else { // Default endDate // Treat as tasks, set due date as 3 days later When eventTime = new When(DateTime.Today, DateTime.Today.AddDays(3)); entry.Times.Add(eventTime); } // Log(entry.Updated.ToLongDateString()); // Set email reminder: 15 minutes before end time Reminder GGReminder = new Reminder(); GGReminder.Minutes = 15; GGReminder.Method = Reminder.ReminderMethod.email; entry.Reminders.Add(GGReminder); // Create the event on Google Calendar Uri postUri = new Uri("https://www.google.com/calendar/feeds/" + GGCalendar.Id.AbsoluteUri.Substring(63) + "/private/full"); AtomEntry insertedEntry = GGService.Insert(postUri, entry); // Return the event's ID return insertedEntry.Id.AbsoluteUri; }
/// <summary> /// Create GG calendar /// </summary> /// <param name="GGService">Google calendar service object</param> /// <returns>created GG calendar</returns> private CalendarEntry CreateGGCalendar(CalendarService GGService) { // Create a new calendar object and specify details CalendarEntry calendar = new CalendarEntry(); calendar.Title.Text = GG_CALENDAR_TITLE; calendar.Summary.Text = GG_CALENDAR_SUMMARY; calendar.TimeZone = GG_CALENDAR_TIMEZONE; calendar.Hidden = GG_CALENDAR_HIDDEN; calendar.Color = GG_CALENDAR_COLOR; calendar.Location = new Where("", "", GG_CALENDAR_LOCATION); // Create on Google Calendar Uri postUri = new Uri(CALENDAR_QUERY_URL); CalendarEntry createdCalendar = (CalendarEntry)GGService.Insert(postUri, calendar); Log("Create calendar: " + createdCalendar.Title.Text + "\n"); // return created calendar return createdCalendar; }
public void googlecalendarSMSreminder(string sendstring) { CalendarService service = new CalendarService("exampleCo-exampleApp-1"); service.setUserCredentials(UserName.Text, Password.Text); EventEntry entry = new EventEntry(); // Set the title and content of the entry. entry.Title.Text = sendstring; entry.Content.Content = "Nadpis Test SMS."; // Set a location for the event. Where eventLocation = new Where(); eventLocation.ValueString = "Test sms"; entry.Locations.Add(eventLocation); When eventTime = new When(DateTime.Now.AddMinutes(3), DateTime.Now.AddHours(1)); entry.Times.Add(eventTime); //Add SMS Reminder Reminder fiftyMinReminder = new Reminder(); fiftyMinReminder.Minutes = 1; fiftyMinReminder.Method = Reminder.ReminderMethod.sms; entry.Reminders.Add(fiftyMinReminder); Uri postUri = new Uri("http://www.google.com/calendar/feeds/default/private/full"); // Send the request and receive the response: AtomEntry insertedEntry = service.Insert(postUri, entry); }
public void OAuth3LeggedAuthenticationTest() { Tracing.TraceMsg("Entering OAuth3LeggedAuthenticationTest"); CalendarService service = new CalendarService("OAuthTestcode"); GOAuthRequestFactory requestFactory = new GOAuthRequestFactory("cl", "OAuthTestcode"); requestFactory.ConsumerKey = this.oAuthConsumerKey; requestFactory.ConsumerSecret = this.oAuthConsumerSecret; requestFactory.Token = this.oAuthToken; requestFactory.TokenSecret = this.oAuthTokenSecret; service.RequestFactory = requestFactory; CalendarEntry calendar = new CalendarEntry(); calendar.Title.Text = "Test OAuth"; Uri postUri = new Uri("https://www.google.com/calendar/feeds/default/owncalendars/full"); CalendarEntry createdCalendar = (CalendarEntry)service.Insert(postUri, calendar); // delete the guy again createdCalendar.Delete(); }