mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2026-04-06 06:55:04 +00:00
Version 4.12.2 Dropped Windows.Web.Http.HtpClient
This commit is contained in:
parent
014f57ee1a
commit
9c55597a16
10 changed files with 199 additions and 280 deletions
|
|
@ -3,14 +3,17 @@
|
|||
// Licensed under the Microsoft Public License (Ms-PL)
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
#if WINDOWS_UWP
|
||||
using Windows.Web.Http;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Media.Imaging;
|
||||
#else
|
||||
using System.Net.Http;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
#endif
|
||||
|
|
@ -36,7 +39,26 @@ namespace MapControl
|
|||
}
|
||||
else if (uri.Scheme == "http" || uri.Scheme == "https")
|
||||
{
|
||||
image = await LoadHttpImageAsync(uri);
|
||||
using (var response = await HttpClient.GetAsync(uri))
|
||||
{
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
if (ImageAvailable(response.Headers))
|
||||
{
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
await response.Content.CopyToAsync(stream);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
image = await LoadImageAsync(stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("ImageLoader: {0}: {1} {2}", uri, (int)response.StatusCode, response.ReasonPhrase);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -51,23 +73,50 @@ namespace MapControl
|
|||
return image;
|
||||
}
|
||||
|
||||
private static async Task<ImageSource> LoadHttpImageAsync(Uri uri)
|
||||
internal class ImageStream : MemoryStream
|
||||
{
|
||||
ImageSource image = null;
|
||||
public TimeSpan? MaxAge { get; set; }
|
||||
}
|
||||
|
||||
using (var response = await HttpClient.GetAsync(uri))
|
||||
internal static async Task<ImageStream> LoadImageStreamAsync(Uri uri)
|
||||
{
|
||||
ImageStream stream = null;
|
||||
|
||||
try
|
||||
{
|
||||
if (!response.IsSuccessStatusCode)
|
||||
using (var response = await HttpClient.GetAsync(uri).ConfigureAwait(false))
|
||||
{
|
||||
Debug.WriteLine("ImageLoader: {0}: {1} {2}", uri, (int)response.StatusCode, response.ReasonPhrase);
|
||||
}
|
||||
else if (ImageAvailable(response.Headers))
|
||||
{
|
||||
image = await LoadImageAsync(response.Content);
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
stream = new ImageStream();
|
||||
|
||||
if (ImageAvailable(response.Headers))
|
||||
{
|
||||
await response.Content.CopyToAsync(stream).ConfigureAwait(false);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
stream.MaxAge = response.Headers.CacheControl?.MaxAge;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("ImageLoader: {0}: {1} {2}", uri, (int)response.StatusCode, response.ReasonPhrase);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine("ImageLoader: {0}: {1}", uri, ex.Message);
|
||||
}
|
||||
|
||||
return image;
|
||||
return stream;
|
||||
}
|
||||
|
||||
private static bool ImageAvailable(HttpResponseHeaders responseHeaders)
|
||||
{
|
||||
IEnumerable<string> tileInfo;
|
||||
|
||||
return !responseHeaders.TryGetValues("X-VE-Tile-Info", out tileInfo) || !tileInfo.Contains("no-tile");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue