Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }