/// <summary> /// Gets as index item. /// </summary> /// <param name="episode">The episode.</param> /// <returns>The episode index item view model.</returns> public static EpisodeIndexItemViewModel AsIndexItem( this DBEpisode episode) { bool downloadCompleted = EpisodeMediaInfo.IsDownloadCompleted( episode.FileSizeInBytes, episode.DownloadedBytes); return(new EpisodeIndexItemViewModel( episode.Date, episode.EpisodeId, episode.Title, episode.PendingDownload, downloadCompleted)); }
/// <summary> /// Downloads the episode. /// </summary> /// <param name="episode">The episode.</param> /// <exception cref="Uncas.PodCastPlayer.Utility.UtilityException"></exception> /// <exception cref="Uncas.PodCastPlayer.Repository.RepositoryException"></exception> /// <exception cref="Uncas.PodCastPlayer.AppServices.ServiceException"></exception> private void DownloadEpisode( Episode episode) { Debug.Assert( episode != null, "A non-null episode is required internally."); var fileName = episode.FileName; var relativeFolderPath = Path.Combine( "PodCasts", episode.PodCast.Name); var absoluteFolderPath = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.MyMusic), relativeFolderPath); var filePath = Path.Combine( absoluteFolderPath, fileName); // Gets stream: var podCastStream = this.Downloader.GetEpisodeStream( episode.MediaUrl); // Saves stream: var downloadedBytes = this.saver.SaveStream( filePath, podCastStream.Length, podCastStream.Stream); // Returns info about how it all went: var mediaInfo = new EpisodeMediaInfo { FileSizeInBytes = podCastStream.Length, DownloadedBytes = downloadedBytes }; episode.MediaInfo = mediaInfo; episode.PendingDownload = !mediaInfo.DownloadCompleted; this.EpisodeRepository.UpdateEpisode(episode); }