public override async Task <IMedia> PrepareMediaAsync(IMedia media, CancellationToken cancellationToken = default) { if (media.GetStream == null) // It is a link to the external file { return(media); } // It is a file itself var fileName = Path.Combine(Path.GetTempPath(), new Random().Next() + media.Uri); try { var streamInfo = media.GetStream(); if (streamInfo == null) { return(null); } // WPF can show media only from local file, not from memory // So we need to copy this file to disk using (streamInfo.Stream) { using (var fs = File.Create(fileName)) { await streamInfo.Stream.CopyToAsync(fs, StreamCopyBufferSize, cancellationToken); } } } catch (IOException exc) { ShowMessage(exc.Message); return(null); } catch (InvalidDataException exc) { ShowMessage(exc.Message); return(null); } catch (IndexOutOfRangeException exc) { ShowMessage(exc.Message); return(null); } _mediaFiles.Add(fileName); return(new Media(fileName)); }
public override async Task <IMedia> PrepareMedia(IMedia media) { if (media.GetStream == null) // Это ссылка на внешний файл { return(media); } // Это сам файл var fileName = Path.Combine(Path.GetTempPath(), new Random().Next() + media.Uri); var streamInfo = media.GetStream(); if (streamInfo == null) { return(null); } try { using (streamInfo.Stream) { using (var fs = File.Create(fileName)) { await streamInfo.Stream.CopyToAsync(fs); } } } catch (IOException exc) { ShowMessage(exc.Message); return(null); } _mediaFiles.Add(fileName); return(new Media(fileName)); }
public override IMedia PrepareMedia(IMedia media, string type) { if (media.GetStream == null) // Это ссылка на внешний файл { return(media); } if (_mediaFiles.TryGetValue(media.Uri, out string fileName)) { return(new Media(fileName)); } // Это сам файл fileName = Path.Combine(Path.GetTempPath(), new Random().Next() + media.Uri); if (fileName.Length >= MAX_PATH) { fileName = fileName.Substring(0, MAX_PATH - 1); } using (var fs = File.Create(fileName)) { var stream = media.GetStream(); if (stream != null) { using (stream.Stream) { stream.Stream.CopyTo(fs); } } } _mediaFiles[media.Uri] = fileName; return(new Media(fileName)); }