public async Task<List<Language>> Load(bool forceRefresh = false)
{
var languagesCount = await _persistenceService.GetLanguagesCount(_location);
if (!forceRefresh && languagesCount != 0 &&
Preferences.LastLanguageUpdateTime(_location).AddHours(4) >= DateTime.Now)
{
return await _persistenceService.GetLanguages(_location);
;
}
var networkLanguages = CrossConnectivity.Current.IsConnected
? await Policy
.Handle<WebException>()
.WaitAndRetryAsync
(
retryCount: 5,
sleepDurationProvider: retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
)
.ExecuteAsync(
async () =>
await _networkService.GetLanguages(_location))
: null;
if (networkLanguages.IsNullOrEmpty())
{
return languagesCount == 0
? new List<Language>()
: await _persistenceService.GetLanguages(_location).DefaultIfFaulted(new List<Language>());
}
//set language id so that we replace the language and dont add duplicates into the database!
Debug.Assert(networkLanguages != null, "networkLanguages != null");
foreach (var language in networkLanguages)
{
language.Location = _location;
language.LocationId = _location.Id;
language.PrimaryKey = _location.Id + "_" + language.Id;
}
await _persistenceService.InsertAll(networkLanguages);
Preferences.SetLastLanguageUpdateTime(_location);
return await _persistenceService.GetLanguages(_location).DefaultIfFaulted(new List<Language>());
}
}