public ThreadPageParser(PeliplaneettaContext context) { this.context = context; threadIdsPerOriginalThreadId = context.Thread.AsNoTracking() .ToDictionary(t => t.OriginalThreadId, t => t.Id); userIdsPerOriginalUserId = context.User.AsNoTracking().ToDictionary(u => u.OriginalUserId, u => u.Id); spaceIdsPerOriginalSpaceId = context.Space.AsNoTracking().ToDictionary(s => s.OriginalSpaceId, s => s.Id); avatarIdsPerFilename = context.Avatar.AsNoTracking().ToDictionary(a => a.Filename, a => a.Id); messagesPerOriginalSpaceId = new Dictionary <int, HashSet <int> >(); }
static void Main(string[] args) { string rootDirectory = args[0]; string[] filePaths = Directory.GetFiles(rootDirectory, "*.html", SearchOption.AllDirectories); Console.WriteLine($"Starting to parse {filePaths.Length} files."); using (StreamWriter writer = new StreamWriter("log.txt", true)) { using (PeliplaneettaContext context = new PeliplaneettaContext()) { // This speeds up saving but data needs to be validated context.Configuration.ValidateOnSaveEnabled = false; context.Configuration.AutoDetectChangesEnabled = false; ThreadPageParser pageParser = new ThreadPageParser(context); int fileCounter = 0; int errorCounter = 0; foreach (string filePath in filePaths) { try { pageParser.Parse(filePath); Console.SetCursorPosition(0, 1); Console.Write(" "); Console.SetCursorPosition(0, 1); Console.Write($"{fileCounter}/{filePaths.Length} Errors: {errorCounter}"); } catch (Exception) { writer.WriteLine(filePath); writer.AutoFlush = true; errorCounter++; } fileCounter++; } } } }