示例#1
0
        public async Task Run()
        {
            string dateFormat = "yyyy-MM-dd";

            bool hasReturn = InStart.HasValue;

            Console.Error.WriteLine("Searching for {0} to {1} for {2} passengers.", From, String.Join(", ", To), Pax);
            Console.Error.WriteLine("Searching for dates {0} - {1} (search range {2} days)"
                                    , OutStart.ToString(dateFormat, CultureInfo.InvariantCulture)
                                    , hasReturn ? InStart.Value.ToString(dateFormat, CultureInfo.InvariantCulture) : "(No Return)"
                                    , DaysSearch);
            foreach (var to in To)
            {
                Console.Error.WriteLine("Searching to {0}...", to);
                var results = await Task.WhenAll(Enumerable.Range(0, DaysSearch).Select(offset => Search(to, offset)));

                List <FlightBaseClass> OutBound = new List <FlightBaseClass>();
                List <FlightBaseClass> InBound  = new List <FlightBaseClass>();
                foreach (var result in results)
                {
                    OutBound.AddRange(result.OutBound);
                    InBound.AddRange(result.InBound);
                }

                txtOut.WriteLine("Results to {0}", to);
                txtOut.WriteLine("***** Out-bound *****");
                PrintFlights(OutBound);
                txtOut.WriteLine("***** In-bound *****");
                PrintFlights(InBound);
                txtOut.WriteLine("----------------------------------------------");
            }

            if (TranslateCodes)
            {
                txtOut.WriteLine("");
                txtOut.WriteLine("Airline and Airport Codes");
                foreach (var entry in codes)
                {
                    txtOut.WriteLine("{0,-10}{1,-20}", entry.Key, entry.Value);
                }
            }
        }
示例#2
0
        private async Task <Result> Search(string to, int offsetDays)
        {
            SASQuery query = new SASQuery
            {
                Mode    = "STAR",
                OutDate = OutStart.AddDays(offsetDays),
                From    = From,
                To      = to,
                Adt     = Pax
            };

            bool hasReturn = InStart.HasValue;

            if (hasReturn)
            {
                query.InDate = InStart.Value.AddDays(offsetDays);
            }

            SearchResult result = null;

            try
            {
                result = await client.SearchAsync(query);
            }
            catch
            {
                Console.Error.WriteLine("Unexpected error in query.");
                return(new Result
                {
                    OutBound = new List <FlightBaseClass>(),
                    InBound = new List <FlightBaseClass>()
                });
            }
            if (result != null)
            {
                if (result.errors != null && result.errors.Any() && !HideErrors)
                {
                    Console.Error.WriteLine("flysas.com says: " + result.errors.First().errorMessage);
                }

                {
                    IEnumerable <FlightBaseClass> validOutbound = new List <FlightBaseClass>();
                    IEnumerable <FlightBaseClass> validInbound  = new List <FlightBaseClass>();
                    if (result.outboundFlights != null)
                    {
                        validOutbound = result.outboundFlights.Where(this.FilterFlight);
                    }
                    if (result.inboundFlights != null)
                    {
                        validInbound = result.inboundFlights.Where(this.FilterFlight);
                    }

                    return(new Result
                    {
                        OutBound = validOutbound,
                        InBound = validInbound
                    });
                }
            }
            return(new Result
            {
                OutBound = new List <FlightBaseClass>(),
                InBound = new List <FlightBaseClass>()
            });
        }