Ejemplo n.º 1
0
        static async Task <bool> StartClass(ClassSchedule c)
        {
            bool hasJoined = await JoinClass(c);

            if (!hasJoined)
            {
                throw new UnhandledAlertException();
            }
            DateTime joinDate = DateTime.Now;
            //wait for teacher to enter call
            bool TeacherIsInclass;

            for (; ;)
            {
                TeacherIsInclass = IsTeacherPresent(c.Teacher);
                if (!TeacherIsInclass && (DateTime.Now - joinDate).TotalMinutes > JoinWaitingTime)
                {
                    goto ILexit;
                }
                if (TeacherIsInclass)
                {
                    joinDate = DateTime.Now;
                    break;
                }
            }
            //when teacher has entered call, and when the teacher left and 1 min passed, leave call.
            for (; ;)
            {
                TeacherIsInclass = IsTeacherPresent(c.Teacher);
                if (!TeacherIsInclass && (DateTime.Now - joinDate).TotalMinutes > OvertimeWaitingTime)
                {
                    goto ILexit;
                }
                else if (TeacherIsInclass)
                {
                    joinDate = DateTime.Now;
                }
            }
ILexit:
            await hangUpcall();

            return(true);
        }
Ejemplo n.º 2
0
        static async Task <bool> JoinClass(ClassSchedule c)
        {
            bool found = false;

            await ClickCalendar();

            var calendarItems = driver.FindElementsByXPath(GetID("class", "node_modules--msteams-bridges-components-calendar-grid-dist-es-src-renderers-calendar-multi-day-renderer-calendar-multi-day-renderer__eventCard--3NBeS"));

            foreach (var element in calendarItems)
            {
                try
                {
                    element.Click();
                    await Task.Delay(10);

                    var         titleElement          = driver.FindElementByXPath(GetID("class", "node_modules--msteams-bridges-components-calendar-grid-dist-es-src-renderers-peek-renderer-peek-meeting-header-peek-meeting-header__subject--24TzV"));
                    var         dateElement           = driver.FindElementByXPath(GetID("data-tid", "calv2-peek-date"));
                    IWebElement SubjectChannelElement = null;
                    try
                    {
                        SubjectChannelElement = driver.FindElementByXPath(GetID("data-tid", "calv2-peek-channel"));
                    }
                    catch { }
                    var         TeacherNameElement = driver.FindElementByXPath(GetID("data-tid", "calv2-peek-organizer"));
                    IWebElement cancelledElement   = null;
                    try
                    {
                        cancelledElement = driver.FindElementByXPath(GetID("class", "node_modules--msteams-bridges-components-calendar-grid-dist-es-src-renderers-peek-renderer-peek-meeting-header-peek-meeting-header__cancelled--16Gar"));
                    }
                    catch { }
                    if (cancelledElement != null)
                    {
                        continue;
                    }
                    string title = titleElement.Text;
                    if (!dateElement.Text.Contains("-"))
                    {
                        throw new NotSupportedException();
                    }
                    string[] split = dateElement.Text.Split('-');
                    split[0] = split[0].TrimEnd(' ');
                    split[1] = split[1].TrimStart(' ');
                    DateTime start = DateTime.ParseExact(split[0], "MMM d, yyyy h:mm tt", CultureInfo.InvariantCulture);
                    DateTime end   = DateTime.ParseExact($"{start.ToString("MMM d, yyyy")} {split[1]}", "MMM d, yyyy h:mm tt", CultureInfo.InvariantCulture);
                    if (c.GetTuple() == (title, SubjectChannelElement == null ? "<Unknown>" : SubjectChannelElement.Text, TeacherNameElement.Text, start, end))
                    {
                        found = true;
                        break;
                    }
                }
                catch
                {
                }
                RightClick(calendarBtn);
                await Task.Delay(1000);
            }
            if (!found)
            {
                return(false);
            }
            await Task.Delay(10);

            var joinbtn = driver.FindElementByXPath(GetID("data-tid", "calv2-peek-join-button"));

            joinbtn.Click();
            await Task.Delay(2000);

            var toggles = driver.FindElementsByXPath(GetID("class", "style-layer"));

            foreach (var e in toggles)
            {
                var txt = e.GetAttribute("title");
                if (txt.Contains("Turn camera off") || txt.Contains("Mute microphone"))
                {
                    e.Click();
                }
                await Task.Delay(100);
            }
            await Task.Delay(500);

            var joinNow = driver.FindElementByXPath(GetID("class", "join-btn ts-btn inset-border ts-btn-primary"));

            joinNow.Click();
            await Task.Delay(5000);

again:
            try
            {
                var ShowParticipants = driver.FindElementByXPath(GetID("id", "roster-button"));
                ShowParticipants.Click();
            }
            catch
            {
                goto again;
            }
            return(true);
        }