Exemple #1
0
 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}")
     });
Exemple #2
0
    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);
    }
Exemple #3
0
    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> >()));
    }
Exemple #4
0
 public Task <DataMetaWrapper <ResourceItem> > GetResourceAsync(string locale, NStackPlatform platform) => GetResourceAsync <ResourceItem>(locale, platform);
Exemple #5
0
    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));
    }
Exemple #6
0
    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));
    }
Exemple #7
0
 public Task <DataMetaWrapper <ResourceItem> > GetDefaultResourceAsync(NStackPlatform platform) => GetDefaultResourceAsync <ResourceItem>(platform);
Exemple #8
0
    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));
    }
Exemple #9
0
 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);