using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Crowdin.Plugin.Helpers.PluginLocalization; using Crowdin.Plugin.Models; using Crowdin.Plugin.Server_API.Helpers; using Crowdin.Plugin.Server_API.Models; using Crowdin.Plugin.Server_API.Models.SourceStrings; #nullable enable namespace Crowdin.Plugin.Server_API.Services { public class SourceStringsApiService : BaseApiService { private static string BaseUri => SettingsHelper.GetUri("strings", SettingsHelper.GetProjectId()); private readonly CrowdinHttpClient _httpClient = CrowdinHttpClient.Default; public Task> ListStrings( string? croQl = null, int? labelId = null, int limit = 500, int? branchId = null, CancellationToken ct = default) { var url = BaseUri; if (!string.IsNullOrWhiteSpace(croQl)) { url += url.Contains('?') ? $"&croql={croQl}" : $"?croql={croQl}"; } if (labelId.HasValue) { url += url.Contains('?') ? $"&labelIds={labelId.Value}" : $"?labelIds={labelId.Value}"; } if (branchId.HasValue) { url += url.Contains('?') ? $"&branchId={branchId.Value}" : $"?branchId={branchId.Value}"; } return _httpClient.ListAllAsync(url, limit, ct); } public async Task> UploadStrings( UploadStringsRequest payload, CancellationToken ct) { if (SettingsHelper.GetProjectType() is not ProjectType.StringBased) { return OperationResult .CreateError(LocalizationHelper .GetLocalStringByKey(LocalKeys.error_project_not_string_based)); } StringUploadResponseModel response = await _httpClient.PostAsync($"{BaseUri}/uploads", payload, ct); return OperationResult.CreateSuccess(response); } public async Task> CheckUploadStringsStatus( string uploadId, CancellationToken ct) { if (SettingsHelper.GetProjectType() is not ProjectType.StringBased) { return OperationResult .CreateError(LocalizationHelper .GetLocalStringByKey(LocalKeys.error_project_not_string_based)); } StringUploadResponseModel response = await _httpClient.GetAsync($"{BaseUri}/uploads/{uploadId}", ct); return OperationResult.CreateSuccess(response); } } }