private void ProcessDirectory(string targetDirectory, Guid? parent)
 {
     var folder = new MusicFolder(parent);
     if (parent != null)
     {
         folder.ParentFolder = _folders.FirstOrDefault(f => f.Id == parent);
     }
     folder.Name = targetDirectory.Split('\\').ToList().Last();
     try
     {
         string[] files = Directory.GetFiles(targetDirectory);
         foreach (var ext in _musicFileExts)
         {
             string[] fileEntries = Directory.GetFiles(targetDirectory, String.Format("*{0}", ext));
             if (fileEntries.Any())
             {
                 foreach (var f in fileEntries)
                 {
                     folder.Files.Add(new MusicFile
                     {
                         FolderId = folder.Id,
                         Name = f.Split('\\').ToList().Last().Split('.')[0],
                         Extension = f.Split('\\').ToList().Last().Split('.')[1]
                     });
                 }
             }
         }
     }
     catch (Exception e)
     {
         Console.WriteLine("Error: " + e.Message);
     }
     _folders.Add(folder);
     try
     {
         string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
         foreach (string subdirectory in subdirectoryEntries)
         {
             ProcessDirectory(subdirectory, folder.Id);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Error: " + ex.Message);
     }
 }
 private String _getFullPathToLeaf(MusicFolder folder)
 {
     return folder.ParentFolder == null ? folder.Name : _getFullPathToLeaf(folder.ParentFolder) + "=>" + folder.Name;
 }