Exemple #1
0
        private void StartProcess3(object o)
        {
            try
            {
                ProcessorArgs     processorArgs = (ProcessorArgs)o;
                ConfigurationMain mainCfg       = processorArgs.ConfigurationMain;
                //
                FileExecution.ExecuteTreat(processorArgs.Orders, mainCfg, false);
                //
                if (mainCfg.PassBsa.Enabled)
                {
                    if (mainCfg.PassBsa.MustRepack())
                    {
                        FileExecution.RepackBsa(processorArgs.BsaOrders, mainCfg.PassBsa.GameParameter, mainCfg.IsUseMultithreading, mainCfg.IsVerbose);
                    }
                    if (mainCfg.PassBsa.MustClean())
                    {
                        FileExecution.CleanBsa(processorArgs.BsaOrders, mainCfg.IsVerbose);
                    }
                }
                //
                if (mainCfg.IsMergeActivated)
                {
                    if (mainCfg.IsUnmergeActivated)
                    {
                        FileExecution.DeleteFiles(mainCfg, processorArgs.DeleteOrders);
                    }
                    else
                    {
                        FileExecution.Merge(mainCfg, processorArgs.CopyOrders);
                    }
                }
                //
                if (mainCfg.PassBsa.Enabled && mainCfg.PassBsa.IsRepackLooseFilesInBsa)
                {
                    var bsaToProcess = mainCfg.PassBsa.IsIntelligentPacking ?
                                       FileUtils.GetIntelligentPacking(mainCfg.Selection, mainCfg.PathSource, mainCfg.PassBsa.GameParameter, mainCfg.PassBsa.IsRepackCreateDummy, mainCfg.IsVerbose) :
                                       FileUtils.PrepareForPacking(mainCfg.PassBsa.Repacks, mainCfg.PathSource, mainCfg.PassBsa.GameParameter, true, mainCfg.IsVerbose);



                    List <DirectoryInfo> dirToDeleteIfFail = new List <DirectoryInfo>();
                    foreach (InformationRepackBsa informationRepackBsa in bsaToProcess)
                    {
                        ExternalTools.CallBsaPack(Path.Combine(informationRepackBsa.Source.FullName, informationRepackBsa.CurrentBsaName),
                                                  informationRepackBsa.CurrentTarget.FullName, informationRepackBsa.IsCompressed, informationRepackBsa.GameParameter, mainCfg.IsUseMultithreading, mainCfg.IsVerbose);
                        //
                        informationRepackBsa.CurrentTarget.Refresh();
                        if (informationRepackBsa.CurrentTarget.Exists)
                        {
                            try
                            {
                                FileUtils.DeleteCompleteDirectory(informationRepackBsa.CurrentTarget);
                            }
                            catch
                            {
                                dirToDeleteIfFail.Add(informationRepackBsa.CurrentTarget);
                            }
                        }
                    }
                    //
                    foreach (DirectoryInfo directoryInfo in dirToDeleteIfFail)
                    {
                        FileUtils.DeleteCompleteDirectory(directoryInfo);
                    }
                }
                //Cleaning empty subdir
                if (mainCfg.IsBackupActivated && mainCfg.IsRefreshBackup)
                {
                    FileInformation.CleanEmptySubdir(mainCfg.PathBackup);
                }
                //Cleaning no present source subdir
                if (mainCfg.IsBackupActivated && mainCfg.IsCleanBackup)
                {
                    FileInformation.CleanBackupFromSource(mainCfg.PathSource, mainCfg.PathBackup);
                }
                //
                if (mainCfg.IsShowResults)
                {
                    var infoTextures = new DirectoryInfo(mainCfg.PathSource);
                    //
                    foreach (var directoryInfo in infoTextures.GetDirectories())
                    {
                        processorArgs.Folders[directoryInfo.Name].NewSize = FileUtils.CalculateDirectorySizeMo(directoryInfo, mainCfg.PassBsa.Enabled);
                    }
                    processorArgs.Folders[infoTextures.Name].NewSize = FileUtils.CalculateDirectorySizeMo(infoTextures, mainCfg.PassBsa.Enabled);
                    // Show sizes before/after resizes
                    Logger.Log("Results: (Size before resize in Mo => current size in Mo)");
                    foreach (var keyValuePair in processorArgs.Folders.OrderBy(e => e.Value.Size))
                    {
                        Logger.Log("{0,15:F2} Mo => {1,15:F2} Mo {2}",
                                   keyValuePair.Value.Size,
                                   keyValuePair.Value.NewSize,
                                   keyValuePair.Key);
                    }
                }

                OnProcessorEnded(-1);
            }
            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);
            }
        }