Exemple #1
0
 private void StartProcess1(object o)
 {
     try
     {
         ProcessorArgs     processorArgs = (ProcessorArgs)o;
         ConfigurationMain mainCfg       = processorArgs.ConfigurationMain;
         //
         if (mainCfg.IsShowResults)
         {
             Logger.Log("Preparing futur results data");
             var infoTextures = new DirectoryInfo(mainCfg.PathSource);
             //
             foreach (var directoryInfo in infoTextures.GetDirectories())
             {
                 processorArgs.Folders.Add(directoryInfo.Name,
                                           new InformationDirectory {
                     Size = FileUtils.CalculateDirectorySizeMo(directoryInfo, mainCfg.PassBsa.Enabled)
                 });
             }
             processorArgs.Folders.Add(infoTextures.Name,
                                       new InformationDirectory {
                 Size = FileUtils.CalculateDirectorySizeMo(infoTextures, mainCfg.PassBsa.Enabled)
             });
         }
         //
         if (mainCfg.PassBsa.Enabled)
         {
             FileInformation.GetFileInfos(mainCfg.PathSource, mainCfg.PathBackup, processorArgs.FilesBsa, true, mainCfg);
             FilePreparation.PrepareTreat(processorArgs.FilesBsa, mainCfg, processorArgs.BsaOrders, null, null, true);
             FileExecution.ExecuteTreat(processorArgs.BsaOrders, mainCfg, true);
             if (mainCfg.PassBsa.MustUnpack())
             {
                 FileExecution.UnpackBsa(processorArgs.BsaOrders, mainCfg);
             }
             if (mainCfg.PassBsa.IsCopyAsLoose)
             {
                 if (mainCfg.PassBsa.IsCopyAsLooseIfDummy)
                 {
                     List <InformationOrder> confirmedBsaUnpack = new List <InformationOrder>();
                     List <InformationCopy>  confirmedDeletes   = new List <InformationCopy>();
                     foreach (InformationOrder bsaOrder in processorArgs.BsaOrders)
                     {
                         var      bsaName = Path.GetFileNameWithoutExtension(bsaOrder.FileSource.FullName);
                         var      espName = bsaName.ToUpper().Replace(" - TEXTURES", "").Replace("- TEXTURES", "");
                         var      espFile = Path.Combine(bsaOrder.FileSource.Directory.FullName, string.Format("{0}.esp", espName));
                         FileInfo dummy   = new FileInfo("dummy.esp");
                         if (!dummy.Exists)
                         {
                             throw new Exception("No dummy esp to compare from. A dummy.esp file must be present in Octagon directory.");
                         }
                         FileInfo esp = new FileInfo(espFile);
                         if (esp.Exists && dummy.Length == esp.Length)
                         {
                             confirmedBsaUnpack.Add(bsaOrder);
                             if (!confirmedDeletes.Any(e => string.Equals(e.Target, espFile, StringComparison.OrdinalIgnoreCase)))
                             {
                                 confirmedDeletes.Add(new InformationCopy(null, espFile, false, false));
                             }
                         }
                     }
                     FileExecution.CopyBsaAsLooseSimplified(confirmedBsaUnpack, mainCfg);
                     foreach (InformationCopy confirmedDelete in confirmedDeletes)
                     {
                         FileUtils.ExecuteCopyOrDelete(confirmedDelete);
                     }
                 }
                 else
                 {
                     FileExecution.CopyBsaAsLooseSimplified(processorArgs.BsaOrders, mainCfg);
                 }
             }
         }
         //
         if (mainCfg.HasTextureOperation() || (mainCfg.IsBackupActivated && mainCfg.IsRecopyOriginal))
         {
             FileInformation.GetFileInfos(mainCfg.PathSource, mainCfg.PathBackup, processorArgs.FilesDds, false, mainCfg);
         }
         OnProcessorEnded(2);
     }
     catch (AggregateException e)
     {
         Logger.Log(e);
         foreach (Exception innerException in e.InnerExceptions)
         {
             Logger.Log(innerException);
         }
         OnProcessorEnded(-1);
     }
     catch (Exception e)
     {
         Logger.Log(e);
         OnProcessorEnded(-1);
     }
 }