public async Task AddFiles(IEnumerable <string> filePaths) { _log?.Write(LogEventCategory.Informational, $"Adding {filePaths.Count()} files to FITS database..."); OnAddStatusUpdated?.Invoke(FileDbAddStatus.ReadingHeaders, null, 0, filePaths.Count()); var fitsFiles = await ReadFitsFiles(filePaths); await InsertOrUpdateFitsFiles(fitsFiles.Where(ff => ff != null)); }
private async Task InsertOrUpdateFitsFiles(IEnumerable <IFitsFileInfo> fitsFiles) { int handled = 0; foreach (var ff in fitsFiles) { try { var dataChange = await PerformFitsTableChangesTransaction(ff); if (dataChange == DataChange.Created) { _log?.Write(LogEventCategory.Informational, $"Read and indexed {ff.HeaderKeys.Count} keywords from " + $"a new FITS file {Path.GetFileName(ff.FilePath)}"); } else if (dataChange == DataChange.Updated) { _log?.Write(LogEventCategory.Informational, $"Read and indexed {ff.HeaderKeys.Count} keywords from " + $"a changed FITS file {Path.GetFileName(ff.FilePath)}"); } else { _log?.Write(LogEventCategory.Informational, $"Read {Path.GetFileName(ff.FilePath)}, file was already indexed and unchanged"); } } catch (Exception e) { var err = "Reading of file / extraction of FITS header keywords failed"; _log?.Write(LogEventCategory.Error, err, e); } handled++; EventUtils.IgnoreExceptions(() => OnAddStatusUpdated?.Invoke(FileDbAddStatus.InsertingAndUpdating, ff.FilePath, handled, fitsFiles.Count())); } EventUtils.IgnoreExceptions(() => OnAddStatusUpdated?.Invoke(FileDbAddStatus.TransactionCompleted, null, handled, fitsFiles.Count())); }