private CompressedBlobStoreSection CreateFolderStructure(StringKeySequence baseName = default(StringKeySequence)) { var folder = new CompressedBlobStoreSection(baseName, mArchive); var childFolderKeys = from entry in mEntries where entry.Path.Segments.Length == baseName.Segments.Length + 1 let m1 = baseName.IsEmpty && entry.Path.Segments.Length == 1 let m2 = baseName.Segments.Select((k, i) => entry.Path.Segments[i].Equals(k)).All(x => x) where m1 || m2 select entry.Path; foreach (var key in childFolderKeys) { folder.AddChildFolder(key.Segments.Last(), CreateFolderStructure(key)); } var elementKeys = new List <StringKey>( from entry in mEntries where baseName.Equals(entry.Path) select entry.Key); foreach (var element in elementKeys) { folder.AddElement(element); } return(folder); }
public override IBlobStore GetChildStore(StringKey childStorageKey, bool?isReadOnly = null) { if (!mChildFolders.ContainsKey(childStorageKey.Normalize())) { var childStore = new CompressedBlobStoreSection(mThisFolderName.Concat(childStorageKey), mArchive); AddChildFolder(childStorageKey, childStore); return(childStore); } return(mChildFolders[childStorageKey.Normalize()]); }
private CompressedBlobStore([NotNull] ZipArchive archive, [NotNull] IList <CompressedBlobStoreEntryInfo> entries) { if (archive == null) { throw new ArgumentNullException(nameof(archive)); } if (entries == null) { throw new ArgumentNullException(nameof(entries)); } mArchive = archive; mEntries = entries; mRootFolder = CreateFolderStructure(); }
internal void AddChildFolder(StringKey key, [NotNull] CompressedBlobStoreSection folder) { if (folder == null) { throw new ArgumentNullException(nameof(folder)); } if (mChildFolders.ContainsKey(key.Normalize())) { mChildFolders[key.Normalize()] = folder; return; } mChildFolders.Add(key.Normalize(), folder); mOriginalChildFolderNames.Add(key); }