private void ProcessFile(FileInfo file, int retry = 0) { DateTime processStart = DateTime.Now; try { if (Globals.VerboseLogging) { Logger.Info($"Loading details for file '{file.FullName}'."); } var mediaFile = new Repository.MediaFile(Logger, file, FramesToRemove); bool existsInDB = mediaFile.Exists(); if (mediaFile.Changed > LastScan || !existsInDB) { mediaFile.LoadTagData(); mediaFile.AddOrUpdate(); FilesProcessed++; } else { FilesSkipped++; } if ((FilesProcessed + FilesSkipped) % int.Parse(ConfigurationManager.AppSettings["ProcessUpdateCounter"] ?? "100") == 0) { Logger.Info($"Processed {FilesProcessed + FilesSkipped} files..."); } } catch (Exception ex) { if (retry < 3) { retry++; Logger.Info($"Error processing file: {file.FullName}. Error: '{ex.Message}'. Retrying {retry} of 3..."); ProcessFile(file, retry); } else { Logger.Error($"Error processing file: {file.FullName}", ex); if (!ex.Message.Contains("An error occurred while starting a transaction on the provider connection")) { Errors.Add(new FileError(ex, file.FullName, $"Error processing file. Error: {ex.Message}")); } else { ScanActionsRetry.Add(() => ProcessFile(file)); } } } DateTime processEnd = DateTime.Now; if (Globals.VerboseLogging) { Logger.Info($"File '{file.FullName}' processed in {(processEnd - processStart).TotalMilliseconds} milliseconds."); } }
private void ProcessFile(FileInfo file) { try { var mediaFile = new Repository.MediaFile(Logger, file); mediaFile.AddOrUpdate(); FilesProcessed++; } catch (Exception ex) { Logger.Error($"Error processing file: {file.FullName}", ex); Errors.Add(new FileError(ex, file.FullName, "Error processing file.")); } }