Пример #1
0
        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);
        }