コード例 #1
0
        public async Task <ActionResult> ManageEventData(string eventId, string clientTimeZone)
        {
            var context      = this.Request.GetOwinContext();
            var userObjectId = context.Authentication.User.GetUserObjectId();

            TZConvert.TryIanaToWindows(clientTimeZone, out string windowsTimeZoneId);
            var manageEventModel = new ManageEventViewModel()
            {
                EventId            = eventId,
                ClientTimeZone     = clientTimeZone,
                TeamDetails        = await this.GetTeamDetailsWhereBothBotAndUsersAreInAsync(userObjectId),
                TimeZoneList       = Common.GetTimeZoneList(),
                SelectedTimeZoneId = windowsTimeZoneId,
                EventTypesInfo     = new List <Tuple <EventTypes, string> >
                {
                    Tuple.Create(EventTypes.Birthday, Strings.BirthdayEventTypeName),
                    Tuple.Create(EventTypes.Anniversary, Strings.AnniversaryEventTypeName),
                    Tuple.Create(EventTypes.Holiday, Strings.HolidayEventTypeName),
                    Tuple.Create(EventTypes.Other, Strings.OtherEventTypeName),
                },
            };

            if (!string.IsNullOrWhiteSpace(eventId))
            {
                manageEventModel.CelebrationEvent = await this.eventDataProvider.GetEventByIdAsync(eventId, userObjectId);

                manageEventModel.SelectedTimeZoneId = manageEventModel.CelebrationEvent?.TimeZoneId ?? manageEventModel.SelectedTimeZoneId;
            }

            return(this.PartialView(manageEventModel));
        }
コード例 #2
0
        public void Can_Convert_IANA_System_Zones_To_Windows()
        {
            Skip.If(RuntimeInformation.IsOSPlatform(OSPlatform.Windows), "OS is Windows.");

            var errors = 0;
            IEnumerable <string> ianaZones = TimeZoneInfo.GetSystemTimeZones().Select(x => x.Id);

            string[] unmappable = { "Antarctica/Troll" };

            foreach (string ianaZone in ianaZones.Except(unmappable))
            {
                if (TZConvert.TryIanaToWindows(ianaZone, out string windowsZone))
                {
                    Assert.NotNull(windowsZone);
                    Assert.NotEqual(string.Empty, windowsZone);
                }
                else
                {
                    errors++;
                    _output.WriteLine($"Failed to convert \"{ianaZone}\"");
                }
            }

            Assert.Equal(0, errors);
        }
コード例 #3
0
        public NxtpRequestV1(string TimeZoneCode)
        {
            bool testMode = (TimeZoneCode ?? "").Trim().ToUpper() == "TEST";

            if (testMode)
            {
                this.TimeZoneCode = "TEST";
            }
            else
            {
                this.TimeZoneCode = TimeZoneCode;
            }
            string zone = (TimeZoneCode ?? "").Replace(" ", "").ToLower();

            foreach (var tz in TimeZoneInfo.GetSystemTimeZones())
            {
                string id = tz.Id;
                if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    TZConvert.TryIanaToWindows(tz.Id, out id);
                }
                if (testMode && id == "GMT Standard Time")
                {
                    this.ZoneInfo = tz;
                    break;
                }
                else if (zone == id.Replace(" ", "").ToLower())
                {
                    this.ZoneInfo = tz;
                    break;
                }
            }
        }
コード例 #4
0
        private async void EditButton_OnClicked(object sender, EventArgs e)
        {
            if (_viewModel.EditMode)
            {
                _viewModel.EditMode     = false;
                FullNameEntry.IsVisible = true;
                _viewModel.IsBusy       = true;
                // Save changes.
                UserInfo updatedUserInfo = await UserService.GetUserInfo(await UserService.GetUserEmail());

                updatedUserInfo.FirstName  = FirstNameEntry.Text;
                updatedUserInfo.MiddleName = MiddleNameEntry.Text;
                updatedUserInfo.LastName   = LastNameEntry.Text;
                // updatedUserInfo.UserEmail = UserEmailEntry.Text; Todo: Implement a change email process.
                TimeZoneInfo timeZoneInfo = (TimeZoneInfo)TimeZonePicker.SelectedItem;
                string       timeZoneName;
                if (TZConvert.TryIanaToWindows(timeZoneInfo.Id, out timeZoneName))
                {
                    updatedUserInfo.Timezone = timeZoneName;
                }
                else
                {
                    updatedUserInfo.Timezone = "Romance Standard Time";
                }

                if (!string.IsNullOrEmpty(_filePath))
                {
                    updatedUserInfo.ProfilePicture = await UserService.UploadProfilePicture(_filePath);
                }

                UserInfo resultUserInfo = await UserService.UpdateUserInfo(updatedUserInfo);

                _viewModel.IsBusy = false;
                EditButton.Text   = IconFont.AccountEdit;
                if (resultUserInfo != null)
                {
                    await Reload();
                }
            }
            else
            {
                EditButton.Text         = IconFont.ContentSave;
                FullNameEntry.IsVisible = false;
                _viewModel.EditMode     = true;
            }
        }
コード例 #5
0
        public async Task <ActionResult> ManageEventData(string userObjectId, string eventId, string clientTimeZone)
        {
            this.ViewBag.EmptyView = false;
            string windowsTimeZoneId;

            TZConvert.TryIanaToWindows(clientTimeZone, out windowsTimeZoneId);
            ManageEventModel manageEventModel = new ManageEventModel()
            {
                TeamDetails        = await this.GetTeamDetailsWhereBothBotAndUsersAreInAsync(userObjectId),
                TimeZoneList       = Common.GetTimeZoneList(),
                SelectedTimeZoneId = windowsTimeZoneId,
            };

            if (!string.IsNullOrWhiteSpace(eventId))
            {
                manageEventModel.CelebrationEvent = await this.eventHelper.GetEventByEventIdAsync(eventId, userObjectId);
            }

            return(this.PartialView("ManageEvents", manageEventModel));
        }
コード例 #6
0
        public void Can_Convert_Iana_Zones_To_Windows_Zones()
        {
            var errors = 0;
            ICollection <string> ianaZones = TZConvert.KnownIanaTimeZoneNames;

            string[] unmappable = { "Antarctica/Troll" };

            foreach (string ianaZone in ianaZones.Except(unmappable))
            {
                if (TZConvert.TryIanaToWindows(ianaZone, out string windowsZone))
                {
                    Assert.NotNull(windowsZone);
                    Assert.NotEqual(string.Empty, windowsZone);
                }
                else
                {
                    errors++;
                    _output.WriteLine($"Failed to convert \"{ianaZone}\"");
                }
            }

            Assert.Equal(0, errors);
        }
コード例 #7
0
        /// <summary>
        /// Gets the localized names for a given IANA or Windows time zone identifier.
        /// </summary>
        /// <param name="timeZoneId">An IANA or Windows time zone identifier.</param>
        /// <param name="languageCode">The IETF language tag (culture code) to use when localizing the display names.</param>
        /// <returns>A display name associated with this time zone.</returns>
        public static string GetDisplayNameForTimeZone(string timeZoneId, string languageCode)
        {
            string langKey = GetLanguageKey(languageCode, true);

            if (langKey == null)
            {
                throw new ArgumentException("Invalid Language Code", nameof(languageCode));
            }

            Dictionary <string, string> displayNames = Data.DisplayNames[langKey];

            if (displayNames.TryGetValue(timeZoneId, out string displayName))
            {
                return(displayName);
            }

            if (TZConvert.TryIanaToWindows(timeZoneId, out timeZoneId) && displayNames.TryGetValue(timeZoneId, out displayName))
            {
                return(displayName);
            }

            return(null);
        }
コード例 #8
0
        private async void EditButton_OnClicked(object sender, EventArgs e)
        {
            if (_myChildrenViewModel.EditMode)
            {
                _myChildrenViewModel.EditMode = false;
                _myChildrenViewModel.IsBusy   = true;

                // Save changes.
                Progeny updatedProgeny = new Progeny();
                updatedProgeny.Id       = _myChildrenViewModel.Progeny.Id;
                updatedProgeny.Name     = NameEntry.Text;
                updatedProgeny.NickName = DisplayNameEntry.Text;
                TimeZoneInfo timeZoneInfo = (TimeZoneInfo)TimeZonePicker.SelectedItem;
                string       timeZoneName;
                if (TZConvert.TryIanaToWindows(timeZoneInfo.Id, out timeZoneName))
                {
                    updatedProgeny.TimeZone = timeZoneName;
                }
                else
                {
                    updatedProgeny.TimeZone = "Romance Standard Time";
                }

                if (!string.IsNullOrEmpty(_filePath))
                {
                    updatedProgeny.PictureLink = await ProgenyService.UploadProgenyPicture(_filePath);
                }

                string[] admins           = AdministratorsEntry.Text.Split(',');
                bool     validAdminEmails = true;
                foreach (string str in admins)
                {
                    if (!str.Trim().IsValidEmail())
                    {
                        validAdminEmails = false;
                    }
                }

                if (validAdminEmails)
                {
                    updatedProgeny.Admins = AdministratorsEntry.Text;
                }

                DateTime newBirthDay = new DateTime(BirthdayDatePicker.Date.Year, BirthdayDatePicker.Date.Month, BirthdayDatePicker.Date.Day, BirthdayTimePicker.Time.Hours, BirthdayTimePicker.Time.Minutes, 0);
                updatedProgeny.BirthDay = newBirthDay;

                Progeny resultProgeny = await ProgenyService.UpdateProgeny(updatedProgeny);

                _myChildrenViewModel.IsBusy = false;
                EditButton.Text             = IconFont.AccountEdit;
                if (resultProgeny != null)
                {
                    MessageLabel.Text      = "Profile saved.";
                    MessageLabel.IsVisible = true;
                    await Reload();
                }
            }
            else
            {
                EditButton.Text = IconFont.ContentSave;

                _myChildrenViewModel.EditMode = true;
            }
        }
コード例 #9
0
        public virtual INxtpRequest Deserialize(Client Client, byte[] Data, int DataSize)
        {
            INxtpRequest rv = null;

            // Explicitly check for test mode
            bool testMode = false;

            if (Data != null && Data.Length >= 4 && DataSize == 4)
            {
                var text = (Encoding.ASCII.GetString(Data, 0, 4) ?? "").Trim().ToUpper();
                testMode = text == "TEST";
            }

            // Test mode always validates
            if (testMode)
            {
                foreach (var tz in TimeZoneInfo.GetSystemTimeZones())
                {
                    string id = tz.Id;
                    if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                    {
                        TZConvert.TryIanaToWindows(tz.Id, out id);
                    }
                    if (id == "GMT Standard Time")
                    {
                        this.TimeZoneCode = id.Replace(" ", "");
                        this.ZoneInfo     = tz;
                        return(this);
                    }
                }
            }

            // Must be at least one byte for version
            if (Data == null || Data.Length <= 0 || Data.Length < DataSize || Data[0] != Version)
            {
                return(rv);
            }

            // Must be at least three bytes excluding payload
            if (Data.Length < 3)
            {
                return(rv);
            }

            // Must be three bytes longer than payload
            int payloadLength = Data[1];
            int dataLength    = payloadLength + 3;

            if (DataSize < dataLength)
            {
                return(rv);
            }

            // Checksum for all bytes except last must match last byte
            byte cs = ChecksumSeed;

            for (int i = 0; i < dataLength - 1; i++)
            {
                cs ^= Data[i];
            }
            if (Data[dataLength - 1] != cs)
            {
                return(rv);
            }

            // Get timezone and see if it is in the current server list
            string zone = (Encoding.ASCII.GetString(Data, 2, payloadLength) ?? "").Replace(" ", "").Trim().ToLower();

            zone = TimezoneList.ResolveAlias(zone);
            if (string.IsNullOrWhiteSpace(zone))
            {
                return(rv);
            }
            TimeZoneInfo zoneMatched = null;
            var          zones       = TimeZoneInfo.GetSystemTimeZones();

            if (zone == "phoebustime")
            {
                var rnd = new Random();
                int i   = rnd.Next(0, zones.Count);
                this.TimeZoneCode = zone;
                this.ZoneInfo     = zones[i];
                return(this);
            }
            foreach (var tz in zones)
            {
                string id = tz.Id;
                if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    TZConvert.TryIanaToWindows(tz.Id, out id);
                }
                if (zone == id.Replace(" ", "").ToLower())
                {
                    zoneMatched = tz;
                    break;
                }
            }
            if (zoneMatched == null)
            {
                return(rv);
            }

            // Passed validation, set timezone
            this.Client       = Client;
            this.TimeZoneCode = zone;
            this.ZoneInfo     = zoneMatched;

            return(this);
        }
コード例 #10
0
        private async void SaveChildButton_OnClicked(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(NameEntry.Text) || string.IsNullOrEmpty(DisplayNameEntry.Text))
            {
                return;
            }

            _addChildViewModel.IsBusy   = true;
            _addChildViewModel.IsSaving = true;
            Progeny progeny = new Progeny();

            if (!string.IsNullOrEmpty(_filePath))
            {
                progeny.PictureLink = await ProgenyService.UploadProgenyPicture(_filePath);
            }
            progeny.Name     = NameEntry.Text;
            progeny.NickName = DisplayNameEntry.Text;
            progeny.BirthDay = new DateTime(BirthdayDatePicker.Date.Year, BirthdayDatePicker.Date.Month, BirthdayDatePicker.Date.Day, BirthdayTimePicker.Time.Hours, BirthdayTimePicker.Time.Minutes, 00);
            TimeZoneInfo timeZoneInfo = (TimeZoneInfo)TimeZonePicker.SelectedItem;
            string       timeZoneName;

            if (TZConvert.TryIanaToWindows(timeZoneInfo.Id, out timeZoneName))
            {
                progeny.TimeZone = timeZoneName;
            }
            else
            {
                progeny.TimeZone = "Romance Standard Time";
            }
            string userEmail = await UserService.GetUserEmail();

            progeny.Admins = userEmail;

            Progeny newProgeny = await ProgenyService.AddProgeny(progeny);

            _addChildViewModel.IsSaving = false;
            _addChildViewModel.IsBusy   = false;
            MessageLabel.IsVisible      = true;
            if (newProgeny.Id == 0)
            {
                var ci = CrossMultilingual.Current.CurrentCultureInfo;
                MessageLabel.Text            = resmgr.Value.GetString("ErrorChildNotSaved", ci);
                MessageLabel.BackgroundColor = Color.Red;
                SaveChildButton.IsEnabled    = true;
                CancelChildButton.IsEnabled  = true;
            }
            else
            {
                var ci = CrossMultilingual.Current.CurrentCultureInfo;
                MessageLabel.Text                 = resmgr.Value.GetString("ChildSaved", ci) + newProgeny.Id;
                MessageLabel.BackgroundColor      = Color.Green;
                SaveChildButton.IsVisible         = false;
                CancelChildButton.Text            = "Ok";
                CancelChildButton.BackgroundColor = Color.FromHex("#4caf50");
                CancelChildButton.IsEnabled       = true;

                // Update the progeny list.
                await ProgenyService.GetProgenyList(userEmail);

                await Shell.Current.Navigation.PopModalAsync();
            }
        }