Integreat.Shared.Services.Loader.LanguagesLoader.Load C# (CSharp) Method

Load() public method

public Load ( bool forceRefresh = false ) : Task>
forceRefresh bool
return Task>
        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>());
        }
    }