private static BaseMetadata readMetadataFromDatabase(string location, ReadOptions options, CancellationToken token, int timeoutSeconds) { BaseMetadata metadata = null; using (MetadataDbCommands metadataCommands = new MetadataDbCommands()) { metadata = metadataCommands.findMetadataByLocation(location); if (metadata != null) { metadata.IsImported = true; if (options.HasFlag(ReadOptions.LEAVE_STREAM_OPENED_AFTER_READ)) { Stream data = FileUtils.waitForFileAccess(location, FileAccess.Read, FILE_OPEN_ASYNC_TIMEOUT_MS, token); metadata.Data = data; } // check if metadata stored in the database is outdated FileInfo info = new FileInfo(location); info.Refresh(); if (info.Exists == false) { metadata.MetadataReadError = new FileNotFoundException("File not found", location); return(metadata); } if ((info.LastWriteTime - metadata.LastModifiedDate) > TimeSpan.FromSeconds(10)) { // metadata is outdated so update in database Logger.Log.Info("Updated: " + location + " - Database timestamp: " + metadata.LastModifiedDate.ToString() + " Disk timestamp: " + info.LastWriteTime.ToString()); int id = metadata.Id; metadata = MetadataFileFactory.read(location, options, token, timeoutSeconds); if (metadata != null) { metadata.IsImported = true; metadata.Id = id; write(metadata, WriteOptions.WRITE_TO_DATABASE, null); } } if (info.Attributes.HasFlag(FileAttributes.ReadOnly)) { metadata.IsReadOnly = true; } } } return(metadata); }
private static BaseMetadata readMetadataFromDatabase(string location, ReadOptions options, CancellationToken token, int timeoutSeconds) { BaseMetadata metadata = null; using (MetadataDbCommands metadataCommands = new MetadataDbCommands()) { metadata = metadataCommands.findMetadataByLocation(location); if (metadata != null) { metadata.IsImported = true; if (options.HasFlag(ReadOptions.LEAVE_STREAM_OPENED_AFTER_READ)) { Stream data = FileUtils.waitForFileAccess(location, FileAccess.Read, FILE_OPEN_ASYNC_TIMEOUT_MS, token); metadata.Data = data; } // check if metadata stored in the database is outdated FileInfo info = new FileInfo(location); info.Refresh(); if (info.Exists == false) { metadata.MetadataReadError = new FileNotFoundException("File not found", location); return (metadata); } if ((info.LastWriteTime - metadata.LastModifiedDate) > TimeSpan.FromSeconds(10)) { // metadata is outdated so update in database Logger.Log.Info("Updated: " + location + " - Database timestamp: " + metadata.LastModifiedDate.ToString() + " Disk timestamp: " + info.LastWriteTime.ToString()); int id = metadata.Id; metadata = MetadataFileFactory.read(location, options, token, timeoutSeconds); if (metadata != null) { metadata.IsImported = true; metadata.Id = id; write(metadata, WriteOptions.WRITE_TO_DATABASE, null); } } if (info.Attributes.HasFlag(FileAttributes.ReadOnly)) { metadata.IsReadOnly = true; } } } return (metadata); }