Ejemplo n.º 1
0
        public static List <InformationRepackBsa> GetIntelligentPacking(ConfigurationSelection passBsaSelection, string pathSource, string gameParameter, bool isCreateDummy, bool isVerbose)
        {
            var source = new DirectoryInfo(pathSource);
            var result = new List <InformationRepackBsa>();

            //
            //
            foreach (DirectoryInfo directoryInfo in source.GetDirectories())
            {
                if (!passBsaSelection.GetValidation(directoryInfo.Name))
                {
                    continue;
                }
                //
                //auto correction when doing bullshit
                var correctThese = directoryInfo.GetDirectories().Where(d => d.Name.EndsWith("octatempdir", StringComparison.OrdinalIgnoreCase));
                foreach (DirectoryInfo info in correctThese)
                {
                    MoveFiles(info, directoryInfo);
                    DeleteEmptyDirectory(info);
                }
                directoryInfo.Refresh();
                //dummy esp

                //
                if (!directoryInfo.GetFiles().Any(f => string.Equals(f.Extension, ".bsa", StringComparison.OrdinalIgnoreCase)) &&
                    directoryInfo.GetDirectories().Any(d => PossibleBsaDirs.Any(e => string.Equals(e, d.Name, StringComparison.OrdinalIgnoreCase))) &&
                    SearchAnyFilesOkForArchive(directoryInfo))
                {
                    //
                    var espFile = directoryInfo.GetFiles().FirstOrDefault(f => string.Equals(f.Extension, ".esp", StringComparison.OrdinalIgnoreCase) ||
                                                                          string.Equals(f.Extension, ".esm", StringComparison.OrdinalIgnoreCase) ||
                                                                          string.Equals(f.Extension, ".esl", StringComparison.OrdinalIgnoreCase));
                    //
                    if (isCreateDummy && espFile == null)
                    {
                        FileInfo fDummy = new FileInfo("dummy.esp");
                        if (fDummy.Exists)
                        {
                            File.Copy(fDummy.FullName, Path.Combine(directoryInfo.FullName, string.Format("{0}.esp", directoryInfo.Name)));
                            espFile = directoryInfo.GetFiles().FirstOrDefault(f => string.Equals(f.Extension, ".esp", StringComparison.OrdinalIgnoreCase));
                        }
                    }
                    //
                    if (espFile != null)
                    {
                        bool isSound = directoryInfo.GetDirectories().Any(d =>
                                                                          string.Equals(d.Name, "music", StringComparison.OrdinalIgnoreCase) ||
                                                                          string.Equals(d.Name, "sound", StringComparison.OrdinalIgnoreCase));
                        bool isTextureOnly = directoryInfo.GetDirectories().Length == 1 && directoryInfo.GetDirectories()
                                             .Any(d => string.Equals(d.Name, "textures", StringComparison.OrdinalIgnoreCase));
                        var repackCfg  = GetGoodRepackConfiguration(Path.GetFileNameWithoutExtension(espFile.FullName), gameParameter, isSound, isTextureOnly);
                        var listResult = PrepareForPacking(repackCfg, directoryInfo.FullName, gameParameter, false, isVerbose);
                        result.AddRange(listResult);
                    }
                }
                //
            }
            //
            return(result);
        }