Ejemplo n.º 1
0
        void MergeBundleFileNode(TreeNode fileNode, TreeNode[] checkedModNodes, Merge merge, bool isNew)
        {
            _outputPath = Path.Combine(Paths.MergedBundleContent, fileNode.Text);

            if (File.Exists(_outputPath) && !ConfirmOutputOverwrite(_outputPath))
            {
                return;
            }

            _vanillaFile = null;

            var metadata1 = checkedModNodes[0].GetMetadata();
            var source1   = MergeSource.FromBundle(new FileInfo(metadata1.FilePath), metadata1.FileHash);

            for (int i = 1; i < checkedModNodes.Length; ++i)
            {
                ++ProgressInfo.CurrentMergeNum;

                var metadata2 = checkedModNodes[i].GetMetadata();
                var source2   = MergeSource.FromBundle(new FileInfo(metadata2.FilePath), metadata2.FileHash);

                if (!GetUnpackedFiles(fileNode.Text, ref source1, ref source2))
                {
                    if (DialogResult.Abort != HandleCanceledMerge(checkedModNodes.Length - i - 1, merge))
                    {
                        continue;
                    }
                    break;
                }

                var mergedFile = MergeText(merge, source1, source2, true);
                if (mergedFile != null)
                {
                    source1 = MergeSource.FromFlatFile(mergedFile, null);
                }
                else if (DialogResult.Abort == HandleCanceledMerge(checkedModNodes.Length - i - 1, merge))
                {
                    break;
                }
            }

            if (merge.BundleName != null && isNew && merge.Mods.Count > 1)
            {
                _bundleChanged = true;
                _pendingBundleMerges.Add(merge);
            }
        }