Esempio n. 1
0
        private protected override bool TryOpenSourceAsync(
            CancellationToken ct,
            int?targetWidth,
            int?targetHeight,
            out Task <ImageData> asyncImage)
        {
            if (WebUri is {} uri)
            {
                var hasFileScheme = uri.IsAbsoluteUri && uri.Scheme == "file";

                // Local files are assumed as coming from the remote server
                var newUri = hasFileScheme switch
                {
                    true => new Uri(uri.PathAndQuery.TrimStart('/'), UriKind.Relative),
                    _ => uri
                };

                asyncImage = AssetResolver.ResolveImageAsync(this, newUri, ScaleOverride);

                return(true);
            }

            if (_stream is {} stream)
            {
                void OnProgress(ulong position, ulong?length)
                {
                    if (position > 0 && length is { } actualLength)
                    {
                        var percent = (int)((position / (float)actualLength) * 100);
                        RaiseDownloadProgress(percent);
                    }
                }

                var streamWithContentType = stream.TrySetContentType(ContentType);

                asyncImage = OpenFromStream(streamWithContentType, OnProgress, ct);

                return(true);
            }

            asyncImage = default;
            return(false);
        }
Esempio n. 2
0
        private protected override bool TryOpenSourceAsync(int?targetWidth, int?targetHeight, out Task <ImageData> asyncImage)
        {
            var uri = WebUri;

            if (uri != null)
            {
                var hasFileScheme = uri.IsAbsoluteUri && uri.Scheme == "file";

                // Local files are assumed as coming from the remote server
                var newUri = hasFileScheme switch
                {
                    true => new Uri(uri.PathAndQuery.TrimStart('/'), UriKind.Relative),
                    _ => uri
                };

                asyncImage = AssetResolver.ResolveImageAsync(newUri, ScaleOverride);
                return(true);
            }

            asyncImage = default;
            return(false);
        }