Example #1
0
        private User GetUserCached(JObject json, bool clearCache = false)
        {
            var userGuid = json["USERGUID"].Value <string>();
            var cacheKey = "user" + userGuid;

            if (clearCache)
            {
                CacheClient.Default.Remove(cacheKey);
            }

            return(CacheClient.Default.GetOrAdd <User>(cacheKey, CachePeriod.ForMinutes(5),
                                                       () =>
            {
                var user = UserService.GetUserByGuid(userGuid);
                if (user == null)
                {
                    return null;
                }

                user.Tags = FeedService.GetTags(user.FavoriteTagIds);
                user.FavoriteTagIds = user.Tags.Select(t => t.Id).ToList();

                if (user.FavoriteTagIds.Count > 0)
                {
                    var likedTagIds = FeedService.GetTagsThatUserLikes(user.Id);
                    user.FavoriteTagIds.AddRange(likedTagIds);
                    user.FavoriteTagIds = user.FavoriteTagIds.Distinct().Where(t => !user.IgnoredTagIds.Contains(t)).ToList();
                }

                user.IgnoredTags = FeedService.GetTags(user.IgnoredTagIds);
                user.MyFeeds = UserService.GetUserFeeds(user.Id);
                user.Folders = UserService.GetUserFolders(user.Id);
                return user;
            }));
        }
Example #2
0
 public User GetUserCached(string id, Action <User> afterLoad)
 {
     return(CacheClient.Default.GetOrAdd("user" + id, CachePeriod.ForMinutes(15),
                                         () =>
     {
         var user = GetUser(int.Parse(id));
         afterLoad?.Invoke(user);
         return user;
     }));
 }
Example #3
0
        public void Parse(int id)
        {
            var lFeed = FeedService.GetFeed(id);

            if (lFeed == null)
            {
                return;
            }

            var rFeed = FeedService.GetRemoteFeed(lFeed.Url);

            if (rFeed == null)
            {
                lFeed.Updated = DateTime.Now;
                FeedService.UpdateFeed(lFeed);
                return;
            }

            lFeed.Articles = FeedService.GetArticles(lFeed.Id);

            var lTags = CacheClient.Default.GetOrAdd <List <Tag> >
                            ("parsingLocalTags", CachePeriod.ForMinutes(15), () => FeedService.GetTagsByArticlesCount(100));

            foreach (var rArticle in rFeed.Articles)
            {
                rArticle.Tags = GetArticleTags(rArticle, lTags);
                try
                {
                    var lArticle = lFeed.Articles.Find(le => le.Name == rArticle.Name);
                    if (lArticle == null)
                    {
                        rArticle.FeedId     = lFeed.Id;
                        rArticle.LikesCount = Facebook.GetNumberOfLikes(rArticle.Url) +
                                              Twitter.GetNumberOfTweets(rArticle.Url) +
                                              LinkedIn.GetNumberOfShares(rArticle.Url) +
                                              Google.GetNumberOfShares(rArticle.Url) +
                                              Reddit.GetNumberOfVotes(rArticle.Url);

                        rArticle.Tags = GetArticleTags(rArticle, lTags);

                        rArticle.Id   = FeedService.InsertArticle(rArticle);
                        rArticle.Feed = lFeed;
                        LuceneSearch.AddUpdateIndex(rArticle);
                    }
                }
                catch (Exception ex)
                {
                    Mail.SendMeAnEmail("Error in insert article", "FeedId: " + lFeed.Id + " " + ex.ToString());
                }
            }

            //validation not to import single article more than once
            var lArticles = FeedService.GetArticles(lFeed.Id);

            foreach (var rArticle in rFeed.Articles)
            {
                var lArticle = lArticles.Find(le => le.Name == rArticle.Name);
                if (lArticle == null)
                {
                    //we have a problem
                    Mail.SendMeAnEmail("Parse feed multiple articles will be inserted", "Local feedId: " + lFeed.Id);
                }
            }
            lFeed.Updated = DateTime.Now;
            FeedService.UpdateFeed(lFeed);
        }
Example #4
0
        public void Parse(Feed lFeed)
        {
            try
            {
                lFeed.Updated = DateTime.Now;

                var rFeed = FeedService.GetRemoteFeed(lFeed);
                if (rFeed == null)
                {
                    return;
                }

                if (rFeed.Name != lFeed.Name || rFeed.Description != lFeed.Description || rFeed.SiteUrl != lFeed.SiteUrl)
                {
                    lFeed.Name        = rFeed.Name;
                    lFeed.Description = rFeed.Description;
                    lFeed.SiteUrl     = rFeed.SiteUrl;
                    FeedService.UpdateFeed(lFeed);
                }

                lFeed.Articles = FeedService.GetArticlesWithoutBody(lFeed.Id);

                var lTags = CacheClient.Default.GetOrAdd("parsingLocalTags",
                                                         CachePeriod.ForMinutes(15),
                                                         () => FeedService.GetTagsWithArticlesCountGreaterThan(0));

                var uniqueArticles = rFeed.Articles.GroupBy(a => a.Url).Select(a => a.First()).ToList();
                foreach (var rArticle in uniqueArticles)
                {
                    try
                    {
                        if (!lFeed.Public &&
                            (
                                rArticle.Published > DateTime.MinValue &&
                                rArticle.Published <= DateTime.Now.AddYears(-1))
                            )
                        {
                            continue;
                        }

                        var lArticle = lFeed.Articles.Find(le => le.Url == rArticle.Url);
                        if (lArticle != null)
                        {
                            if (lArticle.Name != rArticle.Name)
                            {
                                lArticle.Name = rArticle.Name;
                                lArticle.Body = rArticle.Body;
                                FeedService.UpdateArticle(lArticle);

                                if (!Debugger.IsAttached)
                                {
                                    LuceneSearch.AddUpdateIndex(lArticle);
                                    Redis.UpdateArticleName(lArticle);
                                }
                            }
                            rFeed.Articles.Remove(rArticle);
                            continue;
                        }

                        rArticle.FeedId = lFeed.Id;
                        if (rFeed.Public && rArticle.Published <= DateTime.Now.AddDays(-32))
                        {
                            rArticle.Published = DateTime.Now;
                        }

                        if (rArticle.FeedId == 5569 && rArticle.Name.ToLower().Contains("comment on"))
                        {
                            continue;
                        }

                        rArticle.Tags = GetArticleTags(rArticle, lTags, rFeed.Encoding);

                        if (lFeed.Public)
                        {
                            rArticle.LikesCount = Facebook.GetNumberOfLikes(rArticle.Url) +
                                                  Twitter.GetNumberOfTweets(rArticle.Url) +
                                                  LinkedIn.GetNumberOfShares(rArticle.Url) +
                                                  Google.GetNumberOfShares(rArticle.Url) +
                                                  Reddit.GetNumberOfVotes(rArticle.Url);
                        }

                        lock (_insertArticleLock)
                        {
                            rArticle.Id = FeedService.InsertArticle(rArticle);
                        }
                        rArticle.Feed = lFeed;

                        if (!Debugger.IsAttached)
                        {
                            LuceneSearch.AddUpdateIndex(rArticle);
                            Redis.AddArticle(rArticle);
                        }
                    }
                    catch (Exception ex)
                    {
                        Mail.SendMeAnEmail("Error in insert article", "FeedId: " + lFeed.Id + " " + ex.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Mail.SendMeAnEmail("Error in parse feed", +lFeed.Id + " " + ex.ToString());
            }
        }