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); }
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); }