private bool DoTransfer(ref ParentViewFolder[] foldersFrom, ref ParentViewFolder[] foldersTo, int folder, int file, ref List<string> guidsOfFoldersToRemove, bool leftToRight)
{
ParentViewFolder item = foldersFrom[folder];
ParentViewFolder folder3 = null;
string name = item.name;
bool flag = false;
bool flag2 = false;
if (file == -1)
{
this.AddFolderToRemove(ref guidsOfFoldersToRemove, foldersFrom[folder].guid);
int index = ParentViewState.IndexOf(foldersTo, name);
if (index != -1)
{
folder3 = foldersTo[index];
ArrayUtility.AddRange<ParentViewFile>(ref folder3.files, item.files);
}
else
{
ArrayUtility.Add<ParentViewFolder>(ref foldersTo, item);
flag2 = true;
if (!HasFlag(item.changeFlags, ChangeFlags.Deleted))
{
flag = this.TransferDependentParentFolders(ref guidsOfFoldersToRemove, item.guid, leftToRight);
}
else
{
flag = this.TransferDeletedDependentParentFolders(ref guidsOfFoldersToRemove, item.guid, leftToRight);
}
}
}
else
{
int num2 = ParentViewState.IndexOf(foldersTo, name);
if (num2 == -1)
{
if (HasFlag(item.files[file].changeFlags, ChangeFlags.Deleted) && HasFlag(item.changeFlags, ChangeFlags.Deleted))
{
ArrayUtility.Add<ParentViewFolder>(ref foldersTo, item);
this.AddFolderToRemove(ref guidsOfFoldersToRemove, item.guid);
num2 = foldersTo.Length - 1;
if (!AllFolderWouldBeMovedAnyway(!leftToRight ? this.pv2state : this.pv1state, item.guid))
{
flag = true;
}
flag |= this.TransferDeletedDependentParentFolders(ref guidsOfFoldersToRemove, item.guid, leftToRight);
}
else
{
ArrayUtility.Add<ParentViewFolder>(ref foldersTo, item.CloneWithoutFiles());
num2 = foldersTo.Length - 1;
flag = this.TransferDependentParentFolders(ref guidsOfFoldersToRemove, item.guid, leftToRight);
}
flag2 = true;
}
folder3 = foldersTo[num2];
ArrayUtility.Add<ParentViewFile>(ref folder3.files, item.files[file]);
ArrayUtility.RemoveAt<ParentViewFile>(ref item.files, file);
if (item.files.Length == 0)
{
this.AddFolderToRemove(ref guidsOfFoldersToRemove, foldersFrom[folder].guid);
}
}
if (folder3 != null)
{
if (<>f__mg$cache0 == null)
{
<>f__mg$cache0 = new Comparison<ParentViewFile>(ParentViewState.CompareViewFile);