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