Skip to content

Commit

Permalink
Download translated files
Browse files Browse the repository at this point in the history
  • Loading branch information
bohdanm-bb committed Mar 22, 2024
1 parent 2dd630d commit 9a32c32
Show file tree
Hide file tree
Showing 7 changed files with 165 additions and 7 deletions.
54 changes: 47 additions & 7 deletions Apps.BWX/Actions/ProjectActions.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using Apps.BWX.Api;
using Apps.BWX.Constants;
using Apps.BWX.Dtos;
using Apps.BWX.Extensions;
using Apps.BWX.Invocables;
using Apps.BWX.Models.Requests.Project;
using Blackbird.Applications.Sdk.Common;
Expand All @@ -10,8 +8,8 @@
using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces;
using Blackbird.Applications.Sdk.Utils.Extensions.Files;
using RestSharp;
using System.IO.Compression;
using Newtonsoft.Json;
using Apps.BWX.Models.Responses.Project;

namespace Apps.BWX.Actions;

Expand Down Expand Up @@ -59,14 +57,14 @@ public async Task<List<ProjectDto>> SearchProjects([ActionParameter] SearchProje
}

[Action("Get project", Description = "Get project")]
public Task<ProjectDto> GetProject([ActionParameter] GetProjectRequest input)
public async Task<ProjectDto> GetProject([ActionParameter] GetProjectRequest input)
{
var request = new BWXRequest($"/api/v3/project/{input.ProjectId}", Method.Get, Creds);
return Client.ExecuteWithErrorHandling<ProjectDto>(request);
return await Client.ExecuteWithErrorHandling<ProjectDto>(request);
}

[Action("Create project", Description = "Create project")]
public Task<ProjectDto> CreateProject([ActionParameter] CreateProjectRequest input)
public async Task<ProjectDto> CreateProject([ActionParameter] CreateProjectRequest input)
{
var request = new BWXRequest($"/api/v3/project?inferDefaultSettings={input?.InferDefaultSettings?.ToString().ToLower() ?? "true"}", Method.Post, Creds);
request.AddJsonBody(new
Expand All @@ -78,7 +76,7 @@ public Task<ProjectDto> CreateProject([ActionParameter] CreateProjectRequest inp
notes = input.Notes,
tags = input.Tags,
});
return Client.ExecuteWithErrorHandling<ProjectDto>(request);
return await Client.ExecuteWithErrorHandling<ProjectDto>(request);
}

[Action("Upload file to project", Description = "Upload file to project")]
Expand Down Expand Up @@ -113,4 +111,46 @@ public async Task<WorkUnitDto> UploadFileToProject(
}));
return (await Client.ExecuteWithErrorHandling<List<WorkUnitDto>>(createWorkUnitRequest)).First();
}

[Action("Change project status", Description = "Change project status")]
public async Task<ProjectDto> ChangeProjectStatus(
[ActionParameter] GetProjectRequest getProjectRequest,
[ActionParameter] ChangeProjectStatusRequest changeProjectStatusRequest)
{
var request = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/status", Method.Post, Creds);
request.AddJsonBody(new
{
newStatus = changeProjectStatusRequest.ProjectStatus,
reason = changeProjectStatusRequest.Reason
});
return await Client.ExecuteWithErrorHandling<ProjectDto>(request);
}

[Action("Download translated files", Description = "Download translated files")]
public async Task<DownloadTranslatedFilesResponse> DownloadTranslatedFiles(
[ActionParameter] GetProjectRequest getProjectRequest,
[ActionParameter] DownloadTranslatedFilesRequest downloadTranslatedFilesRequest)
{
var request = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/download", Method.Get, Creds);

if (downloadTranslatedFilesRequest.Resources != null && downloadTranslatedFilesRequest.Resources.Any())
foreach (var resourceId in downloadTranslatedFilesRequest.Resources)
request.AddQueryParameter("resources", resourceId);

if (downloadTranslatedFilesRequest.Locales != null && downloadTranslatedFilesRequest.Locales.Any())
foreach (var locale in downloadTranslatedFilesRequest.Locales)
request.AddQueryParameter("locales", locale);

var result = await Client.ExecuteWithErrorHandling(request);
using var resultStream = new MemoryStream(result.RawBytes);
var files = await resultStream.GetFilesFromZip();

var translatedFiles = new DownloadTranslatedFilesResponse();
foreach(var file in files)
{
var uploadedFile = await _fileManagementClient.UploadAsync(file.FileStream, MimeMapping.MimeUtility.GetMimeMapping(file.UploadName), file.UploadName);
translatedFiles.TranslatedFiles.Add(uploadedFile);
}
return translatedFiles;
}
}
1 change: 1 addition & 0 deletions Apps.BWX/Apps.BWX.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@
<PackageReference Include="Blackbird.Applications.Sdk.Common" Version="2.5.0" />
<PackageReference Include="Blackbird.Applications.SDK.Extensions.FileManagement" Version="1.0.2-alpha1" />
<PackageReference Include="Blackbird.Applications.Sdk.Utils" Version="1.0.25" />
<PackageReference Include="MimeMapping" Version="3.0.1" />
</ItemGroup>
</Project>
40 changes: 40 additions & 0 deletions Apps.BWX/DataSourceHandlers/ProjectResourcesDataHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Apps.BWX.Models.Requests.Project;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.BWX.DataSourceHandlers
{
public class ProjectResourcesDataHandler : BWXInvocable, IAsyncDataSourceHandler
{
public GetProjectRequest ProjectRequest { get; set; }

public ProjectResourcesDataHandler(InvocationContext invocationContext, [ActionParameter] GetProjectRequest projectRequest) : base(invocationContext)
{
ProjectRequest = projectRequest;
}

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
if (string.IsNullOrEmpty(ProjectRequest?.ProjectId))
throw new ArgumentException("Please select project first!");

var request = new BWXRequest($"/api/v3/project/{ProjectRequest.ProjectId}/resource/simple", Method.Get, Creds);
var projectResources = await Client.ExecuteWithErrorHandling<List<ProjectResourceDto>>(request);

return projectResources.Where(el =>
context.SearchString is null ||
el.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => v.Name);
}
}
}
14 changes: 14 additions & 0 deletions Apps.BWX/Dtos/ProjectResourceDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.BWX.Dtos
{
public class ProjectResourceDto
{
public string Uuid { get; set; }
public string Name { get; set; }
}
}
20 changes: 20 additions & 0 deletions Apps.BWX/Models/Requests/Project/ChangeProjectStatusRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Apps.BWX.DataSourceHandlers.EnumDataHandlers;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Dynamic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.BWX.Models.Requests.Project
{
public class ChangeProjectStatusRequest
{
[Display("Project status")]
[DataSource(typeof(ProjectStatusDataHandler))]
public string ProjectStatus { get; set; }

public string Reason { get; set; }
}
}
21 changes: 21 additions & 0 deletions Apps.BWX/Models/Requests/Project/DownloadTranslatedFilesRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Apps.BWX.DataSourceHandlers;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Dynamic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.BWX.Models.Requests.Project
{
public class DownloadTranslatedFilesRequest
{
[DataSource(typeof(ProjectResourcesDataHandler))]
public List<string>? Resources { get; set; }

[Display("Locales")]
[DataSource(typeof(LanguageDataHandler))]
public List<string>? Locales { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Files;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.BWX.Models.Responses.Project
{
public class DownloadTranslatedFilesResponse
{
public DownloadTranslatedFilesResponse()
{
TranslatedFiles = new List<FileReference>();
}


[Display("Translated files")]
public List<FileReference> TranslatedFiles { get; set; }
}
}

0 comments on commit 9a32c32

Please sign in to comment.