Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 2803cb4

Browse files
[Bug] GravatarImageSource throws exception when offline (#1816)
* [Bug] GravatarImageSource throws exception when offline #1770 Fix Nullable * ConfigureAwait, revert sln
1 parent b767630 commit 2803cb4

File tree

7 files changed

+26
-17
lines changed

7 files changed

+26
-17
lines changed

samples/XCT.Sample.Android/SplashActivity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Android.App;
1+
#nullable enable
2+
using Android.App;
23
using Android.Content;
34
using Android.Content.PM;
45
using Android.OS;

src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Xamarin.CommunityToolkit.UnitTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netcoreapp2.1;netcoreapp3.1;net461</TargetFrameworks>
4+
<TargetFrameworks>netcoreapp3.1;net461</TargetFrameworks>
55
<IsPackable>false</IsPackable>
66
</PropertyGroup>
77

src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/StatusBar/PlatformStatusBarEffect.ios.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,9 @@ static void UpdateStatusBarAppearance()
9999
}
100100
}
101101

102-
static void UpdateStatusBarAppearance(UIWindow window)
102+
static void UpdateStatusBarAppearance(UIWindow? window)
103103
{
104-
var vc = window.RootViewController ?? throw new NullReferenceException(nameof(window.RootViewController));
104+
var vc = window?.RootViewController ?? throw new NullReferenceException(nameof(window.RootViewController));
105105
while (vc.PresentedViewController != null)
106106
{
107107
vc = vc.PresentedViewController;

src/CommunityToolkit/Xamarin.CommunityToolkit/Views/GravatarImageSource/Shared/GravatarImageSourceHandler.android.ios.macos.tizen.uwp.wpf.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Diagnostics;
23
using System.IO;
34
using System.Net.Http;
45
using System.Security.Cryptography;
@@ -12,8 +13,8 @@ namespace Xamarin.CommunityToolkit.UI.Views
1213
public partial class GravatarImageSourceHandler
1314
{
1415
const string requestUriFormat = "https://www.gravatar.com/avatar/{0}?s={1}&d={2}";
15-
static readonly Lazy<HttpClient> lazyHttp = new Lazy<HttpClient>(() => new HttpClient());
16-
static readonly SemaphoreSlim semaphore = new SemaphoreSlim(1);
16+
static readonly Lazy<HttpClient> lazyHttp = new(() => new HttpClient());
17+
static readonly SemaphoreSlim semaphore = new(1);
1718

1819
public static async Task<FileInfo?> LoadInternal(ImageSource imageSource, float scale, string cacheDirectory)
1920
{
@@ -26,7 +27,7 @@ public partial class GravatarImageSourceHandler
2627
{
2728
_ = gis.Email ?? throw new InvalidOperationException($"{nameof(gis.Email)} is not initialized");
2829
var imageBytes = await GetGravatarAsync(gis.Email, gis.Size, scale, gis.Default);
29-
await SaveImage(cacheFileInfo, imageBytes ?? Array.Empty<byte>());
30+
await SaveImage(cacheFileInfo, imageBytes);
3031
}
3132

3233
return cacheFileInfo;
@@ -67,7 +68,7 @@ static async Task<bool> UseCacheFile(bool cachingEnabled, TimeSpan cacheValidity
6768
{
6869
await semaphore.WaitAsync();
6970

70-
if (!file.Directory.Exists)
71+
if (file.Directory is { Exists: false })
7172
file.Directory.Create();
7273
}
7374
finally
@@ -87,12 +88,20 @@ static string CacheFileName(GravatarImageSource gis, float scale)
8788
static async Task<byte[]> GetGravatarAsync(string email, int size, float scale, DefaultGravatar defaultGravatar)
8889
{
8990
var requestUri = GetGravatarUri(email, size, scale, defaultGravatar);
90-
using var response = await lazyHttp.Value.GetAsync(requestUri);
91+
try
92+
{
93+
using var response = await lazyHttp.Value.GetAsync(requestUri);
9194

92-
if (!response.IsSuccessStatusCode)
93-
return Array.Empty<byte>();
95+
if (!response.IsSuccessStatusCode)
96+
return Array.Empty<byte>();
9497

95-
return await response.Content.ReadAsByteArrayAsync();
98+
return await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
99+
}
100+
catch (Exception e)
101+
{
102+
Trace.WriteLine(e.Message);
103+
return Array.Empty<byte>();
104+
}
96105
}
97106

98107
static string GetGravatarUri(string email, int size, float scale, DefaultGravatar defaultGravatar)
@@ -113,10 +122,9 @@ static string GetMd5Hash(string str)
113122

114123
var sBuilder = new StringBuilder();
115124

116-
if (hash != null)
125+
foreach (var hashByte in hash)
117126
{
118-
for (var i = 0; i < hash.Length; i++)
119-
sBuilder.Append(hash[i].ToString("x2"));
127+
sBuilder.Append(hashByte.ToString("x2"));
120128
}
121129

122130
return sBuilder.ToString();

src/CommunityToolkit/Xamarin.CommunityToolkit/Views/MediaElement/iOS/MediaElementRenderer.ios.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ void UpdateVolume()
312312
if (avPlayerViewController.Player != null)
313313
avPlayerViewController.Player.Volume = (float)Element.Volume;
314314
}
315+
315316
void UpdateSpeed()
316317
{
317318
if (avPlayerViewController.Player != null)

src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.ios.macos.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Threading.Tasks;
33
using Xamarin.CommunityToolkit.UI.Views.Helpers;
4-
using Xamarin.CommunityToolkit.UI.Views.Helpers;
54
using Xamarin.CommunityToolkit.UI.Views.Options;
65
using Xamarin.CommunityToolkit.Views.Snackbar.Helpers;
76
using Xamarin.Forms;

src/Markup/Xamarin.CommunityToolkit.Markup.UnitTests/Xamarin.CommunityToolkit.Markup.UnitTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netcoreapp2.1;netcoreapp3.1;net461</TargetFrameworks>
4+
<TargetFrameworks>netcoreapp3.1;net461</TargetFrameworks>
55
<IsPackable>false</IsPackable>
66
</PropertyGroup>
77

0 commit comments

Comments
 (0)