private void ExecuteMeetingSuggestionsQuery(AvailabilityQueryResult result) { AvailabilityQuery.MeetingSuggestionsTracer.TraceDebug((long)this.GetHashCode(), "{0}: Entering AvailabilityQuery.ExecuteMeetingSuggestionsQuery()", new object[] { TraceContext.Get() }); base.RequestLogger.AppendToLog <int>("suggest", 1); try { MeetingSuggester meetingSuggester = new MeetingSuggester(); meetingSuggester.SetOptionsFromSuggestionsViewOptions(this.desiredSuggestionsView, base.ClientContext.TimeZone); List <AttendeeData> list = new List <AttendeeData>(this.mailboxArray.Length); List <int>[] array = new List <int> [this.mailboxArray.Length]; int num = 0; for (int i = 0; i < this.freeBusyQueryArray.Length; i++) { MailboxData mailboxData = this.mailboxArray[i]; FreeBusyQuery freeBusyQuery = this.freeBusyQueryArray[i]; List <int> list2 = new List <int>(); switch (freeBusyQuery.AttendeeKind) { case AttendeeKind.Individual: case AttendeeKind.Unknown: this.AddAttendeeDataToList(mailboxData, freeBusyQuery, list); list2.Add(num); num++; break; case AttendeeKind.Group: if (freeBusyQuery.GroupMembersForSuggestions != null) { foreach (FreeBusyQuery freeBusyQuery2 in freeBusyQuery.GroupMembersForSuggestions) { this.AddAttendeeDataToList(mailboxData, freeBusyQuery2, list); list2.Add(num); num++; } } else { this.AddAttendeeDataToList(mailboxData, freeBusyQuery, list); list2.Add(num); num++; } break; } array[i] = list2; } AttendeeData[] attendees = list.ToArray(); Duration detailedSuggestionsWindow = this.desiredSuggestionsView.DetailedSuggestionsWindow; result.DailyMeetingSuggestions = meetingSuggester.GetSuggestionsByDateRange(new ExDateTime(base.ClientContext.TimeZone, detailedSuggestionsWindow.StartTime), new ExDateTime(base.ClientContext.TimeZone, detailedSuggestionsWindow.EndTime), base.ClientContext.TimeZone, this.desiredSuggestionsView.MeetingDurationInMinutes, attendees); foreach (SuggestionDayResult suggestionDayResult in result.DailyMeetingSuggestions) { foreach (Suggestion suggestion in suggestionDayResult.SuggestionArray) { AttendeeConflictData[] array2 = new AttendeeConflictData[this.mailboxArray.Length]; for (int m = 0; m < this.freeBusyQueryArray.Length; m++) { FreeBusyQuery freeBusyQuery3 = this.freeBusyQueryArray[m]; List <int> list3 = array[m]; switch (freeBusyQuery3.AttendeeKind) { case AttendeeKind.Individual: { int num2 = list3[0]; array2[m] = suggestion.AttendeeConflictDataArray[num2]; break; } case AttendeeKind.Group: if (freeBusyQuery3.GroupMembersForSuggestions != null) { int num3 = 0; int num4 = 0; int num5 = 0; foreach (int num6 in list3) { IndividualAttendeeConflictData individualAttendeeConflictData = (IndividualAttendeeConflictData)suggestion.AttendeeConflictDataArray[num6]; if (individualAttendeeConflictData.IsMissingFreeBusyData) { num4++; } else if (individualAttendeeConflictData.BusyType == BusyType.Free) { num5++; } else { num3++; } } array2[m] = GroupAttendeeConflictData.Create(list3.Count, num3, num5, num4); } else { array2[m] = TooBigGroupAttendeeConflictData.Create(); } break; case AttendeeKind.Unknown: array2[m] = UnknownAttendeeConflictData.Create(); break; } } suggestion.AttendeeConflictDataArray = array2; } } } catch (LocalizedException ex) { ErrorHandler.SetErrorCodeIfNecessary(ex, ErrorConstants.MeetingSuggestionGenerationFailed); result.MeetingSuggestionsException = ex; } AvailabilityQuery.MeetingSuggestionsTracer.TraceDebug((long)this.GetHashCode(), "{0}: Leaving AvailabilityQuery.ExecuteMeetingSuggestionsQuery()", new object[] { TraceContext.Get() }); }
// Token: 0x0600310C RID: 12556 RVA: 0x0012096C File Offset: 0x0011EB6C public static void RenderSuggestions(TextWriter output, Suggestion[] meetingSuggestions, MailboxData[] mailboxDataArray, SchedulingRecipientInfo[] schedulingRecipientInfos, UserContext userContext) { ExTraceGlobals.CalendarCallTracer.TraceDebug(0L, "SchedulingTabRenderingUtilities.RenderSuggestions"); UserOptions userOptions = UserContextManager.GetUserContext().UserOptions; foreach (Suggestion suggestion in meetingSuggestions) { int[] array = new int[suggestion.AvailableRoomsCount]; int num = 0; int num2 = suggestion.RequiredAttendeeCount - suggestion.RequiredAttendeeConflictCount; int num3 = suggestion.OptionalAttendeeCount - suggestion.OptionalAttendeeConflictCount; StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); StringBuilder stringBuilder3 = new StringBuilder(); StringBuilder stringBuilder4 = new StringBuilder(); int j = 0; while (j < mailboxDataArray.Length) { AttendeeConflictData attendeeConflictData = suggestion.AttendeeConflictDataArray[j]; MeetingAttendeeType meetingAttendeeType = MeetingAttendeeType.Required; StringBuilder stringBuilder5 = null; string value = string.Empty; if (attendeeConflictData is IndividualAttendeeConflictData) { IndividualAttendeeConflictData individualAttendeeConflictData = (IndividualAttendeeConflictData)attendeeConflictData; if (individualAttendeeConflictData.Attendee.AttendeeType == MeetingAttendeeType.Room && !individualAttendeeConflictData.AttendeeHasConflict) { array[num++] = j; } else { if (individualAttendeeConflictData.AttendeeHasConflict) { meetingAttendeeType = individualAttendeeConflictData.Attendee.AttendeeType; value = schedulingRecipientInfos[j].DisplayName; goto IL_1F5; } if (individualAttendeeConflictData.IsMissingFreeBusyData) { stringBuilder5 = stringBuilder4; value = schedulingRecipientInfos[j].DisplayName; goto IL_1F5; } } } else { if (attendeeConflictData is UnknownAttendeeConflictData) { stringBuilder5 = stringBuilder4; value = schedulingRecipientInfos[j].DisplayName; goto IL_1F5; } if (attendeeConflictData is TooBigGroupAttendeeConflictData) { stringBuilder5 = stringBuilder4; value = schedulingRecipientInfos[j].DisplayName; goto IL_1F5; } if (attendeeConflictData is GroupAttendeeConflictData) { GroupAttendeeConflictData groupAttendeeConflictData = (GroupAttendeeConflictData)attendeeConflictData; if (0 < groupAttendeeConflictData.NumberOfMembersWithNoData) { if (0 < stringBuilder4.Length) { stringBuilder4.Append(", "); } stringBuilder4.AppendFormat(LocalizedStrings.GetNonEncoded(-1170293090), schedulingRecipientInfos[j].DisplayName, groupAttendeeConflictData.NumberOfMembersWithNoData); } if (groupAttendeeConflictData.NumberOfMembersWithConflict != 0) { MailboxData mailboxData = mailboxDataArray[j]; meetingAttendeeType = mailboxData.AttendeeType; value = string.Format(LocalizedStrings.GetNonEncoded(-1505134519), schedulingRecipientInfos[j].DisplayName, groupAttendeeConflictData.NumberOfMembersWithConflict, groupAttendeeConflictData.NumberOfMembers); goto IL_1F5; } } } IL_24B: j++; continue; IL_1F5: if (stringBuilder5 == null) { switch (meetingAttendeeType) { case MeetingAttendeeType.Organizer: case MeetingAttendeeType.Required: stringBuilder5 = stringBuilder; break; case MeetingAttendeeType.Optional: stringBuilder5 = stringBuilder2; break; case MeetingAttendeeType.Room: case MeetingAttendeeType.Resource: stringBuilder5 = stringBuilder3; break; } } if (0 < stringBuilder5.Length) { stringBuilder5.Append(", "); } stringBuilder5.Append(value); goto IL_24B; } output.Write("<div class=\"sug\" st="); output.Write(suggestion.MeetingTime.TimeOfDay.TotalMinutes); output.Write(" title=\""); if (0 < suggestion.RequiredAttendeeConflictCount || 0 < suggestion.OptionalAttendeeConflictCount || 0 < suggestion.ResourceAttendeeConflictCount) { output.Write(LocalizedStrings.GetHtmlEncoded(-1917590199)); if (0 < stringBuilder.Length) { output.Write("\n"); output.Write(LocalizedStrings.GetHtmlEncoded(-1709254790)); output.Write(" "); Utilities.HtmlEncode(stringBuilder.ToString(), output); } if (0 < stringBuilder2.Length) { output.Write("\n"); output.Write(LocalizedStrings.GetHtmlEncoded(-98673561)); output.Write(" "); Utilities.HtmlEncode(stringBuilder2.ToString(), output); } if (0 < stringBuilder3.Length) { output.Write("\n"); output.Write(LocalizedStrings.GetHtmlEncoded(-294537986)); output.Write(" "); Utilities.HtmlEncode(stringBuilder3.ToString(), output); } if (0 < stringBuilder4.Length) { output.Write("\n"); output.Write(LocalizedStrings.GetHtmlEncoded(608956012)); output.Write(" "); Utilities.HtmlEncode(stringBuilder4.ToString(), output); } } output.Write("\">"); output.Write("<div class=\""); output.Write(SchedulingTabRenderingUtilities.SuggestionQualityStyles[(int)suggestion.SuggestionQuality]); output.Write("\"></div><div class=\"suggestDetail\">"); output.Write("<div class=\"when\"><span>"); output.Write(suggestion.MeetingTime.ToString(userOptions.TimeFormat)); if (0 < suggestion.RoomCount) { output.Write(" - "); output.Write((suggestion.RoomCount == 1) ? LocalizedStrings.GetHtmlEncoded(-1595764264) : LocalizedStrings.GetHtmlEncoded(-1962164027), suggestion.AvailableRoomsCount); } output.Write("</span></div>"); output.Write("<div class=\"atndcnt\">"); if (0 < suggestion.RequiredAttendeeCount) { output.Write("<span nowrap>"); userContext.RenderThemeImage(output, ThemeFileId.RequiredAttendee); output.Write(LocalizedStrings.GetHtmlEncoded(1026164821), num2, suggestion.RequiredAttendeeCount); output.Write("</span>"); } if (0 < suggestion.OptionalAttendeeCount) { output.Write(" <span nowrap>"); userContext.RenderThemeImage(output, ThemeFileId.OptionalAttendee); output.Write(LocalizedStrings.GetHtmlEncoded(1026164821), num3, suggestion.OptionalAttendeeCount); output.Write("</span>"); } output.Write("</div>"); if (0 < suggestion.AvailableRoomsCount) { output.Write("<div id=rooms style=\"display:none\">"); foreach (int num4 in array) { output.Write("<div nowrap rm=\""); Utilities.HtmlEncode(schedulingRecipientInfos[num4].ID, output); output.Write("\">"); Utilities.HtmlEncode(schedulingRecipientInfos[num4].DisplayName, output); output.Write("</div>"); } output.Write("</div>"); } output.Write("</div></div>"); } }