Example #1
0
        public static string Name(this RoutineTaskTimeValue value)
        {
            switch (value)
            {
            default:
            case RoutineTaskTimeValue.Morning:
                return("Manhã");

            case RoutineTaskTimeValue.Afternoon:
                return("Tarde");

            case RoutineTaskTimeValue.Evening:
                return("Noite");
            }
        }
Example #2
0
        private async Task ConfigureScheduleAsync(Identity owner, RoutineTaskTimeValue time, CancellationToken cancellationToken)
        {
            Trace.WriteLine($"Start scheduling reminder for {owner} at {time}!");
            try
            {
                var routine = await _routineRepository.GetRoutineAsync(owner, false, cancellationToken);

                // Will send a message to itself, the next day only, reminding it to send a message with the routine for the given days and time for each client

                var currentTime = GetCurrentTime();

                var isBeforeMorning   = currentTime.Hour < 6;
                var isBeforeAfternoon = currentTime.Hour < 12;
                var isBeforeEvening   = currentTime.Hour < 18;

                var today = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 0, 0, 0);

                var nextMorningSchedule   = isBeforeMorning ? today.AddHours(6) : today.AddHours(6).AddDays(1);
                var nextAfternoonSchedule = isBeforeAfternoon ? today.AddHours(12) : today.AddHours(12).AddDays(1);
                var nextEveningSchedule   = isBeforeEvening ? today.AddHours(18) : today.AddHours(18).AddDays(1);

                var shouldScheduleAtMorning = time == RoutineTaskTimeValue.Morning &&
                                              routine.LastMorningReminder < nextMorningSchedule;
                var shouldScheduleAtAfternoon = time == RoutineTaskTimeValue.Afternoon &&
                                                routine.LastAfternoonReminder < nextAfternoonSchedule;
                var shouldScheduleAtEvening = time == RoutineTaskTimeValue.Evening &&
                                              routine.LastEveningReminder < nextEveningSchedule;

                if (shouldScheduleAtMorning || shouldScheduleAtAfternoon || shouldScheduleAtEvening)
                {
                    await
                    _delegation.DelegateAsync(Identity.Parse("*****@*****.**"),
                                              new[] { EnvelopeType.Message }, cancellationToken);

                    var identity = new Node(_application.Identifier, _application.Domain, null);
                    var schedule = new Message
                    {
                        Id      = Guid.NewGuid().ToString(),
                        To      = identity,
                        Content = new IdentityDocument(routine.Owner.ToString())
                    };

                    if (shouldScheduleAtMorning)
                    {
                        routine.LastMorningReminder = nextMorningSchedule;
                    }
                    if (shouldScheduleAtAfternoon)
                    {
                        routine.LastAfternoonReminder = nextAfternoonSchedule;
                    }
                    if (shouldScheduleAtEvening)
                    {
                        routine.LastEveningReminder = nextEveningSchedule;
                    }

                    switch (time)
                    {
                    case RoutineTaskTimeValue.Morning:
                        await _scheduler.ScheduleMessageAsync(schedule, nextMorningSchedule, cancellationToken);

                        break;

                    case RoutineTaskTimeValue.Afternoon:
                        await _scheduler.ScheduleMessageAsync(schedule, nextAfternoonSchedule, cancellationToken);

                        break;

                    case RoutineTaskTimeValue.Evening:
                        await _scheduler.ScheduleMessageAsync(schedule, nextEveningSchedule, cancellationToken);

                        break;
                    }

                    await _routineRepository.SetRoutineAsync(routine, cancellationToken);
                }
                Trace.WriteLine($"Finished scheduling reminder for {owner} at {time}!");
            }
            catch (Exception e)
            {
                Trace.WriteLine($"Failed scheduling reminder for {owner} at {time}: {e}");
                throw;
            }
        }
Example #3
0
        private void PrintTasksForDaysAndTime(StringBuilder text, RoutineTaskDaysValue days, RoutineTaskTimeValue time,
                                              IEnumerable <RoutineTask> tasks)
        {
            tasks = tasks.Where(
                task => (task.Days.GetValueOrDefault() == days || task.Days.GetValueOrDefault() == RoutineTaskDaysValue.EveryDay) &&
                task.Time.GetValueOrDefault() == time
                ).ToArray();
            if (!tasks.Any())
            {
                return;
            }

            text.AppendLine();
            text.AppendLine($"{days.Name()} {Settings.Phraseology.During} {time.Name().ToLower()}:");
            tasks.ForEach(task => text.AppendLine($"- {task.Name}"));
        }
Example #4
0
        protected async Task CreateANewTaskFromTaskNameAsync(
            string taskName,
            RoutineTaskDaysValue days = RoutineTaskDaysValue.EveryDay,
            RoutineTaskTimeValue time = RoutineTaskTimeValue.Morning,
            bool cancel = false)
        {
            // Inform task name

            await Tester.SendMessageAsync(taskName);

            var response = await Tester.ReceiveMessageAsync();

            response.ShouldNotBeNull();

            var select = response.Content as Select;
            var actual = select?.Text;

            var expected = Settings.Phraseology.WhichDaysShallThisTaskBePerformed;

            expected.ShouldNotBeNull();

            actual.ShouldBe(expected);

            // Inform task day

            await Tester.SendMessageAsync(new PlainText { Text = ((int)days).ToString() });

            response = await Tester.ReceiveMessageAsync();

            response.ShouldNotBeNull();

            select = response.Content as Select;
            actual = select?.Text;

            expected = Settings.Phraseology.WhichTimeShallThisTaskBePerformed;
            expected.ShouldNotBeNull();

            actual.ShouldBe(expected);

            // Inform task time

            await Tester.SendMessageAsync(new PlainText { Text = ((int)time).ToString() });

            response = await Tester.ReceiveMessageAsync();

            response.ShouldNotBeNull();

            select = response.Content as Select;
            actual = select?.Text;

            actual.ShouldStartWith(taskName);

            // Confirm the new task

            await Tester.SendMessageAsync(cancel?Settings.Commands.Cancel : Settings.Commands.Confirm);

            response = await Tester.ReceiveMessageAsync();

            response.ShouldNotBeNull();

            var document = response.Content as PlainText;

            actual = document?.Text;

            expected = cancel ? Settings.Phraseology.WheneverYouNeed : Settings.Phraseology.TheTaskWasRegistered;

            expected.ShouldNotBeNull();

            actual.ShouldBe(expected);
        }