/// <summary>
        /// Idea is from here : https://msdn.microsoft.com/en-us/library/mt679037.aspx
        /// </summary>
        /// <param name="postedItem"></param>
        /// <returns></returns>
        public static PostedItemViewModel Convert(PostedItem postedItem, string userId = null)
        {
            object obj = (object)_usedOnlyForLocking;

            System.Threading.Monitor.Enter(obj);
            try
            {
                var viewModel = new PostedItemViewModel
                {
                    Title             = postedItem.Title,
                    Id                = postedItem.Id,
                    ApplicationUserId = postedItem.ApplicationUserId,
                    OpinionsTokenized = postedItem.OpinionsTokenized,
                    PhotoUrl          = postedItem.PhotoUrl,
                    VideoSourceUrl    = postedItem.VideoSourceUrl,
                    Slug              = postedItem.Slug,
                    Source            = postedItem.Source,
                    MetadataKeywords  = string.Join(",", postedItem.Tags.Select(t => t.Name)),
                    TagsTokenized     = postedItem.TagsTokenized,
                    TotalDislike      = postedItem.TotalDislike,
                    TotalLike         = postedItem.TotalLike,
                    Updated           = postedItem.Updated
                };

                UpdateIsLiked(viewModel, postedItem, userId);

                return(viewModel);
            }
            finally
            {
                System.Threading.Monitor.Exit(obj);
            }
        }
Beispiel #2
0
        private void UpdatePostedItem(PostedItem postedItem, string userId, Dictionary <string, int> output)
        {
            if (postedItem == null)
            {
                return;
            }

            //int totalLike = 0;
            //int totalDislike = 0;

            //for (int index = 0; index < postedItem.Opinions.Count(); index++)
            //{
            //    var opinionType = postedItem.Opinions.ElementAt(index).OpinionType;

            //    if (opinionType == OpinionType.NoOpinion)
            //        continue;

            //    if (opinionType == OpinionType.Like)
            //        totalLike++;
            //    else if (opinionType == OpinionType.Dislike)
            //        totalDislike++;
            //}

            var totalLike    = postedItem.Opinions.Count(o => o.OpinionType == OpinionType.Like);
            var totalDislike = postedItem.Opinions.Count(o => o.OpinionType == OpinionType.Dislike);

            string json = JsonConvert.SerializeObject(output);

            postedItem.TotalLike         = totalLike;
            postedItem.TotalDislike      = totalDislike;
            postedItem.OpinionsTokenized = json;
        }
Beispiel #3
0
 /// <summary>
 /// Delete a posted item aync.
 /// </summary>
 /// <param name="item">Item to delete</param>
 public async Task DeleteItemAsync(PostedItem item)
 {
     await Task.Run(() =>
     {
         item.Delete();
         m_LoggedInUser.ReFetch();
     });
 }
Beispiel #4
0
 /// <summary>
 /// If post is picture or video - import it imageURL.
 /// </summary>
 /// <param name="i_PostedItem">The post.</param>
 private void getPostImageURL(PostedItem i_PostedItem)
 {
     if (i_PostedItem is Video)
     {
         m_ImageURL = (i_PostedItem as Video).PictureURL;
     }
     else if (i_PostedItem is Photo)
     {
         m_ImageURL = (i_PostedItem as Photo).PictureNormalURL;
     }
 }
Beispiel #5
0
 private void addLikesForCurrentItem(PostedItem i_CurrentItem)
 {
     foreach (User user in i_CurrentItem.LikedBy)
     {
         if (UsersLikesCounts.ContainsKey(user))
         {
             UsersLikesCounts[user]++;
         }
         else if (user.Id != LoggedInUser.Id)
         {
             UsersLikesCounts.Add(user, 1);
         }
     }
 }
Beispiel #6
0
        public static bool IsLikedByLoggedInUser(this PostedItem i_PostedItem)
        {
            bool isLiked = false;

            foreach (User currentUser in i_PostedItem.LikedBy)
            {
                if (currentUser.Id == LoggedInUser.Instance.Id)
                {
                    isLiked = true;
                    break;
                }
            }

            return(isLiked);
        }
Beispiel #7
0
        public static ISelectedItem ConvertItemToSelectedItem(PostedItem i_PostedItem)
        {
            ISelectedItem selectedItemToReturn = null;

            if (i_PostedItem is Post)
            {
                selectedItemToReturn = new SelectedPost(i_PostedItem as Post);
            }
            else if (i_PostedItem is Photo)
            {
                selectedItemToReturn = new SelectedPhoto(i_PostedItem as Photo);
            }

            return(selectedItemToReturn);
        }
Beispiel #8
0
        private async Task <PostedItem> SavePostedItemToDb(AddPhotoViewModel addPhotoViewModel)
        {
            if (addPhotoViewModel == null)
            {
                return(null);
            }

            PostedItem postedItem = null;
            var        timeNow    = DateTime.UtcNow;

            //if we already have it in database
            if (addPhotoViewModel.PostedId != null)
            {
                postedItem = await _applicationDbContext.PostedItems.FirstOrDefaultAsync(p => p.Id == addPhotoViewModel.PostedId.Value);

                if (postedItem != null)
                {
                    postedItem.Title = addPhotoViewModel.Title;

                    postedItem.Tags.Clear();
                    await AddTagsToPostedItem(postedItem, addPhotoViewModel.Tags);

                    //If a new photo is uploaded lets remove the old one.
                    if (!String.IsNullOrEmpty(addPhotoViewModel.PhotoData) && postedItem.Photo != null)
                    {
                        _applicationDbContext.Photos.Remove(postedItem.Photo);
                    }
                }
            }
            else
            {
                postedItem = new PostedItem {
                    Title = addPhotoViewModel.Title, Inserted = timeNow, PostedItemType = PostedItemType.UserPosted
                };
                await AddTagsToPostedItem(postedItem, addPhotoViewModel.Tags);

                _applicationDbContext.PostedItems.Add(postedItem);
            }

            if (!String.IsNullOrEmpty(postedItem.Title))
            {
                postedItem.Slug = postedItem.Title.Trim().Replace(' ', '-').Replace('.', ' ').Replace('&', '_').TrimEnd();
            }

            postedItem.Updated = timeNow;

            return(postedItem);
        }
        private static void UpdateIsLiked(PostedItemViewModel postedItemViewModel, PostedItem postedItem, string userId = null)
        {
            if (string.IsNullOrEmpty(userId))
            {
                return;
            }

            if (!postedItem.Opinions.Any(o => o.ApplicationUser.Id == userId) || postedItem.Opinions.Any(o => o.ApplicationUser.Id == userId && o.OpinionType == OpinionType.NoOpinion))
            {
                postedItemViewModel.IsLiked = default(bool?);
            }
            else
            {
                postedItemViewModel.IsLiked = postedItem.Opinions.Any(o => o.ApplicationUser.Id == userId && o.OpinionType == OpinionType.Like);
            }
        }
        public void FindMostViralActivity()
        {
            if (ActivityCollection.Count == 0)
            {
                throw new Exception("No activities found");
            }
            PostedItem mostLikedPostedItem = ActivityCollection[0];

            foreach (PostedItem postedItem in ActivityCollection)
            {
                if (postedItem.LikedBy.Count > mostLikedPostedItem.LikedBy.Count)
                {
                    mostLikedPostedItem = postedItem;
                }
            }
            m_Activity = mostLikedPostedItem;
            Likes      = mostLikedPostedItem.LikedBy.Count;
        }
Beispiel #11
0
        private async Task AddTagsToPostedItem(PostedItem postedItem, string[] tags)
        {
            if (tags == null || tags.Length == 0)
            {
                return;
            }

            List <string> tagsList = new List <string>();

            foreach (var tagViewModel in tags)
            {
                var tag = await GetTagByName(tagViewModel);

                postedItem.Tags.Add(tag);
                tagsList.Add(string.Format("\"{0}\"", tagViewModel));
            }

            var tagsTokenized = String.Format("[{0}]", String.Join(",", tagsList));

            postedItem.TagsTokenized = tagsTokenized.ToString().TrimEnd();
        }
        public Poster Post(string i_TextOrFilePath, DateTime i_TimeToPost, Poster.ePostOptions i_PostOption)
        {
            Poster poster;

            createPosterByPostOption(i_TextOrFilePath, i_PostOption, out poster);
            if (poster != null)
            {
                if (i_TimeToPost < DateTime.Now)
                {
                    PostedItem postedItem = poster.Post();
                    if (postedItem is StatusProxy)
                    {
                        PostedStatuses.AddLast(postedItem as StatusProxy);
                    }
                }
                else
                {
                    poster.PostInSelectedTime(i_TimeToPost);
                }
            }

            return(poster);
        }
Beispiel #13
0
        /// <summary>
        /// Rate friend who's like\comment on user post.
        /// </summary>
        /// <param name="i_postedItem">A post to check the activity on.</param>
        private void ratePost(PostedItem i_postedItem)
        {
            foreach (User user in i_postedItem.LikedBy)
            {
                if (m_friendsRate.ContainsKey(user))
                {
                    UserRate update = m_friendsRate[user];
                    update.Likes++;
                    update.TotalCommon++;
                    m_friendsRate[user] = update;
                }
            }

            foreach (Comment comment in i_postedItem.Comments)
            {
                if (m_friendsRate.ContainsKey(comment.From))
                {
                    UserRate update = m_friendsRate[comment.From];
                    update.Comments++;
                    update.TotalCommon++;
                    m_friendsRate[comment.From] = update;
                }
            }
        }
Beispiel #14
0
        private void updateBestFriendList(PostedItem i_PostedItem)
        {
            // this method probably wont work,
            // because there are no permissions to get Likes and Comments of posted item.
            foreach (User friend in i_PostedItem.LikedBy)

            {
                UserWrapper result = BestFriendList.Find((i_UserWrapper) => friend.UserName == i_UserWrapper.User.UserName);
                if (result == null)
                {// user not found, so we make new one
                    BestFriendList.Add(new UserWrapper(friend)
                    {
                        TotalLikes = 1
                    });
                }
                else
                {
                    result.TotalLikes++;
                }
            }
            foreach (Comment comment in i_PostedItem.Comments)
            {
                UserWrapper result = BestFriendList.Find((i_UserWrapper) => comment.From == i_UserWrapper.User);
                if (result == null)
                {// user not found, so we make new one
                    BestFriendList.Add(new UserWrapper(comment.From)
                    {
                        TotalComments = 1
                    });
                }
                else
                {
                    result.TotalComments++;
                }
            }
        }
Beispiel #15
0
        private async Task <SaveImageWrapper> SavePhotos(AddPhotoViewModel addPhotoViewModel, PostedItem postedItem)
        {
            var saveImageWrapper = new SaveImageWrapper();

            if (addPhotoViewModel.StreamData == null)
            {
                return(saveImageWrapper);
            }

            var photoStreams = new List <Stream> {
                addPhotoViewModel.StreamData
            };

            var photoDimentionInfos = new List <PhotoDimensionInfo>()
            {
                new PhotoDimensionInfo {
                    Width = 450, Height = 450, IsOriginal = false, ReSizeAndCrop = true
                }
            };

            var addPhotoRequest = new AddPhotoRequest(photoStreams, photoDimentionInfos, postedItem.Slug);

            var results = await _photoService.AddPhotoAsync(addPhotoRequest);

            //If any error found during uploading process we will not add anything to database. (ATOMIC)
            if (results.NewlyAddedPhotoErrorInfos != null && results.NewlyAddedPhotoErrorInfos.Count == 0)
            {
                //2. Add photo objects to News Feed object
                if (results != null && results.NewlyAddedPhotoInfoDetails.Count > 0)
                {
                    foreach (var photo in results.NewlyAddedPhotoInfoDetails)
                    {
                        var newPhoto = new Photo
                        {
                            Name          = photo.AddedPhotoName,
                            FileExtention = photo.ImageFormat,
                            Width         = photo.Width,
                            Height        = photo.Height,
                            Inserted      = DateTime.UtcNow,
                            PhotoType     = PhotoType.PostedItem,
                            Container     = "photo"
                        };

                        _applicationDbContext.Photos.Add(newPhoto);

                        postedItem.Photo = newPhoto;
                    }
                }

                //5. Save them to database
                var saveResults = await _applicationDbContext.SaveChangesAsync();
            }
            else if (results.NewlyAddedPhotoErrorInfos.Count > 0)
            {
                saveImageWrapper.ErrorMessage = results.NewlyAddedPhotoErrorInfos[0].ErrorMessage;
            }

            //var response = new AddUserAvatarResponse();

            //6. Lets get the full path on the blob for the new photo
            var originalPhotoDetails = results.NewlyAddedPhotoInfoDetails.FirstOrDefault(p => p.IsOriginal);
            var photoName            = String.Format(ImageName_450x450_StringFormat, originalPhotoDetails.AddedPhotoName, postedItem.Slug, originalPhotoDetails.ImageFormat);

            var fullPhotoUrlOnAzureBlobServer = _photoService.GetFullPath(photoName);

            saveImageWrapper.Url = fullPhotoUrlOnAzureBlobServer;

            return(saveImageWrapper);
        }
Beispiel #16
0
 public ModifiedPost(PostedItem i_PostedItem) : base(i_PostedItem)
 {
     Caption = (i_PostedItem as Post).Caption;
 }
Beispiel #17
0
 public bool IsLikedBy(PostedItem i_PostedItem, User i_User)
 {
     return(i_PostedItem.LikedBy.Contains(i_User));
 }
Beispiel #18
0
 protected ModifiedPostedItem(PostedItem i_PostedItem)
 {
     m_PostedItem = i_PostedItem;
     Message      = i_PostedItem.Message;
 }
Beispiel #19
0
 public PostedItemScore(PostedItem i_PostedItem)
 {
     m_PostedItemScoreValue = 0;
     m_PostedItem           = i_PostedItem;
 }
Beispiel #20
0
 /// <summary>
 /// PostInformation constructor.
 /// </summary>
 /// <param name="i_PostedItem">Any posted item.</param>
 public PostInformation(PostedItem i_PostedItem)
 {
     m_Message = i_PostedItem.Message;
     getPostImageURL(i_PostedItem);
     importComments(i_PostedItem.Comments.ToList());
 }
Beispiel #21
0
 public void Like(PostedItem i_PostedItem)
 {
     i_PostedItem.Like();
 }
 private dynamic GetPostedItem(PostedItem postedItem)
 {
     return(new { Id = postedItem.Id, Tags = postedItem.Tags.Select(GetTag), Title = postedItem.Title, PhotoUrl = postedItem.PhotoUrl /*(postedItem.Photo)*/ });
 }
Beispiel #23
0
 public ModifiedPhoto(PostedItem i_PostedItem) : base(i_PostedItem)
 {
 }
Beispiel #24
0
 public void Unlike(PostedItem i_PostedItem)
 {
     i_PostedItem.Unlike();
 }