Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
                }
            }
        }
Exemplo n.º 3
0
        /// <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;
            }
        }
Exemplo n.º 4
0
 /// <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;
 }