Exemplo n.º 1
0
        public ImageProcessResult ProcessImage(FileStreamDto profileImage)
        {
            var retVal = new ImageProcessResult();

            ValidateExtension(profileImage.FileName);

            using (Image image = Image.FromStream(profileImage.Stream))
            {
                ValidateImageSize(image);

                //We know the image input will always be bigger than thumbnail
                retVal.ThumbnailImage = GetResizedImage(image, THUMBNAIL_RESOLUTION, THUMBNAIL_RESOLUTION);
                retVal.MediumImage = GetResizedImage(image, MEDIUM_RESOLUTION_WIDTH, MEDIUM_RESOLUTION_HEIGHT);

                if ((image.Width >= retVal.MediumImage.Width + 50 && image.Width >= FULL_RESOLUTION_WIDTH)
                    ||
                    (image.Height >= retVal.MediumImage.Height + 50 && image.Height >= FULL_RESOLUTION_HEIGHT))
                {
                    //the + 50 means don't create a full size image if it's barely bigger than a medium sized one

                    retVal.FullImage = GetResizedImage(image, FULL_RESOLUTION_WIDTH, FULL_RESOLUTION_HEIGHT);
                }
            }

            return retVal;
        }
Exemplo n.º 2
0
        public int UploadInterests(FileStreamDto fileStream)
        {
            int retVal;

            using (var sr = new StreamReader(fileStream.Stream))
            {
                try
                {
                    var csvData = new CSV(sr.ReadToEnd());

                    //skip the first row
                    var interestData = csvData
                        .Rows
                        .Skip(1)
                        .Where(x=> !string.IsNullOrWhiteSpace(x.Cells[0].Value))
                        .Select(
                        x =>
                        {
                            string interestName1 = x[0].Value;

                            if (string.IsNullOrWhiteSpace(interestName1)) throw new RulesException("Interest 1","Interest cannot be missing");

                            var interest = _interestRepository.GetByName(interestName1) ?? Create(interestName1, null);
                            var dto1 = new RelatedInterestListDto.RelatedInterestDto(interest.Id, null, interest.Name, interest.Slug);

                            string interestName2 = x[1].Value;

                            if (string.IsNullOrWhiteSpace(interestName2)) throw new RulesException("Interest 2", "Interest cannot be missing");

                            interest = _interestRepository.GetByName(interestName2) ?? Create(interestName2, null);
                            var dto2 = new RelatedInterestListDto.RelatedInterestDto(interest.Id, null, interest.Name, interest.Slug);

                            return new
                            {
                                Interest1 = dto1,
                                Interest2 = dto2,
                                Weight = int.Parse(x[2].Value)
                            };
                        })
                        .ToList();

                    retVal = interestData.Count;

                    foreach (var data in interestData)
                    {
                        CreateRelationships(
                            new RelatedInterestListDto

                            {
                                OriginalInterest = data.Interest1,
                                WeightedRelatedInterestDtos = new List<RelatedInterestListDto.WeightedRelatedInterestDto>
                                {
                                    new RelatedInterestListDto.WeightedRelatedInterestDto
                                    {
                                        Interest = data.Interest2,
                                        Weight = EnumExtensions.GetInterestRelationshipWeight(data.Weight)
                                    }
                                }
                            });
                    }
                }
                catch (FormatException)
                {
                    throw new RulesException("Weight", "Every row needs to have a proper weight");
                }
            }

            return retVal;
        }
Exemplo n.º 3
0
        public ActionResult SaveProfileImage(HttpPostedFileBase profileImage)
        {
            //http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx
            //model bound
            //TODO:put this into a viewmodel and check for is valid
            User user = _userTasks.GetUser(_principal.Identity.Name);
            if (profileImage == null)
            {
                ViewData.ModelState.AddModelError("Image", "You need to provide a file first... or don't. Have it your way.");
                RouteData.Values["action"] = "Index";
                return Index(_principal.Identity.Name);
            }
            else
            {
                try
                {
                    var fileStreamDto = new FileStreamDto(profileImage.InputStream, profileImage.FileName);
                    _userTasks.SaveProfileImage(user, fileStreamDto);
                }
                catch (RulesException rex)
                {
                    //TODO: Implement PRG pattern for post forms
                    //TODO: Log These exceptions in elmah
                    rex.AddModelStateErrors(ModelState);
                    RouteData.Values["action"] = "Index";
                    return Index(_principal.Identity.Name);
                }
                finally
                {
                    profileImage.InputStream.Dispose();
                }
            }

            return RedirectToAction("Index");
        }
Exemplo n.º 4
0
        public ActionResult SaveInterestImage(UserSaveInterestImageViewModel userSaveInterestImageViewModel)
        {
            User user = _userTasks.GetUser(_principal.Identity.Name);
            if (userSaveInterestImageViewModel.InterestImage == null) //TODO: use required/not-null attribute instead of checking for null
            {
                ViewData.ModelState.AddModelError("Image", "You need to provide a file first... or don't. Have it your way.");
                RouteData.Values["action"] = "Interests";
                return Interests(_principal.Identity.Name);
            }
            else
            {
                try
                {
                    var fileStreamDto = new FileStreamDto(userSaveInterestImageViewModel.InterestImage.InputStream, userSaveInterestImageViewModel.InterestImage.FileName);
                    _userTasks.PostImage(user, fileStreamDto, userSaveInterestImageViewModel.UserInterestId, userSaveInterestImageViewModel.ImageDescription);
                }
                catch (RulesException rex)
                {
                    //TODO: Implement PRG pattern for post forms
                    //TODO: Log These exceptions in elmah
                    rex.AddModelStateErrors(ModelState);
                    RouteData.Values["action"] = "Interests";
                    return Interests(_principal.Identity.Name);
                }
                finally
                {
                    userSaveInterestImageViewModel.InterestImage.InputStream.Dispose();
                }
            }

            return RedirectToAction("Interests");
        }
Exemplo n.º 5
0
        private void SaveImageForUser(FileStreamDto profileImage, string metaPrefix, Action<ImageFileNamesDto> afterProcessing)
        {
            if (afterProcessing == null) throw new ArgumentNullException("afterProcessing");

            //be very safe with image streams
            var exceptions = new List<Exception>();

            ImageProcessResult result = null;

            try
            {
                var newImageFileNames = new ImageFileNamesDto();

                result = _imageProcessor.ProcessImage(profileImage);
                bool fullFileExists = result.FullImage != null;

                var files = new List<FileToUpload>
                {
                    new FileToUpload(result.ThumbnailImage.Image, "thumb_" + profileImage.FileName, metaPrefix + "-" + "Thumb"),
                    new FileToUpload(result.MediumImage.Image, "med_" + profileImage.FileName, metaPrefix + "-" + "Medium")
                };

                if (fullFileExists)
                {
                    files.Add(new FileToUpload(result.FullImage.Image, "full_" + profileImage.FileName, metaPrefix + "-" + "Full"));
                }

                IList<string> filePaths = _fileUploadService.UploadFiles("Images/", files);

                newImageFileNames.ThumbFilename = filePaths[0];
                newImageFileNames.MediumFilename = filePaths[1];
                newImageFileNames.FullFilename = filePaths[fullFileExists ? 2 : 1];

                afterProcessing(newImageFileNames);
            }
            catch (RulesException)
            {
                throw;
            }
            catch (Exception ex)
            {
                exceptions.Add(ex);
            }
            finally
            {
                if (result != null)
                {
                    DisposeImageIfNotEmpty(result.ThumbnailImage, exceptions);
                    DisposeImageIfNotEmpty(result.MediumImage, exceptions);
                    DisposeImageIfNotEmpty(result.FullImage, exceptions);
                }
            }

            if (exceptions.Any())
            {
                throw new AggregateException("Error processing image", exceptions);
            }
        }
Exemplo n.º 6
0
        public void SaveProfileImage(User user, FileStreamDto profileImage)
        {
            ImageFileNamesDto originalImageNames = null;
            if (user.ProfileImage != null)
            {
                originalImageNames = GetImageFileNamesDto(user.ProfileImage);
            }

            SaveImageForUser(
                profileImage, user.Username + "-Profile-Image", imgFileNamesDto =>
                {
                    user.UpdateProfileImage(new ImageData(profileImage.FileName, imgFileNamesDto.ThumbFilename, imgFileNamesDto.MediumFilename, imgFileNamesDto.FullFilename));
                    if (originalImageNames != null)
                    {
                        DeleteImages(originalImageNames);
                    }
                });
        }
Exemplo n.º 7
0
        public void PostWebPage(User user, int userInterestId, string linkUrl)
        {
            UserInterest interest = user.Interests.First(x => x.Id == userInterestId);

            linkUrl = linkUrl.FormatWebAddress();
            string html = _webContentService.GetHtmlFromUrl(linkUrl);
            PageDetails details = _pageParsingService.GetDetails(html);

            string description = details.Description;

            var uri = new Uri(linkUrl);
            var domain = uri.GetLeftPart(UriPartial.Authority).Replace(uri.GetLeftPart(UriPartial.Scheme), "");

            var medium = new WebPage { LinkUrl = linkUrl, WebPageDomainName = domain, Title = details.Title, CreateDate = DateTime.UtcNow };
            var post = new Post { Description = description, CreateDate = DateTime.UtcNow, Medium = medium };

            //determine if image is available
            if (!string.IsNullOrWhiteSpace(details.ImageUrl))
            {
                byte[] data = _webContentService.GetDataFromUrl(details.ImageUrl);
                string fileName = Path.GetFileName(details.ImageUrl);
                using (var memoryStream = new MemoryStream(data))
                {
                    var fileStreamDto = new FileStreamDto(memoryStream, fileName);
                    SaveImageForUser(
                        fileStreamDto, user.Username + "-Interest-WebPage-Image-" + interest.Interest.Name, imgFileNamesDto =>
                                                                                                            medium.AddImage(
                                                                                                                new ImageData(fileName, imgFileNamesDto.ThumbFilename, imgFileNamesDto.MediumFilename, imgFileNamesDto.FullFilename)));
                }
            }

            user.AddPost(post, interest.Interest);
        }
Exemplo n.º 8
0
        public void PostVideo(User user, int userInterestId, string videoUrl)
        {
            UserInterest interest = user.Interests.First(x => x.Id == userInterestId);

            videoUrl = videoUrl.FormatWebAddress();
            string html = _webContentService.GetHtmlFromUrl(videoUrl);
            PageDetails details = _pageParsingService.GetDetails(html);

            string description = details.Description;

            if (string.IsNullOrWhiteSpace(details.VideoUrl))
            {
                throw new RulesException("Description", "Invalid video");
            }

            var medium = new Video { VideoUrl = details.VideoUrl, Title = details.Title, CreateDate = DateTime.UtcNow };

            var post = new Post { Medium = medium, Description = description, CreateDate = DateTime.UtcNow };

            //determine if image is available
            if (!string.IsNullOrWhiteSpace(details.ImageUrl))
            {
                byte[] data = _webContentService.GetDataFromUrl(details.ImageUrl);
                string fileName = Path.GetFileName(details.ImageUrl);
                using (var memoryStream = new MemoryStream(data))
                {
                    var fileStreamDto = new FileStreamDto(memoryStream, fileName);
                    SaveImageForUser(
                        fileStreamDto, user.Username + "-Interest-Video-Image-" + interest.Interest.Name, imgFileNamesDto =>
                                                                                                          medium.AddImage(
                                                                                                              new ImageData(fileName, imgFileNamesDto.ThumbFilename, imgFileNamesDto.MediumFilename, imgFileNamesDto.FullFilename)));
                }
            }

            user.AddPost(post, interest.Interest);
        }
Exemplo n.º 9
0
 public void PostImage(User user, FileStreamDto interestImage, int userInterestId, string description)
 {
     UserInterest interest = user.Interests.First(x => x.Id == userInterestId);
     SaveImageForUser(
         interestImage,
         user.Username + "-Interest-Image-" + interest.Interest.Name,
         imgFileNamesDto =>
         user.AddPost(
             new Post
             {
                 Description = description,
                 CreateDate = DateTime.UtcNow,
                 Medium =
                     new Image
                     {
                         ImageData =
                             new ImageData(
                             interestImage.FileName
                             , imgFileNamesDto.ThumbFilename
                             , imgFileNamesDto.MediumFilename
                             , imgFileNamesDto.FullFilename),
                         CreateDate = DateTime.UtcNow
                     }
             }, interest.Interest));
 }