Esempio n. 1
0
        protected override async void HandleCommand(IChatClient chatClient, CommandReceivedEventArgs eventArgs)
        {
            var    lookup = eventArgs?.Arguments?.ElementAtOrDefault(0);
            int    offset;
            string timezoneDisplay;
            bool   useTwentyFourHourTime = false;

            if (eventArgs?.Arguments?.Count == 0)
            {
                offset = 0;
                useTwentyFourHourTime = true;
                timezoneDisplay       = $"at UTC {offset:+#;-#;+0}";
            }
            else
            {
                bool isValidInteger = int.TryParse(lookup, out int chatUserOffset);
                if (isValidInteger && chatUserOffset < 18 && chatUserOffset > -18)
                {
                    useTwentyFourHourTime = true;
                    offset          = chatUserOffset;
                    timezoneDisplay = $"at UTC {offset:+#;-#;+0}";
                }
                else if (isValidInteger && (chatUserOffset > 18 || chatUserOffset < -18))
                {
                    chatClient.SendMessage(Messages.OUT_OF_RANGE);
                    return;
                }
                else
                {
                    var client = new HttpClient();

                    TimezoneLookupResult lookupResult =
                        await _timezoneLookup.GetTimezoneInfoAsync(client, lookup);

                    if (!lookupResult.Success)
                    {
                        chatClient.SendMessage(lookupResult.Message);
                        return;
                    }

                    offset          = lookupResult.Offset;
                    timezoneDisplay = $"in {lookupResult.TimezoneName}";
                }
            }

            DateTimeZone timeZone = DateTimeZone.ForOffset(Offset.FromHours(offset));

            List <Instant> streamTimes = Repository.List(DataItemPolicy <ScheduleEntity> .All()).Select(x => x.Instant).ToList();

            string message = $"Our usual schedule ({timezoneDisplay}) is: " + string.Join(", ", streamTimes.Select(x => GetTimeDisplay(x, timeZone, useTwentyFourHourTime)));

            chatClient.SendMessage(message);
        }
Esempio n. 2
0
        public TimezoneLookupResult GetOrInsertTimezone(
            string lookup, Func <TimezoneLookupResult> fallback)
        {
            var timezone = _repo.Single(TimezonePolicy.ByLookup(lookup));

            if (timezone == null)
            {
                TimezoneLookupResult timezoneLookupResult = fallback.Invoke();
                timezone = new TimezoneEntity
                {
                    LookupString = lookup,
                    Offset       = timezoneLookupResult.Offset,
                    TimezoneName = timezoneLookupResult.TimezoneName,
                };
                _repo.Create(timezone);
            }

            return(timezone.ToTimezoneLookupResult());
        }
Esempio n. 3
0
        public async Task <TimezoneLookupResult> GetTimezoneInfoAsync(HttpClient client, string lookup)
        {
            var result = new TimezoneLookupResult();

            var(latitude, longitude, success) =
                await GetLatitudeAndLongitude(client, lookup);

            if (success)
            {
                (result.Offset, result.TimezoneName) =
                    await GetTimezoneInfo(client, latitude, longitude);

                result.Success = true;
            }
            else
            {
                result.Success = false;
                result.Message = UNKNOWN_LOCATION;
            }

            return(result);
        }