private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { if (e.Cancel) { return; } string[] queryItems = (string[])e.Argument; TempItemSet[] result = new TempItemSet[queryItems.Length]; for (int i = 0; i < queryItems.Length; i++) { result[i] = new TempItemSet(); result[i].QueryPath = queryItems[i]; List <ItemSpec> tempList = new List <ItemSpec>(); List <int> tempIndx = new List <int>(); string[] filenames = Directory.EnumerateFileSystemEntries(queryItems[i]).ToArray(); result[i].Items = new TempItemSet.TempItem[filenames.Length]; for (int j = 0; j < filenames.Length; j++) { result[i].Items[j].LocalPath = filenames[j]; string tfsPath = m_workspace.TryGetServerItemForLocalItem(filenames[j]); if (tfsPath != null) { tempList.Add(new ItemSpec(tfsPath, RecursionType.None)); tempIndx.Add(j); } } if (tempList.Count > 0) { ExtendedItem[][] itemSets = m_workspace.GetExtendedItems(tempList.ToArray(), DeletedState.Any, ItemType.Any); for (int j = 0; j < itemSets.Length; j++) { if (itemSets[j].Length > 0) { result[i].Items[tempIndx[j]].ServerItem = itemSets[j][0]; } } } Array.Sort(result[i].Items, (a, b) => a.LocalPath.CompareTo(b.LocalPath)); } e.Result = result; }
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { if (e.Cancel) { return; } string[] queryItems = (string[])e.Argument; ItemSpec[] array = new ItemSpec[queryItems.Length]; for (int i = 0; i < queryItems.Length; i++) { array[i] = new ItemSpec(VersionControlPath.Combine(queryItems[i], "*"), RecursionType.OneLevel); } ExtendedItem[][] itemSets; itemSets = m_workspace.GetExtendedItems(array, m_deletedState, ShowFiles ? ItemType.Any : ItemType.Folder, GetItemsOptions.IncludeBranchInfo); TempItemSet[] result = new TempItemSet[itemSets.Length]; for (int i = 0; i < itemSets.Length; i++) { result[i] = new TempItemSet { QueryPath = VersionControlPath.GetFolderName(array[i].Item), Items = itemSets[i].Where((item) => (item.TargetServerItem != queryItems[i] && (item.IsInWorkspace || !m_limitToWorkspace))).ToArray() }; } if (m_limitToWorkspace) { Workspace ws = m_workspace; ws.RefreshIfNeeded(); var folders = ws.Folders; foreach (TempItemSet its in result) { int desiredCloakDepth = VersionControlPath.GetFolderDepth(its.QueryPath) + 1; string cloakedWeSaw = null; List <ItemSpec> newItems = new List <ItemSpec>(); foreach (var fldr in folders) { if (fldr.IsCloaked && fldr.Depth != RecursionType.None && VersionControlPath.IsSubItem(fldr.ServerItem, its.QueryPath) && VersionControlPath.GetFolderDepth(fldr.ServerItem) == desiredCloakDepth) { cloakedWeSaw = fldr.ServerItem; } else if (!fldr.IsCloaked && cloakedWeSaw != null && VersionControlPath.IsSubItem(fldr.ServerItem, cloakedWeSaw)) { //we need this to keep going even if it's cloaked newItems.Add(new ItemSpec(cloakedWeSaw, RecursionType.None)); cloakedWeSaw = null; } } if (newItems.Count > 0) { ExtendedItem[] newExItems = new ExtendedItem[its.Items.Length + newItems.Count]; Array.Copy(its.Items, newExItems, its.Items.Length); ExtendedItem[][] tempExItems = m_sourceControl.GetExtendedItems(newItems.ToArray(), m_deletedState, ItemType.Folder, GetItemsOptions.IncludeBranchInfo); for (int i = 0; i < tempExItems.Length; i++) { newExItems[i + its.Items.Length] = tempExItems[i][0]; } its.Items = newExItems; } } } foreach (TempItemSet its in result) { Array.Sort(its.Items, (a, b) => a.TargetServerItem.CompareTo(b.TargetServerItem)); } e.Result = result; }