private void EnsureTrackFolder(TrackFile trackFile, Artist artist, Album album, string filePath) { var trackFolder = Path.GetDirectoryName(filePath); var albumFolder = _buildFileNames.BuildAlbumPath(artist, album); var artistFolder = artist.Path; var rootFolder = new OsPath(artistFolder).Directory.FullPath; if (!_diskProvider.FolderExists(rootFolder)) { throw new RootFolderNotFoundException(string.Format("Root folder '{0}' was not found.", rootFolder)); } var changed = false; var newEvent = new TrackFolderCreatedEvent(artist, trackFile); if (!_diskProvider.FolderExists(artistFolder)) { CreateFolder(artistFolder); newEvent.ArtistFolder = artistFolder; changed = true; } if (artistFolder != albumFolder && !_diskProvider.FolderExists(albumFolder)) { CreateFolder(albumFolder); newEvent.AlbumFolder = albumFolder; changed = true; } if (albumFolder != trackFolder && !_diskProvider.FolderExists(trackFolder)) { CreateFolder(trackFolder); newEvent.TrackFolder = trackFolder; changed = true; } if (changed) { _eventAggregator.PublishEvent(newEvent); } }