Skip to content

Commit 4c9bbdc

Browse files
authored
Merge pull request #39 from sillsdev/sp-2359-prevent-crash-from-config-file-problems
SP-2359: Do not crash in constructor if config file cannot be upgrade… (#39)
2 parents 136ca6a + 40fc0f0 commit 4c9bbdc

3 files changed

Lines changed: 56 additions & 17 deletions

File tree

.github/workflows/PR.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
on:
22
pull_request:
33
branches: [ master ]
4+
45
jobs:
56
build:
67
strategy:
@@ -14,14 +15,14 @@ jobs:
1415
with:
1516
fetch-depth: 0
1617

17-
- name: Install .NET Core
18-
uses: actions/setup-dotnet@77a48bbb85cd3809790223e895ba4b6cbc110fe8
18+
- name: Install .NET SDK
19+
uses: actions/setup-dotnet@v3
1920
with:
20-
dotnet-version: 5.0.x
21+
dotnet-version: '8.0.x'
2122

2223
- name: Build
2324
run: dotnet build
2425

2526
- name: Test
27+
if: runner.os == 'Windows'
2628
run: dotnet test
27-

src/DesktopAnalytics/Analytics.cs

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Net;
1111
using System.Reflection;
1212
using System.Runtime.InteropServices;
13+
using System.Threading;
1314
using System.Xml.Linq;
1415
using System.Xml.XPath;
1516
using JetBrains.Annotations;
@@ -172,9 +173,23 @@ public Analytics(string apiSecret, UserInfo userInfo, Dictionary<string,
172173
if (AnalyticsSettings.Default.NeedUpgrade)
173174
{
174175
//see http://stackoverflow.com/questions/3498561/net-applicationsettingsbase-should-i-call-upgrade-every-time-i-load
175-
AnalyticsSettings.Default.Upgrade();
176-
AnalyticsSettings.Default.NeedUpgrade = false;
177-
AnalyticsSettings.Default.Save();
176+
try
177+
{
178+
AnalyticsSettings.Default.Upgrade();
179+
AnalyticsSettings.Default.NeedUpgrade = false;
180+
TrySaveSettings();
181+
}
182+
catch (ConfigurationErrorsException e)
183+
{
184+
try
185+
{
186+
Console.WriteLine(e);
187+
}
188+
catch
189+
{
190+
Debug.WriteLine(e);
191+
}
192+
}
178193
}
179194

180195
if (IsNullOrEmpty(AnalyticsSettings.Default.IdForAnalytics))
@@ -195,9 +210,8 @@ public Analytics(string apiSecret, UserInfo userInfo, Dictionary<string,
195210

196211
if (IsNullOrEmpty(AnalyticsSettings.Default.IdForAnalytics))
197212
{
198-
199213
AnalyticsSettings.Default.IdForAnalytics = Guid.NewGuid().ToString();
200-
AnalyticsSettings.Default.Save();
214+
TrySaveSettings();
201215
}
202216

203217
s_locationInfo = new JsonObject();
@@ -236,7 +250,31 @@ public Analytics(string apiSecret, UserInfo userInfo, Dictionary<string,
236250
// See http://issues.bloomlibrary.org/youtrack/issue/BL-4011.
237251

238252
AnalyticsSettings.Default.LastVersionLaunched = versionNumberWithBuild;
239-
AnalyticsSettings.Default.Save();
253+
TrySaveSettings();
254+
}
255+
256+
private static void TrySaveSettings()
257+
{
258+
int retryCount = 0;
259+
do
260+
{
261+
try
262+
{
263+
AnalyticsSettings.Default.Save();
264+
return;
265+
}
266+
catch (Exception e)
267+
{
268+
try
269+
{
270+
Console.WriteLine(e);
271+
}
272+
catch
273+
{
274+
}
275+
Thread.Sleep(300);
276+
}
277+
} while (++retryCount < 3);
240278
}
241279

242280
private void AttemptToGetUserIdSettingsFromDifferentChannel()
@@ -309,7 +347,7 @@ private void AttemptToGetUserIdSettingsFromDifferentChannel()
309347
AnalyticsSettings.Default.LastName = ExtractSetting(AnalyticsSettings.Default.LastName, doc, "LastName");
310348
AnalyticsSettings.Default.LastVersionLaunched = ExtractSetting(AnalyticsSettings.Default.LastVersionLaunched, doc, "LastVersionLaunched");
311349
AnalyticsSettings.Default.Email = ExtractSetting(AnalyticsSettings.Default.Email, doc, "Email");
312-
AnalyticsSettings.Default.Save();
350+
TrySaveSettings();
313351
return;
314352
}
315353
catch (Exception)

src/DesktopAnalyticsTests/UserInfoTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class UserInfoTests
1111
[Test]
1212
public void CreateSanitized_AllFieldsNull_NoChange()
1313
{
14-
var orig = new UserInfo() { Email = null, FirstName = null, LastName = null, OtherProperties = null };
14+
var orig = new UserInfo { Email = null, FirstName = null, LastName = null, OtherProperties = null };
1515
var sanitized = orig.CreateSanitized();
1616
Assert.IsNull(sanitized.Email);
1717
Assert.IsNull(sanitized.FirstName);
@@ -22,7 +22,7 @@ public void CreateSanitized_AllFieldsNull_NoChange()
2222
[Test]
2323
public void CreateSanitized_AllFieldsWhitespace_NoChange()
2424
{
25-
var orig = new UserInfo() { Email = " ", FirstName = "", LastName = " ", OtherProperties = new AttributeDictionary() };
25+
var orig = new UserInfo { Email = " ", FirstName = "", LastName = " ", OtherProperties = new AttributeDictionary() };
2626
orig.OtherProperties.Add(" ", " \r\n ");
2727
var sanitized = orig.CreateSanitized();
2828
Assert.AreEqual(" ", sanitized.Email);
@@ -34,7 +34,7 @@ public void CreateSanitized_AllFieldsWhitespace_NoChange()
3434
[Test]
3535
public void CreateSanitized_AllFieldsSingleLetter_FirstNameAndLastNameHashed_NoChagneToOtherFields()
3636
{
37-
var orig = new UserInfo() { Email = "e", FirstName = "f", LastName = "L", OtherProperties = new AttributeDictionary() };
37+
var orig = new UserInfo { Email = "e", FirstName = "f", LastName = "L", OtherProperties = new AttributeDictionary() };
3838
orig.OtherProperties.Add("a", "b");
3939
var sanitized = orig.CreateSanitized();
4040
Assert.AreEqual("e", sanitized.Email);
@@ -48,7 +48,7 @@ public void CreateSanitized_AllFieldsSingleLetter_FirstNameAndLastNameHashed_NoC
4848
[Test]
4949
public void CreateSanitized_NormalData_FirstNameAndLastNameHashed_EmailDomainPreserved()
5050
{
51-
var orig = new UserInfo() { Email = "Wanda_Finkelstein@gumbyland.org", FirstName = "Wanda", LastName = "Finkelstein", OtherProperties = new AttributeDictionary() };
51+
var orig = new UserInfo { Email = "Wanda_Finkelstein@gumbyland.org", FirstName = "Wanda", LastName = "Finkelstein", OtherProperties = new AttributeDictionary() };
5252
orig.OtherProperties.Add("Important", "stuff");
5353
var sanitized = orig.CreateSanitized();
5454
Assert.AreEqual("@gumbyland.org", sanitized.Email);
@@ -64,7 +64,7 @@ public void CreateSanitized_NormalData_FirstNameAndLastNameHashed_EmailDomainPre
6464
[Test]
6565
public void CreateSanitized_InvalidEmailAddressMissingDomain_EmailIsAtSign()
6666
{
67-
var orig = new UserInfo() { Email = "Buck@", FirstName = "Buck", LastName = "", OtherProperties = new AttributeDictionary() };
67+
var orig = new UserInfo { Email = "Buck@", FirstName = "Buck", LastName = "", OtherProperties = new AttributeDictionary() };
6868
var sanitized = orig.CreateSanitized();
6969
Assert.AreEqual("@", sanitized.Email);
7070
Assert.IsTrue(sanitized.FirstName.StartsWith("B"));
@@ -77,7 +77,7 @@ public void CreateSanitized_InvalidEmailAddressMissingDomain_EmailIsAtSign()
7777
[Test]
7878
public void CreateSanitized_InvalidEmailAddressMultipleAtSigns_EmailIsEverythingAfterFirstAtSign()
7979
{
80-
var orig = new UserInfo() { Email = "What@is@this@nonesense@.c.o.m", FirstName = "", LastName = "" };
80+
var orig = new UserInfo { Email = "What@is@this@nonesense@.c.o.m", FirstName = "", LastName = "" };
8181
var sanitized = orig.CreateSanitized();
8282
Assert.AreEqual("@is@this@nonesense@.c.o.m", sanitized.Email);
8383
Assert.AreEqual("", sanitized.FirstName);

0 commit comments

Comments
 (0)