private void Retrieve(NwdPortableDevice device, NwdPortableDeviceFolder folder, ref NwdUri uri, ref MultiMap<string, NwdPortableDeviceObject> found) { folder.Refresh(device); string nodeName = uri.PopNodeName(); if (found.ContainsKey(uri.CurrentTraversalUri)) { //used cached lookup foreach (NwdPortableDeviceObject pdo in found[uri.CurrentTraversalUri]) { ProcessPdo(device, pdo, ref uri, ref found); } } else { //use standard lookup if (folder.Files != null) { foreach (NwdPortableDeviceObject pdo in folder.Files) { if (NwdUri.MatchNodeName(nodeName, pdo.Name)) { ProcessPdo(device, pdo, ref uri, ref found); } } } } }
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 NwdPortableDeviceFolder GetRootFolder() { var root = new NwdPortableDeviceFolder("DEVICE", "DEVICE"); IPortableDeviceContent content; this._device.Content(out content); GetChildren(ref content, root); return root; }
/// <summary> /// this is just PortableDevice.EnumerateContents() without the recursion /// </summary> /// <param name="content"></param> /// <param name="parent"></param> private static void GetChildren(ref IPortableDeviceContent content, NwdPortableDeviceFolder parent) { // Get the properties of the object IPortableDeviceProperties properties; content.Properties(out properties); // Enumerate the items contained by the current object IEnumPortableDeviceObjectIDs objectIds; content.EnumObjects(0, parent.Id, null, out objectIds); uint fetched = 0; do { string objectId; objectIds.Next(1, out objectId, ref fetched); if (fetched > 0) { var currentObject = WrapObject(properties, objectId); parent.Files.Add(currentObject); } } while (fetched > 0); }
public void Refresh() { Connect(); //get all properties this.FriendlyName = base.FriendlyName; this.Model = base.Model; this.DeviceType = base.DeviceType; this.RootFolder = GetRootFolder(); Disconnect(); }
public void FillFolder(NwdPortableDeviceFolder folder) { if (!_isConnected) { Connect(); } IPortableDeviceContent content; this._device.Content(out content); GetChildren(ref content, folder); Disconnect(); }