private void EnsureBookFolder(BookFile bookFile, Author author, Book book, string filePath) { var trackFolder = Path.GetDirectoryName(filePath); var bookFolder = _buildFileNames.BuildBookPath(author); var authorFolder = author.Path; var rootFolder = new OsPath(authorFolder).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(author, bookFile); _rootFolderWatchingService.ReportFileSystemChangeBeginning(authorFolder, bookFolder, trackFolder); if (!_diskProvider.FolderExists(authorFolder)) { CreateFolder(authorFolder); newEvent.AuthorFolder = authorFolder; changed = true; } if (authorFolder != bookFolder && !_diskProvider.FolderExists(bookFolder)) { CreateFolder(bookFolder); newEvent.BookFolder = bookFolder; changed = true; } if (bookFolder != trackFolder && !_diskProvider.FolderExists(trackFolder)) { CreateFolder(trackFolder); newEvent.TrackFolder = trackFolder; changed = true; } if (changed) { _eventAggregator.PublishEvent(newEvent); } }