/// <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); } }
/// <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(); }