Example #1
0
        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>");
            }
        }