private string GetPlatformString(NStackPlatform platform) { return(platform switch { var x when x == NStackPlatform.Web || x == NStackPlatform.Backend => "web", NStackPlatform.Mobile => "windows", _ => throw new ArgumentException($"Unknown platform {platform:g}") });
public async Task <DataAppOpenWrapper> AppOpenAsync <TSection>(NStackPlatform platform, Guid userId, string version, string environment = "production", bool developmentEnvironment = false, bool productionEnvironment = true) where TSection : ResourceItem, new() { if (string.IsNullOrWhiteSpace(version) && (platform != NStackPlatform.Web || platform != NStackPlatform.Backend)) { throw new ArgumentException("Version is required on all platforms except web", nameof(version)); } if (productionEnvironment && developmentEnvironment) { throw new ArgumentException($"{nameof(productionEnvironment)} and {nameof(developmentEnvironment)} can't both be true"); } var request = new RestRequest("api/v2/open", Method.Post); request.AddHeader("N-Meta", $"{GetPlatformString(platform)};{environment};"); request.AddStringBody($"platform={GetPlatformString(platform)}&guid={userId}&version={version}&old_version={GetOldVersion(version)}&last_updated={GetLastUpdatedString()}&dev={developmentEnvironment}&test={!productionEnvironment}", "application/x-www-form-urlencoded"); var response = await _repository.DoRequestAsync <DataAppOpenWrapper>(request); if (response == null) { return(new DataAppOpenWrapper()); } _memoryCache.Set <DateTime>(LastUpdatedCacheKey, DateTime.UtcNow); _memoryCache.Set <string>(OldVersionCacheKey, version); // Fetch and store all updated localizations into the memory IEnumerable <Task <DataMetaWrapper <TSection> > > localizationFetches = response.Data.Localize.Where(l => l.ShouldUpdate).Select(GetLocalizationAsync <TSection>); await Task.WhenAll(localizationFetches); return(response); }
public async Task TestCorrectUrl(NStackPlatform platform, string expectedTranslation) { await _service.GetLanguagesAsync(platform); _repository.Verify(r => r.DoRequestAsync <DataWrapper <List <ResourceData> > >(It.Is <RestRequest>(r => r.Resource.EndsWith(expectedTranslation)), It.IsAny <Action <HttpStatusCode> >())); }
public Task <DataMetaWrapper <ResourceItem> > GetResourceAsync(string locale, NStackPlatform platform) => GetResourceAsync <ResourceItem>(locale, platform);
public async Task <DataMetaWrapper <TSection> > GetResourceAsync <TSection>(string locale, NStackPlatform platform) where TSection : ResourceItem, new() { if (locale == null) { throw new ArgumentNullException(locale); } var languages = await GetLanguagesAsync(platform); var localeLanguage = languages.Data.FirstOrDefault(l => l.Language.Locale.Equals(locale)); if (localeLanguage == null) { return(new DataMetaWrapper <TSection>()); } return(await GetResourceAsync <TSection>(localeLanguage.Id)); }
public Task <DataWrapper <List <ResourceData> > > GetLanguagesAsync(NStackPlatform platform) { var req = new RestRequest($"api/v2/content/localize/resources/platforms/{platform.ToString().ToLower()}"); return(_repository.DoRequestAsync <DataWrapper <List <ResourceData> > >(req)); }
public Task <DataMetaWrapper <ResourceItem> > GetDefaultResourceAsync(NStackPlatform platform) => GetDefaultResourceAsync <ResourceItem>(platform);
public async Task <DataMetaWrapper <TSection> > GetDefaultResourceAsync <TSection>(NStackPlatform platform) where TSection : ResourceItem, new() { var languages = await GetLanguagesAsync(platform); var defaultLanguage = languages.Data.First(l => l.Language.IsDefault); return(await GetResourceAsync <TSection>(defaultLanguage.Id)); }
public Task <DataAppOpenWrapper> AppOpenAsync(NStackPlatform platform, Guid userId, string version, string environment = "production", bool developmentEnvironment = false, bool productionEnvironment = true) => AppOpenAsync <ResourceItem>(platform, userId, version, environment, developmentEnvironment, productionEnvironment);