Beispiel #1
0
        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;
        }
Beispiel #2
0
        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();
        }