private async void Model_AddedNew(object sender, Csla.Core.AddedNewEventArgs <FileReference> e)
        {
            if (IsAdding)
            {
                return;
            }

            IsAdding = true;
            var newItem = e.NewObject;
            var destinationDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            var fileName             = GenerateUniqueFileNameFor(destinationDirectory);

            PrepareToShowModal();
            var fullFileName = await DependencyService.Get <IPhotoPicker>().GetCopiedFilePath(destinationDirectory, fileName);

            if (fullFileName == null)
            {
                if (newItem != null)
                {
                    Model.Remove(newItem);
                }
                return;
            }
            newItem.FileName = fullFileName;
            var photoVM = new PhotoViewModel(newItem);
            await photoVM.InitializeAsync();

            PhotoViewModels.Add(photoVM);
            IsAdding = false;
        }
Exemple #2
0
        public Photos(FileReferenceList fileReferenceList)
        {
            IsAdding            = false;
            Model               = fileReferenceList;
            _choosePhotoCommand = new Command(ChoosePhoto);
            _deletePhotoCommand = new Command(async obj =>
            {
                var photoVM = (PhotoViewModel)obj;
                PhotoViewModels.Remove(photoVM);
                var fileRef = photoVM.FileReference;
                Model.Remove(fileRef);
                var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                var fullPath      = Path.Combine(documentsPath, fileRef.FileName);
                if (File.Exists(fullPath))
                {
                    await Task.Run(() => File.Delete(fullPath));
                }
            });

            Model.AddedNew += async(o, e) =>
            {
                if (IsAdding)
                {
                    return;
                }

                IsAdding = true;
                var newItem = e.NewObject;
                var destinationDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                var fileName             = GenerateUniqueFileNameFor(destinationDirectory);

                PrepareToShowModal();
                var fullFileName = await DependencyService.Get <IPhotoPicker>().GetCopiedFilePath(destinationDirectory, fileName);

                if (fullFileName == null)
                {
                    if (newItem != null)
                    {
                        Model.Remove(newItem);
                    }
                    return;
                }
                newItem.FileName = fullFileName;
                var photoVM = new PhotoViewModel(newItem);
                await photoVM.InitializeAsync();

                PhotoViewModels.Add(photoVM);
                IsAdding = false;
            };

            PhotoViewModels = new ObservableCollection <PhotoViewModel>();
        }
        protected override async Task <FileReferenceList> DoInitAsync()
        {
            var photoViewModels = Model.Select(_ => new PhotoViewModel(_)).ToList();
            var initTasks       = new List <Task>();

            foreach (var viewModel in photoViewModels)
            {
                PhotoViewModels.Add(viewModel);
                initTasks.Add(viewModel.InitializeAsync());
            }
            await Task.WhenAll(initTasks);

            return(Model);
        }
 public Photos(FileReferenceList fileReferenceList)
 {
     Model = fileReferenceList;
     _choosePhotoCommand = new Command(ChoosePhoto);
     _deletePhotoCommand = new Command(async obj =>
     {
         var photoVM = (PhotoViewModel)obj;
         PhotoViewModels.Remove(photoVM);
         var fileRef = photoVM.FileReference;
         Model.Remove(fileRef);
         var file = await FileSystem.Current.GetFileFromPathAsync(fileRef.FileName);
         await file.DeleteAsync();
     });
     PhotoViewModels = new ObservableCollection <PhotoViewModel>();
 }
        public Photos(FileReferenceList fileReferenceList)
        {
            IsAdding            = false;
            Model               = fileReferenceList;
            _choosePhotoCommand = new Command(ChoosePhoto);
            _deletePhotoCommand = new Command(obj =>
            {
                var photoVM = (PhotoViewModel)obj;
                PhotoViewModels.Remove(photoVM);
                var fileRef = photoVM.FileReference;
                Model.Remove(fileRef);
                var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                var fullPath      = Path.Combine(documentsPath, fileRef.FileName);
                if (File.Exists(fullPath))
                {
                    File.Delete(fullPath);
                }
            });

            PhotoViewModels = new ObservableCollection <PhotoViewModel>();
        }
        public PlaceViewModels GetPlace(int id)
        {
            var place = _context.Places
                        .Include(p => p.User)
                        .Include(p => p.Reviews)
                        .Include(p => p.Photos)
                        .FirstOrDefault(p => p.Id == id);

            if (place == null)
            {
                throw new Exception("Place does not found");
            }

            var placeModel = new PlaceViewModels()
            {
                Id          = place.Id,
                Title       = place.Title,
                Description = place.Description,
                UserId      = place.UserId,
                UserName    = place.User.UserName
            };

            var mainPhoto = place.Photos.FirstOrDefault(p => p.PlaceId == place.Id && p.IsMain);

            if (mainPhoto != null)
            {
                placeModel.MainPhotoPath = mainPhoto.FilePath;
            }

            if (place.Photos.Count > 0)
            {
                var photosList = new List <PhotoViewModels>();
                foreach (var photo in place.Photos)
                {
                    var photoItem = new PhotoViewModels()
                    {
                        Id         = photo.Id,
                        FileName   = photo.FileName,
                        FilePath   = photo.FilePath,
                        IsMain     = photo.IsMain,
                        UploadDate = photo.UploadDate,
                        PlaceId    = photo.PlaceId,
                        UserId     = photo.UserId,
                        UserName   = photo.User.UserName
                    };
                    photosList.Add(photoItem);
                }

                placeModel.Photos = photosList;
            }

            if (place.Reviews.Count() > 0)
            {
                var reviewsList = new List <ReviewViewModels>();
                foreach (var review in place.Reviews)
                {
                    var reviewItem = new ReviewViewModels()
                    {
                        Id       = review.Id,
                        Text     = review.Text,
                        Date     = review.Date,
                        Rating   = review.Rating,
                        UserId   = review.UserId,
                        UserName = review.User.UserName,
                        PlaceId  = review.PlaceId
                    };
                    reviewsList.Add(reviewItem);
                }

                placeModel.Reviews = reviewsList.OrderByDescending(r => r.Date).ToList();
                placeModel.Rating  = Math.Round(place.Reviews.Sum(r => r.Rating) / (double)place.Reviews.Count, 1);
            }
            else
            {
                placeModel.Rating = 0;
            }

            return(placeModel);
        }