Пример #1
0
 public HTMLMediaElement(Document owner, String name)
     : base(owner, name)
 {
     _src     = new BoundLocation(this, AttributeNames.Src);
     _network = MediaNetworkState.Empty;
     RegisterAttributeObserver(AttributeNames.Src, value => Load());
 }
Пример #2
0
        /// <summary>
        /// Loads the media specified for this element.
        /// </summary>
        public void Load()
        {
            var src = CurrentSource;

            //TODO More complex check if something is already loading (what is loading, cancel?, ...)
            //see: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-load
            this.CancelTasks();

            if (src != null)
            {
                _network = MediaNetworkState.Idle;
                var url     = new Url(src);
                var request = this.CreateRequestFor(url);
                _network = MediaNetworkState.Loading;
                this.LoadResource <TResource>(request).ContinueWith(m =>
                {
                    if (m.IsFaulted || m.Result == null)
                    {
                        _media   = default(TResource);
                        _network = MediaNetworkState.NoSource;
                    }
                    else
                    {
                        _media = m.Result;
                    }

                    this.FireLoadOrErrorEvent(m);
                });
            }
        }
Пример #3
0
        /// <summary>
        /// Loads the media specified for this element.
        /// </summary>
        public void Load()
        {
            //TODO More complex check if something is already loading (what is loading, cancel?, ...)
            //see: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-load
            if (_resourceTask != null)
            {
                return;
            }

            var src = CurrentSource;

            if (src != null)
            {
                _network = MediaNetworkState.Idle;
                var url = this.HyperRef(src);
                _resourceTask = Owner.Options.LoadResource <TResource>(url);
                _network      = MediaNetworkState.Loading;
                _resourceTask.ContinueWith(_ =>
                {
                    if (_.Result == null)
                    {
                        _network = MediaNetworkState.NoSource;
                    }

                    this.FireSimpleEvent(EventNames.Load);
                });
            }
        }
Пример #4
0
        async Task <TResource> LoadAsync(Url url, CancellationToken cancel)
        {
            var media = await Owner.Options.LoadResource <TResource>(url, cancel).ConfigureAwait(false);

            if (media == null)
            {
                _network = MediaNetworkState.NoSource;
            }

            this.FireSimpleEvent(EventNames.Load);
            return(media);
        }
Пример #5
0
        void FinishLoading(Task <TResource> task)
        {
            _media = default(TResource);

            if (task.IsCompleted && !task.IsFaulted)
            {
                _media = task.Result;
            }

            if (_media == null)
            {
                _network = MediaNetworkState.NoSource;
            }

            this.FireLoadOrErrorEvent(task);
        }
Пример #6
0
        /// <summary>
        /// Loads the media specified for this element.
        /// </summary>
        public void Load()
        {
            var source = CurrentSource;

            //TODO More complex check if something is already loading (what is loading, cancel?, ...)
            //see: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-load
            this.CancelTasks();

            if (source == null)
            {
                return;
            }

            _network = MediaNetworkState.Idle;
            var url     = new Url(source);
            var request = this.CreateRequestFor(url);

            _network = MediaNetworkState.Loading;
            this.LoadResource <TResource>(request).
            ContinueWith(FinishLoading);
        }
Пример #7
0
        void UpdateSource(String value)
        {
            //TODO More complex check if something is already loading (what is loading, cancel?, ...)
            //see: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-load

            if (_download != null && !_download.IsCompleted)
            {
                _download.Cancel();
            }

            var document = Owner;

            _network = MediaNetworkState.Idle;

            if (value != null && document != null)
            {
                var loader = document.Loader;

                if (loader != null)
                {
                    var url     = new Url(value);
                    var request = this.CreateRequestFor(url);
                    _network  = MediaNetworkState.Loading;
                    _download = loader.DownloadAsync(request);
                    var task = this.ProcessResource <TResource>(_download, result =>
                    {
                        _media = result;

                        if (_media == null)
                        {
                            _network = MediaNetworkState.NoSource;
                        }
                    });
                    document.DelayLoad(task);
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Loads the media specified for this element.
        /// </summary>
        public void Load()
        {
            //TODO More complex check if something is already loading (what is loading, cancel?, ...)
            //see: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-load
            if (_resourceTask != null)
            {
                return;
            }
            else if (_cts != null)
            {
                _cts.Cancel();
            }

            var src = CurrentSource;

            if (src != null)
            {
                _network = MediaNetworkState.Idle;
                var url = new Url(src);
                _cts          = new CancellationTokenSource();
                _network      = MediaNetworkState.Loading;
                _resourceTask = LoadAsync(url, _cts.Token);
            }
        }
Пример #9
0
 public HTMLMediaElement(Document owner, String name, String prefix)
     : base(owner, name, prefix)
 {
     _network = MediaNetworkState.Empty;
     RegisterAttributeObserver(AttributeNames.Src, value => Load());
 }
Пример #10
0
 internal HTMLMediaElement(String name)
     : base(name)
 {
     _network = MediaNetworkState.Empty;
 }
Пример #11
0
 public HTMLMediaElement(Document owner, String name, String prefix)
     : base(owner, name, prefix)
 {
     _network = MediaNetworkState.Empty;
 }