/// <summary>
        /// This will assign all files to the proper destination.
        /// </summary>
        /// <param name="fileList">The list of files inside the mod archive.</param>
        /// <param name="stopPatterns">patterns matching files or directories that should be at the top of the directory structure.</param>
        /// <param name="progressDelegate">A delegate to provide progress feedback.</param>
        /// <param name="coreDelegate">A delegate for all the interactions with the js core.</param>
        protected async Task <List <Instruction> > BasicModInstall(List <string> fileList,
                                                                   List <string> stopPatterns,
                                                                   ProgressDelegate progressDelegate,
                                                                   CoreDelegates coreDelegate)
        {
            List <Instruction> FilesToInstall = new List <Instruction>();
            string             prefix         = ArchiveStructure.FindPathPrefix(fileList, stopPatterns);

            await Task.Run(() =>
            {
                foreach (string ArchiveFile in fileList)
                {
                    if (ArchiveFile.EndsWith("" + Path.DirectorySeparatorChar))
                    {
                        // don't include directories, only files
                        continue;
                    }
                    string destination;
                    if (ArchiveFile.StartsWith(prefix))
                    {
                        destination = ArchiveFile.Substring(prefix.Length);
                    }
                    else
                    {
                        destination = ArchiveFile;
                    }
                    FilesToInstall.Add(Instruction.CreateCopy(ArchiveFile, destination));
                    // Progress should increase.
                }
            });

            return(FilesToInstall);
        }
        /// <summary>
        /// This will assign all files to the proper destination.
        /// </summary>
        /// <param name="FileList">The list of files inside the mod archive.</param>
        /// <param name="pluginQueryDelegate">A delegate to query whether a plugin already exists.</param>
        /// <param name="progressDelegate">A delegate to provide progress feedback.</param>
        /// <param name="error_OverwritesDelegate">A delegate to present errors and file overwrite requests.</param>
        protected bool BasicModInstall(List <string> fileList)
        {
            foreach (string ArchiveFile in fileList)
            {
                if (ArchiveFile.EndsWith("" + Path.DirectorySeparatorChar) ||
                    ArchiveFile.EndsWith("" + Path.AltDirectorySeparatorChar))
                {
                    modInstallInstructions.Add(Instruction.CreateMKDir(ArchiveFile));
                }
                else
                {
                    modInstallInstructions.Add(Instruction.CreateCopy(ArchiveFile, ArchiveFile));
                }
                // Progress should increase.
            }

            return(true);
        }