public AudioTrackContract DownloadAudioBookTrack(DownloadAudioBookTrackContract requestContract) { m_authorizationManager.AuthorizeBook(requestContract.BookId); var audioType = (AudioType)requestContract.RequestedAudioType; var book = m_bookVersionRepository.GetBookWithLastVersion(requestContract.BookId); TrackRecording recording = m_bookVersionRepository.GetRecordingByTrackAndAudioType(requestContract.BookId, requestContract.TrackPosition, audioType); if (recording == null) { var message = $"Cannot locate recording'{requestContract.TrackPosition}' for book:'{requestContract.BookId}' of requested type:'{requestContract.RequestedAudioType}'"; if (m_log.IsErrorEnabled) { m_log.ErrorFormat(message); } throw new ArgumentException(message); } var stream = m_fileSystemManager.GetResource(book.Guid, book.LastVersion.VersionId, recording.FileName, ResourceType.Audio); return(new AudioTrackContract { FileName = recording.FileName, FileData = stream, Lenght = recording.Length, MimeType = recording.MimeType, }); }
public virtual IList <Track> GetTracksForBookVersion(long bookVersionId) { using (var session = GetSession()) { Track trackAlias = null; TrackRecording recordingAlias = null; var query = session.QueryOver(() => trackAlias) .JoinAlias(() => trackAlias.Recordings, () => recordingAlias, JoinType.LeftOuterJoin) .Where(() => trackAlias.BookVersion.Id == bookVersionId) .Fetch(x => x.Recordings).Eager .OrderBy(x => x.Position).Asc .OrderBy(() => recordingAlias.AudioType).Asc .TransformUsing(Transformers.DistinctRootEntity); return(query.List()); } }
public void StartRecording() { _trackRecording = new TrackRecording(); }