예제 #1
0
        private async void CardsView_OnItemAppearing(CardsView view, ItemAppearingEventArgs args)
        {
            _viewModel.IsZoomed = false;
            _viewModel.IsBusy   = true;

            if (_viewModel.CanLoadMore && _viewModel.CurrentIndex < 1)
            {
                await LoadNewer();
            }

            if (_viewModel.CanLoadMore && _viewModel.CurrentIndex > _viewModel.VideoItems.Count - 2)
            {
                await LoadOlder();
            }

            _viewModel.CurrentVideoViewModel = _viewModel.VideoItems[_viewModel.CurrentIndex];
            _viewModel.CurrentVideoId        = _viewModel.CurrentVideoViewModel.VideoId;
            await UpdateEditInfo();

            if (_viewModel.CurrentVideoViewModel.VideoTime != null && _viewModel.Progeny.BirthDay.HasValue)
            {
                DateTime picTimeBirthday = new DateTime(_viewModel.Progeny.BirthDay.Value.Ticks, DateTimeKind.Unspecified);

                PictureTime picTime = new PictureTime(picTimeBirthday, _viewModel.CurrentVideoViewModel.VideoTime, TimeZoneInfo.FindSystemTimeZoneById(_viewModel.Progeny.TimeZone));
                _viewModel.PicTimeValid = true;
                _viewModel.PicYears     = picTime.CalcYears();
                _viewModel.PicMonths    = picTime.CalcMonths();
                _viewModel.PicWeeks     = picTime.CalcWeeks();
                _viewModel.PicDays      = picTime.CalcDays();
                _viewModel.PicHours     = picTime.CalcHours();
                _viewModel.PicMinutes   = picTime.CalcMinutes();
            }

            LocationMap.Pins.Clear();
            if (!string.IsNullOrEmpty(_viewModel.CurrentVideoViewModel.Latitude) &&
                !string.IsNullOrEmpty(_viewModel.CurrentVideoViewModel.Longtitude))
            {
                LocationMap.IsVisible = true;
                bool latParsed = double.TryParse(_viewModel.CurrentVideoViewModel.Latitude, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out double lat);
                bool lonParsed = double.TryParse(_viewModel.CurrentVideoViewModel.Longtitude, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out double lon);
                if (latParsed && lonParsed)
                {
                    Position position = new Position(lat, lon);
                    Pin      pin      = new Pin();
                    pin.Position = position;
                    pin.Label    = _viewModel.CurrentVideoViewModel.Location;
                    pin.Type     = PinType.SavedPin;
                    LocationMap.Pins.Add(pin);
                    LocationMap.MoveToRegion(MapSpan.FromCenterAndRadius(position, Distance.FromKilometers(2)));
                }
            }
            else
            {
                LocationMap.IsVisible = false;
            }
            _viewModel.IsBusy = false;
        }
예제 #2
0
        public async Task <IActionResult> Index(int id = 0)
        {
            int    childId      = id;
            string userEmail    = HttpContext.User.FindFirst("email")?.Value ?? _defaultUser;
            string userTimeZone = HttpContext.User.FindFirst("timezone")?.Value ?? Constants.DefaultTimezone;

            if (string.IsNullOrEmpty(userTimeZone))
            {
                userTimeZone = Constants.DefaultTimezone;
            }
            UserInfo userinfo = await _progenyHttpClient.GetUserInfo(userEmail);

            if (User.Identity.IsAuthenticated)
            {
                if (childId == 0 && userinfo.ViewChild > 0)
                {
                    _progId = userinfo.ViewChild;
                }
            }
            else
            {
                _progId = Constants.DefaultChildId;
            }

            Progeny progeny = await _progenyHttpClient.GetProgeny(_progId);

            if (progeny.Name == "401")
            {
                var returnUrl = $"{Request.Scheme}://{Request.Host}{Request.PathBase}";
                return(RedirectToAction("CheckOut", "Account", new { returnUrl }));
            }
            List <UserAccess> accessList = await _progenyHttpClient.GetProgenyAccessList(_progId);

            int userAccessLevel = (int)AccessLevel.Public;

            if (accessList.Count != 0)
            {
                UserAccess userAccess = accessList.SingleOrDefault(u => u.UserId.ToUpper() == userEmail.ToUpper());
                if (userAccess != null)
                {
                    userAccessLevel = userAccess.AccessLevel;
                }
            }

            if (progeny.IsInAdminList(userEmail))
            {
                userAccessLevel = (int)AccessLevel.Private;
            }

            if (progeny.BirthDay.HasValue)
            {
                progeny.BirthDay = DateTime.SpecifyKind(progeny.BirthDay.Value, DateTimeKind.Unspecified);
            }

            HomeFeedViewModel feedModel = new HomeFeedViewModel();

            feedModel.UserAccessLevel = (int)AccessLevel.Public;
            if (accessList.Count != 0)
            {
                UserAccess userAccess = accessList.SingleOrDefault(u => u.UserId.ToUpper() == userEmail.ToUpper());
                if (userAccess != null)
                {
                    feedModel.UserAccessLevel = userAccess.AccessLevel;
                }
                else
                {
                    ViewBag.OriginalProgeny = progeny;
                    progeny = await _progenyHttpClient.GetProgeny(Constants.DefaultChildId);
                }
            }
            if (progeny.IsInAdminList(userEmail))
            {
                feedModel.UserAccessLevel = (int)AccessLevel.Private;
            }

            BirthTime progBirthTime;

            if (!String.IsNullOrEmpty(progeny.NickName) && progeny.BirthDay.HasValue && feedModel.UserAccessLevel < (int)AccessLevel.Public)
            {
                progBirthTime = new BirthTime(progeny.BirthDay.Value,
                                              TimeZoneInfo.FindSystemTimeZoneById(progeny.TimeZone));
            }
            else
            {
                progBirthTime = new BirthTime(new DateTime(2018, 02, 18, 18, 02, 00), TimeZoneInfo.FindSystemTimeZoneById(progeny.TimeZone));
            }

            feedModel.CurrentTime      = progBirthTime.CurrentTime;
            feedModel.Years            = progBirthTime.CalcYears();
            feedModel.Months           = progBirthTime.CalcMonths();
            feedModel.Weeks            = progBirthTime.CalcWeeks();
            feedModel.Days             = progBirthTime.CalcDays();
            feedModel.Hours            = progBirthTime.CalcHours();
            feedModel.Minutes          = progBirthTime.CalcMinutes();
            feedModel.NextBirthday     = progBirthTime.CalcNextBirthday();
            feedModel.MinutesMileStone = progBirthTime.CalcMileStoneMinutes();
            feedModel.HoursMileStone   = progBirthTime.CalcMileStoneHours();
            feedModel.DaysMileStone    = progBirthTime.CalcMileStoneDays();
            feedModel.WeeksMileStone   = progBirthTime.CalcMileStoneWeeks();


            Picture tempPicture = new Picture();

            tempPicture.ProgenyId      = 0;
            tempPicture.Progeny        = progeny;
            tempPicture.AccessLevel    = (int)AccessLevel.Public;
            tempPicture.PictureLink600 = $"https://{Request.Host}{Request.PathBase}" + "/photodb/0/default_temp.jpg";
            tempPicture.ProgenyId      = progeny.Id;
            tempPicture.PictureTime    = new DateTime(2018, 9, 1, 12, 00, 00);

            Picture displayPicture = tempPicture;

            if (feedModel.UserAccessLevel < (int)AccessLevel.Public)
            {
                displayPicture = await _mediaHttpClient.GetRandomPicture(progeny.Id, feedModel.UserAccessLevel, userTimeZone);
            }
            PictureTime picTime = new PictureTime(new DateTime(2018, 02, 18, 20, 18, 00), new DateTime(2018, 02, 18, 20, 18, 00), TimeZoneInfo.FindSystemTimeZoneById(progeny.TimeZone));

            if (feedModel.UserAccessLevel == (int)AccessLevel.Public || displayPicture == null)
            {
                displayPicture = await _mediaHttpClient.GetRandomPicture(Constants.DefaultChildId, feedModel.UserAccessLevel, userTimeZone);

                if (!displayPicture.PictureLink600.StartsWith("https://"))
                {
                    displayPicture.PictureLink600 = _imageStore.UriFor(displayPicture.PictureLink600);
                }

                feedModel.ImageLink600 = displayPicture.PictureLink600;
                feedModel.ImageId      = displayPicture.PictureId;
                picTime                = new PictureTime(new DateTime(2018, 02, 18, 20, 18, 00), displayPicture.PictureTime, TimeZoneInfo.FindSystemTimeZoneById(progeny.TimeZone));
                feedModel.Tags         = displayPicture.Tags;
                feedModel.Location     = displayPicture.Location;
                feedModel.PicTimeValid = false;
            }
            else
            {
                if (!displayPicture.PictureLink600.StartsWith("https://"))
                {
                    displayPicture.PictureLink600 = _imageStore.UriFor(displayPicture.PictureLink600);
                }

                feedModel.ImageLink600 = displayPicture.PictureLink600;
                feedModel.ImageId      = displayPicture.PictureId;
                if (displayPicture.PictureTime != null && progeny.BirthDay.HasValue)
                {
                    picTime = new PictureTime(progeny.BirthDay.Value,
                                              displayPicture.PictureTime,
                                              TimeZoneInfo.FindSystemTimeZoneById(progeny.TimeZone));
                    feedModel.PicTimeValid = true;
                }

                feedModel.Tags     = displayPicture.Tags;
                feedModel.Location = displayPicture.Location;
            }
            feedModel.PicTime    = picTime.PictureDateTime;
            feedModel.PicYears   = picTime.CalcYears();
            feedModel.PicMonths  = picTime.CalcMonths();
            feedModel.PicWeeks   = picTime.CalcWeeks();
            feedModel.PicDays    = picTime.CalcDays();
            feedModel.PicHours   = picTime.CalcHours();
            feedModel.PicMinutes = picTime.CalcMinutes();
            feedModel.Progeny    = progeny;
            feedModel.EventsList = new List <CalendarItem>();
            feedModel.EventsList = await _progenyHttpClient.GetUpcomingEvents(_progId, userAccessLevel);

            foreach (CalendarItem eventItem in feedModel.EventsList)
            {
                if (eventItem.StartTime.HasValue && eventItem.EndTime.HasValue)
                {
                    eventItem.StartTime = TimeZoneInfo.ConvertTimeFromUtc(eventItem.StartTime.Value, TimeZoneInfo.FindSystemTimeZoneById(userinfo.Timezone));
                    eventItem.EndTime   = TimeZoneInfo.ConvertTimeFromUtc(eventItem.EndTime.Value, TimeZoneInfo.FindSystemTimeZoneById(userinfo.Timezone));
                }
            }

            feedModel.LatestPosts = new TimeLineViewModel();
            feedModel.LatestPosts.TimeLineItems = new List <TimeLineItem>();
            feedModel.LatestPosts.TimeLineItems = await _progenyHttpClient.GetProgenyLatestPosts(_progId, userAccessLevel);

            if (feedModel.LatestPosts.TimeLineItems.Any())
            {
                feedModel.LatestPosts.TimeLineItems = feedModel.LatestPosts.TimeLineItems.OrderByDescending(t => t.ProgenyTime).Take(5).ToList();
            }

            feedModel.YearAgoPosts = new TimeLineViewModel();
            feedModel.YearAgoPosts.TimeLineItems = new List <TimeLineItem>();
            feedModel.YearAgoPosts.TimeLineItems = await _progenyHttpClient.GetProgenyYearAgo(_progId, userAccessLevel);

            if (feedModel.YearAgoPosts.TimeLineItems.Any())
            {
                feedModel.YearAgoPosts.TimeLineItems = feedModel.YearAgoPosts.TimeLineItems.OrderByDescending(t => t.ProgenyTime).ToList();
            }

            return(View(feedModel));
        }
예제 #3
0
        public async Task <IActionResult> Video(int id, int childId = 0, string tagFilter = "", int sortBy = 1)
        {
            _progId = childId;
            string userEmail    = HttpContext.User.FindFirst("email")?.Value ?? _defaultUser;
            string userTimeZone = HttpContext.User.FindFirst("timezone")?.Value ?? Constants.DefaultTimezone;

            if (string.IsNullOrEmpty(userTimeZone))
            {
                userTimeZone = Constants.DefaultTimezone;
            }
            UserInfo userinfo = await _progenyHttpClient.GetUserInfo(userEmail);

            if (childId == 0 && userinfo.ViewChild > 0)
            {
                _progId = userinfo.ViewChild;
            }

            Progeny progeny = await _progenyHttpClient.GetProgeny(_progId);

            List <UserAccess> accessList = await _progenyHttpClient.GetProgenyAccessList(_progId);

            int userAccessLevel = (int)AccessLevel.Public;

            if (accessList.Count != 0)
            {
                UserAccess userAccess = accessList.SingleOrDefault(u => u.UserId.ToUpper() == userEmail.ToUpper());
                if (userAccess != null)
                {
                    userAccessLevel = userAccess.AccessLevel;
                }
            }

            if (progeny.IsInAdminList(userEmail))
            {
                _userIsProgenyAdmin = true;
                userAccessLevel     = (int)AccessLevel.Private;
            }

            VideoViewModel video = await _mediaHttpClient.GetVideoViewModel(id, userAccessLevel, sortBy, userinfo.Timezone);

            VideoViewModel model = new VideoViewModel();

            model.VideoId     = video.VideoId;
            model.VideoType   = video.VideoType;
            model.VideoTime   = video.VideoTime;
            model.ProgenyId   = video.ProgenyId;
            model.Progeny     = progeny;
            model.Owners      = video.Owners;
            model.VideoLink   = video.VideoLink;
            model.ThumbLink   = video.ThumbLink;
            model.AccessLevel = video.AccessLevel;
            model.Author      = video.Author;
            model.AccessLevelListEn[video.AccessLevel].Selected = true;
            model.AccessLevelListDa[video.AccessLevel].Selected = true;
            model.AccessLevelListDe[video.AccessLevel].Selected = true;
            model.CommentThreadNumber = video.CommentThreadNumber;
            model.Tags          = video.Tags;
            model.TagsList      = video.TagsList;
            model.Location      = video.Location;
            model.Latitude      = video.Latitude;
            model.Longtitude    = video.Longtitude;
            model.Altitude      = video.Altitude;
            model.VideoNumber   = video.VideoNumber;
            model.VideoCount    = video.VideoCount;
            model.PrevVideo     = video.PrevVideo;
            model.NextVideo     = video.NextVideo;
            model.CommentsList  = video.CommentsList;
            model.CommentsCount = video.CommentsList?.Count ?? 0;
            model.TagFilter     = tagFilter;
            model.SortBy        = sortBy;
            model.UserId        = HttpContext.User.FindFirst("sub")?.Value ?? _defaultUser;
            model.IsAdmin       = _userIsProgenyAdmin;
            if (video.Duration != null)
            {
                model.DurationHours   = video.Duration.Value.Hours.ToString();
                model.DurationMinutes = video.Duration.Value.Minutes.ToString();
                model.DurationSeconds = video.Duration.Value.Seconds.ToString();
            }
            if (model.VideoTime != null && progeny.BirthDay.HasValue)
            {
                PictureTime picTime = new PictureTime(progeny.BirthDay.Value,
                                                      TimeZoneInfo.ConvertTimeToUtc(model.VideoTime.Value, TimeZoneInfo.FindSystemTimeZoneById(userTimeZone)),
                                                      TimeZoneInfo.FindSystemTimeZoneById(progeny.TimeZone));
                model.VidTimeValid = true;
                model.VidTime      = model.VideoTime.Value.ToString("dd MMMM yyyy HH:mm"); // Todo: Replace string format with global constant or user defined value
                model.VidYears     = picTime.CalcYears();
                model.VidMonths    = picTime.CalcMonths();
                model.VidWeeks     = picTime.CalcWeeks();
                model.VidDays      = picTime.CalcDays();
                model.VidHours     = picTime.CalcHours();
                model.VidMinutes   = picTime.CalcMinutes();
            }
            else
            {
                model.VidTimeValid = false;
                model.VidTime      = "";
            }
            if (model.CommentsCount > 0)
            {
                foreach (Comment cmnt in model.CommentsList)
                {
                    UserInfo cmntAuthor = await _progenyHttpClient.GetUserInfoByUserId(cmnt.Author);

                    string authorImg  = cmntAuthor?.ProfilePicture ?? "";
                    string authorName = "";
                    if (!String.IsNullOrEmpty(authorImg))
                    {
                        if (!authorImg.ToLower().StartsWith("http"))
                        {
                            authorImg = _imageStore.UriFor(authorImg, "profiles");
                        }
                    }
                    else
                    {
                        authorImg = "/photodb/profile.jpg";
                    }
                    cmnt.AuthorImage = authorImg;

                    if (!String.IsNullOrEmpty(cmntAuthor.FirstName))
                    {
                        authorName = cmntAuthor.FirstName;
                    }
                    if (!String.IsNullOrEmpty(cmntAuthor.MiddleName))
                    {
                        authorName = authorName + " " + cmntAuthor.MiddleName;
                    }
                    if (!String.IsNullOrEmpty(cmntAuthor.LastName))
                    {
                        authorName = authorName + " " + cmntAuthor.LastName;
                    }

                    authorName = authorName.Trim();
                    if (String.IsNullOrEmpty(authorName))
                    {
                        authorName = cmntAuthor.UserName;
                        if (String.IsNullOrEmpty(authorName))
                        {
                            authorName = cmnt.DisplayName;
                        }
                    }

                    cmnt.DisplayName = authorName;
                }
            }
            if (model.IsAdmin)
            {
                model.ProgenyLocations = new List <Location>();
                model.ProgenyLocations = await _progenyHttpClient.GetProgenyLocations(model.ProgenyId, userAccessLevel);

                model.LocationsList = new List <SelectListItem>();
                if (model.ProgenyLocations.Any())
                {
                    foreach (Location loc in model.ProgenyLocations)
                    {
                        SelectListItem selectListItem = new SelectListItem();
                        selectListItem.Text  = loc.Name;
                        selectListItem.Value = loc.LocationId.ToString();
                        model.LocationsList.Add(selectListItem);
                    }
                }
            }

            return(View(model));
        }
예제 #4
0
        private async Task UpdateProgenyData()
        {
            AgeInfoStackLayout.IsVisible       = false;
            RandomPictureStackLayout.IsVisible = false;
            _viewModel.CurrentTime             = DateTime.Now.ToString(CultureInfo.InvariantCulture);
            BirthTime progBirthTime;

            if (!String.IsNullOrEmpty(_viewModel.Progeny.NickName) && _viewModel.Progeny.BirthDay.HasValue && _viewModel.UserAccessLevel < 5)
            {
                progBirthTime = new BirthTime(_viewModel.Progeny.BirthDay.Value,
                                              TimeZoneInfo.FindSystemTimeZoneById(_viewModel.Progeny.TimeZone));
            }
            else
            {
                progBirthTime = new BirthTime(new DateTime(2018, 02, 18, 18, 02, 00), TimeZoneInfo.FindSystemTimeZoneById(_viewModel.Progeny.TimeZone));
            }

            _viewModel.CurrentTime      = progBirthTime.CurrentTime;
            _viewModel.Years            = progBirthTime.CalcYears();
            _viewModel.Months           = progBirthTime.CalcMonths();
            _viewModel.Weeks            = progBirthTime.CalcWeeks();
            _viewModel.Days             = progBirthTime.CalcDays();
            _viewModel.Hours            = progBirthTime.CalcHours();
            _viewModel.Minutes          = progBirthTime.CalcMinutes();
            _viewModel.NextBirthday     = progBirthTime.CalcNextBirthday();
            _viewModel.MinutesMileStone = progBirthTime.CalcMileStoneMinutes();
            _viewModel.HoursMileStone   = progBirthTime.CalcMileStoneHours();
            _viewModel.DaysMileStone    = progBirthTime.CalcMileStoneDays();
            _viewModel.WeeksMileStone   = progBirthTime.CalcMileStoneWeeks();

            Picture tempPicture = OfflineDefaultData.DefaultPicture;

            Picture displayPicture = tempPicture;

            if (_viewModel.UserAccessLevel < 5 && _viewModel.Online)
            {
                displayPicture = await ProgenyService.GetRandomPicture(_viewModel.Progeny.Id, _viewModel.UserAccessLevel, _viewModel.UserInfo.Timezone);
            }
            _viewModel.ImageLink600 = displayPicture.PictureLink600;
            _viewModel.ImageLink    = displayPicture.PictureLink1200;
            _viewModel.ImageId      = displayPicture.PictureId;
            PictureTime picTime = new PictureTime(new DateTime(2018, 02, 18, 20, 18, 00), new DateTime(2018, 02, 18, 20, 18, 00), TimeZoneInfo.FindSystemTimeZoneById(_viewModel.Progeny.TimeZone));

            if (displayPicture.PictureTime != null && _viewModel.Progeny.BirthDay.HasValue)
            {
                DateTime picTimeBirthday = new DateTime(_viewModel.Progeny.BirthDay.Value.Ticks, DateTimeKind.Unspecified);

                picTime = new PictureTime(picTimeBirthday, displayPicture.PictureTime, TimeZoneInfo.FindSystemTimeZoneById(_viewModel.Progeny.TimeZone));
                _viewModel.PicTimeValid = true;
            }

            _viewModel.Tags                    = displayPicture.Tags;
            _viewModel.Location                = displayPicture.Location;
            _viewModel.PicTime                 = picTime.PictureDateTime;
            _viewModel.PicYears                = picTime.CalcYears();
            _viewModel.PicMonths               = picTime.CalcMonths();
            _viewModel.PicWeeks                = picTime.CalcWeeks();
            _viewModel.PicDays                 = picTime.CalcDays();
            _viewModel.PicHours                = picTime.CalcHours();
            _viewModel.PicMinutes              = picTime.CalcMinutes();
            AgeInfoStackLayout.IsVisible       = true;
            RandomPictureStackLayout.IsVisible = true;
        }