/// <summary> /// Adds a virtual mapping. /// </summary> /// <param name="hardReference">Hard reference.</param> /// <param name="virtualReference">Virtual reference.</param> public void AddVirtualMapping(ItemReference hardReference, VirtualItemReference virtualReference) { PackageGroup referenceGroup = hardReference.PackageGroup; if (VirtualReferenceMappings.ContainsKey(referenceGroup)) { if (!VirtualReferenceMappings[referenceGroup].ContainsKey(hardReference.ItemPath)) { VirtualReferenceMappings[referenceGroup].Add(hardReference.ItemPath, virtualReference); } } else { Dictionary <string, VirtualItemReference> groupDictionary = new Dictionary <string, VirtualItemReference>(); groupDictionary.Add(hardReference.ItemPath, virtualReference); VirtualReferenceMappings.Add(referenceGroup, groupDictionary); } }
/// <summary> /// Enumerates the files and subfolders in the specified package, starting at /// the provided root path. /// </summary> /// <param name="parentReferenceObject">Parent reference where the search should start.</param> protected void EnumerateFilesAndFolders(object parentReferenceObject) { ItemReference parentReference = parentReferenceObject as ItemReference; if (parentReference != null) { VirtualItemReference virtualParentReference = parentReference as VirtualItemReference; if (virtualParentReference != null) { EnumerateHardReference(virtualParentReference.HardReference); for (int i = 0; i < virtualParentReference.OverriddenHardReferences.Count; ++i) { EnumerateHardReference(virtualParentReference.OverriddenHardReferences[i]); } virtualParentReference.State = ReferenceState.Enumerated; } else { EnumerateHardReference(parentReference); } } }
/// <summary> /// Loads all packages in the currently selected game directory. This function does not enumerate files /// and directories deeper than one to keep the UI responsive. /// </summary> protected void Reload_Implementation() { if (HasPackageDirectoryChanged()) { CachedPackageDirectories = GamePathStorage.Instance.GamePaths; this.PackageGroups.Clear(); if (CachedPackageDirectories.Count > 0) { WorkQueue.Clear(); PackageItemNodeMapping.Clear(); PackageNodeItemMapping.Clear(); PackageGroupVirtualNodeMapping.Clear(); VirtualReferenceMappings.Clear(); } foreach (string packageDirectory in CachedPackageDirectories) { if (Directory.Exists(packageDirectory)) { // Create the package group and add it to the available ones string FolderName = Path.GetFileName(packageDirectory); PackageGroup Group = new PackageGroup(FolderName, packageDirectory); // TODO: Creating a package group is real slow. Speed it up this.PackageGroups.Add(FolderName, Group); // Create a virtual item reference that points to the package group VirtualItemReference packageGroupReference = new VirtualItemReference(Group, new ItemReference(Group)); packageGroupReference.State = ReferenceState.Enumerated; // Create a virtual package folder for the individual packages under the package group ItemReference packageGroupPackagesFolderReference = new ItemReference(Group, packageGroupReference, ""); // Add the package folder as a child to the package group node packageGroupReference.ChildReferences.Add(packageGroupPackagesFolderReference); // Send the package group node to the UI this.PackageGroupAddedArgs = new ItemEnumeratedEventArgs(packageGroupReference); RaisePackageGroupAdded(); // Add the packages in the package group as nodes to the package folder foreach (KeyValuePair <string, List <string> > PackageListfile in Group.PackageListfiles) { if (PackageListfile.Value != null) { string PackageName = Path.GetFileName(PackageListfile.Key); ItemReference packageReference = new ItemReference(Group, packageGroupPackagesFolderReference, PackageName, ""); // Send the package node to the UI this.PackageEnumeratedArgs = new ItemEnumeratedEventArgs(packageReference); RaisePackageEnumerated(); // Submit the package as a work order, enumerating the topmost directories SubmitWork(packageReference); } } } } bIsReloading = false; bArePackageGroupsLoaded = true; } }
/// <summary> /// Initializes a new instance of the <see cref="Everlook.Explorer.VirtualItemReference"/> class, /// where the reference has a parent <see cref="Everlook.Explorer.VirtualItemReference"/>. /// </summary> /// <param name="parentVirtualReference">Parent virtual reference.</param> /// <param name="inPackageGroup">In group.</param> /// <param name="inHardReference">In hard reference.</param> public VirtualItemReference(VirtualItemReference parentVirtualReference, PackageGroup inPackageGroup, ItemReference inHardReference) : this(inPackageGroup, inHardReference) { this.ParentReference = parentVirtualReference; }