Esempio n. 1
0
        public static async Task Main(string[] args)
        {
            try
            {
                Regex.CacheSize = 100;

                OutputDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "..", "..", "..", "..", "..", "Presets");

                ParseArguments(args);

                //Console.WriteLine($"{nameof(ForceDownload)}: {ForceDownload}");

                if (!Directory.Exists(OutputDirectory))
                {
                    Directory.CreateDirectory(OutputDirectory);
                }

                logger.Info($"Directory for output: \"{Path.GetFullPath(OutputDirectory)}\"");
                logger.Info($"Version of preset file: {PresetVersion}");

                Console.WriteLine($"Directory for output: \"{Path.GetFullPath(OutputDirectory)}\"");
                Console.WriteLine($"Version of preset file: {PresetVersion}");
                Console.WriteLine();

                WikiTextTableContainer tableContainer = null;

                if (!File.Exists("wiki_basic_info.json") || ForceDownload)
                {
                    logger.Trace("start download of basic wiki building info");

                    var provider       = new WikiTextProvider();
                    var providerResult = await provider.GetWikiTextAsync();

                    var tableParser = new WikiTextTableParser();
                    tableContainer = tableParser.GetTables(providerResult.WikiText);

                    logger.Trace("save basic wiki building info");
                    SerializationHelper.SaveToFile(tableContainer, "wiki_basic_info.json", prettyPrint: true);
                }
                else
                {
                    logger.Trace("load basic wiki building info");
                    tableContainer = SerializationHelper.LoadFromFile <WikiTextTableContainer>("wiki_basic_info.json");
                }

                //get basic info of all buildings
                var wikiBuildingInfoProvider = new WikiBuildingInfoProvider();
                var wikiBuildingInfoPreset   = wikiBuildingInfoProvider.GetWikiBuildingInfos(tableContainer);

                //get detail info of all buildings
                var specialBuildingNameHelper = new SpecialBuildingNameHelper();
                var regionHelper      = new RegionHelper();
                var titleParserSingle = new TitleParserSingle(_commons, specialBuildingNameHelper);
                var infoboxParser     = new InfoboxParser.InfoboxParser(_commons, titleParserSingle, specialBuildingNameHelper, regionHelper);
                var infoboxExtractor  = new InfoboxExtractor(_commons, titleParserSingle);

                var wikiDetailProvider = new WikiBuildingDetailProvider(_commons, infoboxParser, infoboxExtractor);
                wikiBuildingInfoPreset               = wikiDetailProvider.FetchBuildingDetails(wikiBuildingInfoPreset);
                wikiBuildingInfoPreset.Version       = PresetVersion;
                wikiBuildingInfoPreset.DateGenerated = DateTime.UtcNow;

                var outputPath = Path.Combine(OutputDirectory, CoreConstants.PresetsFiles.WikiBuildingInfoPresetsFile);
                logger.Trace($"save wiki building info: {outputPath}");
                SerializationHelper.SaveToFile(wikiBuildingInfoPreset, outputPath, prettyPrint: UsePrettyPrint);

                //for testing
                //load parsed file to test
                //wikiBuildingInfoPreset = SerializationHelper.LoadFromFile<WikiBuildingInfoPreset>(PRESET_FILENAME);

                var oldColor = Console.ForegroundColor;
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine($"Finished parsing all building information.");
                Console.ForegroundColor = oldColor;
            }
            catch (Exception ex)
            {
                logger.Error(ex, "error occured");

                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex);
            }
            finally
            {
                if (!NoWait)
                {
                    Console.WriteLine();
                    Console.WriteLine("To exit press any key ...");
                    Console.ReadLine();
                }
            }
        }
Esempio n. 2
0
 public WikiBuildingDetailProvider(ICommons commons, InfoboxParser.InfoboxParser infoboxParserToUse, IInfoboxExtractor infoboxExtractorToUse)
 {
     _commons          = commons;
     _infoboxParser    = infoboxParserToUse;
     _infoboxExtractor = infoboxExtractorToUse;
 }