private void WriteMetadata(ZipArchive archive, BlockMetadata metadata)
        {
            ZipArchiveEntry contentsEntry = archive.CreateEntry(METADATA_ENTRY_NAME);

            using var stream = contentsEntry.Open();
            metadata.Serialize(stream);
        }
        private BlockMetadata ReadMetadata(ZipArchive archive)
        {
            var entry = archive.GetEntry(METADATA_ENTRY_NAME);

            using var stream = entry.Open();

            return(BlockMetadata.Deserialize(stream));
        }
        private IEnumerable <Document <T> > ReadDocuments(ZipArchive archive, BlockMetadata metadata)
        {
            foreach (var entry in archive.Entries)
            {
                if (entry.Name != METADATA_ENTRY_NAME)
                {
                    using var stream = entry.Open();

                    var data     = dataSerializer.Deserialize(stream);
                    var filename = Path.GetFileNameWithoutExtension(entry.Name.AsSpan());
                    var id       = DocumentId.Parse(filename);

                    yield return(new Document <T>(metadata[id], data));
                }
            }
        }
 protected IEnumerable <string> GetBlocksPaths()
 {
     return(FileSystem.Directory.GetFiles(path, "*.zip")
            .OrderBy(fn => BlockMetadata.ParseId(Path.GetFileNameWithoutExtension(fn.AsSpan()))));
 }
 protected string GetBlockPath(ushort blockId)
 {
     return(Path.Combine(path, $"{BlockMetadata.IdString(blockId)}.zip"));
 }
Example #6
0
 /// <summary>
 /// Make new block from a list of documents
 /// </summary>
 /// <param name="id">The block's id</param>
 /// <param name="docs">The list of documents</param>
 /// <returns>The new block</returns>
 public static Block <T> Make(ushort id, IList <Document <T> > docs)
 {
     return(new Block <T>(docs, BlockMetadata.Make <T>(id, docs)));
 }
Example #7
0
 public Block(IList <Document <T> > docs, BlockMetadata metadata)
 {
     Documents = docs;
     Metadata  = metadata;
 }