private string getMainPageInfo(Station destinationStation, bool isConnected) { ConsoleMsg("getMainPageInfo", MsgType.FunctionCall); var rv = ""; if (isConnected) { //http://ojp.nationalrail.co.uk/service/ldbboard/arr/NMP var url = string.Format(Properties.Settings.Default.URLMain, destinationStation.StationCode); rv = GetHtmlFromURL(url); } else { //Get latest Folder var diWpBase = GetLatestWebPagesFolder(); //Get latest arrivals page FileInfo lastWrittenArrivalFile = null; foreach (FileInfo fi in diWpBase.GetFiles()) { if (!fi.Name.EndsWith("_T=" + destinationStation.StationCode + ".html")) continue; if (lastWrittenArrivalFile == null) lastWrittenArrivalFile = fi; else { if (fi.LastWriteTime > lastWrittenArrivalFile.LastWriteTime) lastWrittenArrivalFile = fi; } } //Output file contents if (lastWrittenArrivalFile != null) { StreamReader sr = lastWrittenArrivalFile.OpenText(); rv = sr.ReadToEnd(); sr.Close(); } } return rv; }
private void SendClaimEmails() { ConsoleMsg("SendClaimEmails", MsgType.FunctionCall); //Create new Batch var newBatch = new EmailBatch { Created = DateTime.Today }; _db.EmailBatches.Add(newBatch); //Get Station Pairs var stationPairs = new List<StationPair>(); foreach (User user in _db.Users) { //Build suggested new SP var stationPair = new StationPair(); if (user.HomeStationId > user.DestinationStationId) { stationPair.Station1 = user.DestinationStation; stationPair.Station2 = user.HomeStation; } else { stationPair.Station1 = user.HomeStation; stationPair.Station2 = user.DestinationStation; } //Is it already in list? int spCount = (from sp in stationPairs where sp.Station1.Id == stationPair.Station1.Id && sp.Station2.Id == stationPair.Station2.Id select sp).ToList().Count; if (spCount == 0) stationPairs.Add(stationPair); } //Get delayed trains since last email var claimableDestinations = new List<Destination>(); List<Destination> destinationsNotEmailed = (from d in _db.Destinations where d.EmailBatchId == null select d).ToList(); foreach (Destination destinationNotEmailed in destinationsNotEmailed) { if (destinationNotEmailed.IsClaimable) claimableDestinations.Add(destinationNotEmailed); } //Each Station Pair var smtpClient = new SmtpClient(Properties.Settings.Default.SmtpClient) { Port = Properties.Settings.Default.SmtpPort, Credentials = new NetworkCredential(Properties.Settings.Default.SmtpUsername, Properties.Settings.Default.SmtpPassword), EnableSsl = true }; foreach (StationPair sp in stationPairs) { //Get Claimable trains for this pair var fromStation = new Station(); var claimableForStationPair = new List<Destination>(); foreach (Destination claimableDestination in claimableDestinations) { if (sp.Station1.Id == claimableDestination.StationId) fromStation = sp.Station2; if (sp.Station2.Id == claimableDestination.StationId) fromStation = sp.Station1; if (fromStation.Id == 0) continue; int fromStationCount = (from fs in claimableDestination.FromStations where fs.StationId == fromStation.Id select fs).ToList().Count; if (fromStationCount > 0) claimableForStationPair.Add(claimableDestination); } //Build email body var mm = new MailMessage { Subject = "Train Delays. Claimable: " + claimableForStationPair.Count, Body = "Travel between " + sp.Station1.StationName + " and " + sp.Station2.StationName + Environment.NewLine }; mm.Body += "Number of claimable trains: " + claimableForStationPair.Count + Environment.NewLine; foreach (Destination claimer in claimableForStationPair) { //Save data newBatch.Destinations.Add(claimer); //Get FromStation FromStation fsClaimer = (from fs in claimer.FromStations where fs.StationId == fromStation.Id select fs).FirstOrDefault(); if (fsClaimer == null) throw new Exception("Can't find FromStation"); string line = claimer.Journey.TrainOperator + ". "; line += claimer.MinutesDelay + " minutes delay. "; line += fsClaimer.ScheduledDeparture.ToString("ddd dd/MM/yy HH:mm") + " from " + fsClaimer.Station.StationName; //line += "Arrived at " + claimer.Station.StationName + " [" + claimer.ScheduledArrival.ToString("ddd dd/MM/yy HH:mm") + "]: " + claimer.MinutesDelay.ToString() + " Minutes late."; mm.Body += line + Environment.NewLine; } mm.From = new MailAddress("*****@*****.**"); mm.IsBodyHtml = false; //Send to relevant users List<User> users = (from u in _db.Users where (u.HomeStationId == sp.Station1.Id || u.HomeStationId == sp.Station2.Id) && (u.DestinationStationId == sp.Station1.Id || u.DestinationStationId == sp.Station2.Id) select u).ToList(); if (users.Count == 0) throw new Exception("No users found"); foreach (User recipient in users) { mm.To.Clear(); mm.To.Add(new MailAddress(recipient.EMail)); try { smtpClient.Send(mm); } catch (Exception ex) { ConsoleMsg(ex.Message, MsgType.Error); } _db.SaveChanges(); } } _db.SaveChanges(); }