private IEnumerable<NwdUriProcessEntry> GetDeviceHashedMedia(NwdPortableDevice device)
        {
            string uri = "NWD/config/FileHashIndex.txt";
            NwdPortableDeviceFile hashedMediaIndex =
                GetFirstFileByUri(uri);

            if (hashedMediaIndex == null)
            {
                Display.Message("[" + uri + "] not found");
                return new List<NwdUriProcessEntry>(); //empty list
            }
            else
            {
                Display.Message("found [" + uri + "]");

                //copy to local file system
                string localFilePath =
                    Configuration.NwdUriToLocalPath(uri);

                //Display.Message(localFilePath);

                string localDestinationFolder =
                    Path.GetDirectoryName(localFilePath);

                //Display.Message(localDestinationFolder);

                device.DownloadFile(hashedMediaIndex,
                                    localDestinationFolder);

                Display.Message("copied file to [" + localFilePath + "]");

                List<string> lineItems =
                    File.ReadAllLines(localFilePath).ToList();

                Display.Message("found " + lineItems.Count + " lineItems");

                Parser.Parser p = new Parser.Parser();
                List<NwdUri> lst = new List<NwdUri>();
                List<string> invalidPaths = new List<string>();

                foreach (string li in lineItems)
                {
                    string path = p.Extract("path", li);
                    string hash = p.Extract("sha1Hash", li);
                    List<string> whitelistedFolders =
                        new List<string>();
                    whitelistedFolders.Add("Pictures");
                    whitelistedFolders.Add("DCIM");
                    //NwdUri newUri = Configuration.NwdPathToNwdUri(path);
                    NwdUri newUri = Configuration.NwdPathToNwdUri(path, whitelistedFolders);
                    if (newUri != null)
                    {
                        newUri.Hash = hash;
                        newUri.Path = path;
                        lst.Add(newUri);
                    }
                    else
                    {
                        invalidPaths.Add(path);
                    }
                }

                var pathList = (from li in invalidPaths
                                select new
                                {
                                    Path = li
                                }).ToList();

                if (pathList.Count > 0)
                {
                    Display.Grid(invalidPaths.Count + " invalid paths skipped", lst, pathList);
                }
                else
                {
                    Display.Grid("0 invalid paths skipped", lst);
                }

                var processEntries =
                    (from nwdUri in lst
                     select new NwdUriProcessEntry(nwdUri)).ToList();

                return processEntries;
            }
        }