Ejemplo n.º 1
0
        /// <summary>
        /// Send daily mail if not already send
        /// </summary>
        /// <param name="search">Current search</param>
        private void SendMailRecap(SearchSummary search)
        {
            var mail = new EMMail();
            var attempsCount = search.TodayAttempsCount;

            using (var db = new ApplicationDbContext())
            {
                var todayAds = db.Database.SqlQuery<Ad>("exec GetLastAdsFromSearch @search_id", new SqlParameter("search_id", search.Id)).ToList();

                var mailPattern = mail.GetPattern("LBC_RECAP_AD" + (search.IsPremiumUser ? "_FULL" : string.Empty)).CONTENT;
                var ads = new StringBuilder();

                var settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };

                foreach (
                    var formater in
                        todayAds.Select(
                            todayAd =>
                            new MailFormatter(
                                mailPattern,
                                JsonConvert.SerializeObject(todayAd, Formatting.Indented, settings))))
                {
                    ads.Append(formater.Formatted);
                }

                var sb = new StringBuilder();
                var sw = new StringWriter(sb);
                using (var writer = new JsonTextWriter(sw))
                {
                    writer.WriteStartObject();

                    writer.WritePropertyName("Title");
                    writer.WriteValue("Recap quotidien pour [" + search.KeyWord + "]");
                    writer.WritePropertyName("AdCount");
                    writer.WriteValue(todayAds.Count());
                    writer.WritePropertyName("AttemptCount");
                    writer.WriteValue(attempsCount);
                    writer.WritePropertyName("AttemptCadence");
                    writer.WriteValue(24 * 60 / (attempsCount <= 0 ? 1 : attempsCount));
                    writer.WritePropertyName("Id");
                    writer.WriteValue(search.Id);
                    writer.WritePropertyName("AdId");
                    writer.WriteValue(todayAds.FirstOrDefault() == null ? 0 : todayAds.FirstOrDefault().ID);
                    writer.WritePropertyName("Ads");
                    writer.WriteValue(ads.ToString());

                    writer.WriteEndObject();
                }

                Log.Info("Ajout d'un mail de récap à la file d'envoie [" + search.KeyWord + "]");

                mail.Add(
                    "[LBCAlerter] - Recap quotidien pour [" + search.KeyWord + "]",
                    search.UserName,
                    search.IsPremiumUser ? "LBC_RECAP" : "LBC_RECAP_FULL",
                    sb.ToString());

                db.Database.ExecuteSqlCommand("UPDATE Search set LastRecap = '" + DateTime.Now + "' WHERE Id = " + search.Id);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Create and launch new search job
        /// </summary>
        /// <param name="search">Current search</param>
        private void DoSearch(SearchSummary search)
        {
            var job = new SearchJob(search.Url, search.KeyWord, search.IsPremiumUser, search.AdsCount == 0)
                          {
                              FistTimeCount
                                  =
                                  5,
                              SaveMode
                                  = new EfSaver(search.Id)
                          };
            IAlerter alerter = new LogAlerter();
            job.Alerters.Add(alerter);
            alerter = new MailAlerter(search.UserName, "[LBCAlerter] - Nouvelle annonce pour [" + search.KeyWord + "]", search.IsPremiumUser);
            job.Alerters.Add(alerter);

            ICounter counter = new EfCounter(search.Id);
            job.Counter.Add(counter);
            Log.InfoFormat("Launch job {0}...", search.KeyWord);
            job.Launch();
        }