public bool ProcessEsoGuildStoreSales(Action <EsoSale> onSaleFound, params EsoSaleFilter[] filters) { if (FilePath == null) { return(false); } // Set a default filter to not filter anything if (filters == null || filters.Length == 0) { filters = new EsoSaleFilter[1]; filters[0] = new EsoSaleFilter(); } // Set up our custom Lua listener for extracting sale data var listener = new MMLuaListener(); // Open the saved variables file for reading using (var stream = File.OpenRead(FilePath)) { // Lua parser stuff var charStream = new AntlrInputStream(stream); var lexer = new LuaLexer(charStream); var tokenStream = new CommonTokenStream(lexer); var parser = new LuaParser(tokenStream); listener.SaleFound += (sender, saleFoundArgs) => { // Make sure the sale matches at least one of the filters, then add it to the list var sale = saleFoundArgs.Sale; if (filters.Where(filter => string.IsNullOrEmpty(filter.GuildName) || filter.GuildName.Equals(sale.GuildName, StringComparison.CurrentCultureIgnoreCase)) .Any(filter => (filter.TimestampMinimum == null || sale.SaleTimestamp >= filter.TimestampMinimum) && (filter.TimestampMaximum == null || sale.SaleTimestamp <= filter.TimestampMaximum))) { onSaleFound(sale); } }; parser.AddParseListener(listener); // Run the Lua parser on the saved variables file parser.exp(); } return(true); }