Example #1
0
 public void Insert(object value, string key, CachePeriod cachePeriod)
 {
     Cache.Add(new CacheItem(key, value), new CacheItemPolicy
     {
         AbsoluteExpiration = new DateTimeOffset(cachePeriod.ToExpirationDate())
     });
 }
Example #2
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 #3
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 #4
0
        public void Insert(object value, string key, CachePeriod cachePeriod)
        {
            try
            {
                string fileName = CacheDirectory + "//" +
                                  key +
                                  cachePeriod.GetKey() +
                                  " " +
                                  cachePeriod.ToExpirationDateString();

                if (value is IList list && list.Count > ChunkSize)
                {
                    var tempList = new List <object>();
                    foreach (var t in list)
                    {
                        tempList.Add(t);
                    }

                    var counter = 0;
                    while (tempList.Count > 0)
                    {
                        counter++;
                        var chunk = new List <object>();

                        for (int i = 0; i < tempList.Count; i++)
                        {
                            if (i >= ChunkSize)
                            {
                                break;
                            }

                            var item = tempList[i];
                            chunk.Add(item);
                        }

                        foreach (var item in chunk)
                        {
                            tempList.Remove(item);
                        }


                        File.WriteAllText(fileName + FileExtension + counter, chunk.ToJson());
                    }
                }
                else
                {
                    File.WriteAllText(fileName + FileExtension, value.ToJson());
                }
            }
Example #5
0
 public T GetOrAdd <T>(string key, CachePeriod cachePeriod, Func <T> GetItemsFunc)
 {
     lock (objLock)
     {
         var items = GetFromFile <T>(key);
         if (IsDefault(items))
         {
             items = GetItemsFunc();
             if (!IsDefault(items))
             {
                 Insert(items, key, cachePeriod);
             }
         }
         return(items);
     }
 }
Example #6
0
        public bool IsProCached(CachePeriod cachePeriod, User user)
        {
            if (user == null)
            {
                return(false);
            }

            var payments = CacheClient.Default.GetOrAdd <List <Payment> >("paymentsfor" + user.Id, cachePeriod,
                                                                          () => GetPayments(user.Id));

            if (payments == null)
            {
                return(false);
            }

            return(GetProExpirationDateForPayments(payments) > DateTime.Now);
        }
Example #7
0
        public T GetOrAdd <T>(string key, CachePeriod cachePeriod, Func <T> getItemsFunc)
        {
            if (cachePeriod == null)
            {
                return(getItemsFunc());
            }

            var items = (T)Cache.Get(key);

            if (IsDefault(items))
            {
                items = getItemsFunc();
                if (!IsDefault(items))
                {
                    Insert(items, key, cachePeriod);
                }
            }
            return(items);
        }
Example #8
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 #9
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());
            }
        }