コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: DesktopManager.cs プロジェクト: wurunduk/SI
        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));
        }
コード例 #3
0
        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));
        }