private void Retrieve(NwdPortableDevice device, NwdPortableDeviceFolder folder, ref NwdUri uri, ref List<NwdPortableDeviceObject> found) { folder.Refresh(device); string nodeName = uri.PopNodeName(); if (folder.Files != null) { foreach (NwdPortableDeviceObject pdo in folder.Files) { if (NwdUri.MatchNodeName(nodeName, pdo.Name)) { if (uri.HasNodeKeysInStack()) { if (pdo is NwdPortableDeviceFolder) { NwdPortableDeviceFolder nextFolder = (NwdPortableDeviceFolder)pdo; //uri has one level popped, pass the modified uri and //the newly found folder to the next level of recursion Retrieve(device, nextFolder, ref uri, ref found); } else { //bad key (found name but not a folder and keystack isn't empty, so just return) //do nothing } } else { //finished found.Add(pdo); } } } } }
private void ProcessPdo(NwdPortableDevice device, NwdPortableDeviceObject pdo, ref NwdUri uri, ref MultiMap<string, NwdPortableDeviceObject> found) { if (uri.HasNodeKeysInStack()) { if (pdo is NwdPortableDeviceFolder) { NwdPortableDeviceFolder nextFolder = (NwdPortableDeviceFolder)pdo; found.Add(uri.CurrentTraversalUri, pdo); //uri has one level popped, pass the modified uri and //the newly found folder to the next level of recursion Retrieve(device, nextFolder, ref uri, ref found); } else { //bad key (found name but not a folder and keystack isn't empty, so just return) //do nothing } } else { //finished found.Add(uri.CurrentTraversalUri, pdo); } }