Skip to content

Commit f33d6ee

Browse files
Merge pull request #23 from crowdin/feature/more-methods
Add methods: String Translations, Reports
2 parents 220c0f4 + 9fefc7f commit f33d6ee

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2403
-20
lines changed

Crowdin.sln.DotSettings.user

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
23
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;</s:String>
34
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
45
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=5496421d_002D469b_002D475a_002D92e0_002D082040a541e9/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
56
&lt;Solution /&gt;&#xD;
67
&lt;/SessionState&gt;</s:String>
8+
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=tests_002FCrowdin_002EApi_002ETests_002FCore_002FResources_002FReports/@EntryIndexedValue">True</s:Boolean>
9+
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=tests_002FCrowdin_002EApi_002ETests_002FCore_002FResources_002FSourceFiles/@EntryIndexedValue">False</s:Boolean>
10+
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=tests_002FCrowdin_002EApi_002ETests_002FCore_002FResources_002FTranslations/@EntryIndexedValue">False</s:Boolean>
711

812

913

src/Crowdin.Api/Core/Converters/DescriptionEnumConverter.cs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,30 @@ public override bool CanConvert(Type objectType)
1919

2020
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
2121
{
22-
if (value != null)
22+
if (value is null) return;
23+
Type valueType = value.GetType();
24+
25+
if (valueType.IsDefined(typeof(StrictStringRepresentation)))
2326
{
24-
if (value
25-
.GetType()
26-
.GetMember(value.ToString())
27-
.First()
28-
.IsDefined(typeof(DescriptionAttribute), false))
29-
{
30-
writer.WriteValue((value as Enum).ToDescriptionString());
31-
}
32-
else
27+
string? memberName = Enum.GetName(valueType, value);
28+
29+
if (memberName is null)
3330
{
34-
writer.WriteValue(Convert.ToInt32(value));
31+
throw new Exception($"Value {value} not found on enum type {valueType.Name}");
3532
}
33+
34+
writer.WriteValue(memberName);
35+
}
36+
else if (valueType
37+
.GetMember(value.ToString())
38+
.First()
39+
.IsDefined(typeof(DescriptionAttribute), false))
40+
{
41+
writer.WriteValue((value as Enum).ToDescriptionString());
42+
}
43+
else
44+
{
45+
writer.WriteValue(Convert.ToInt32(value));
3646
}
3747
}
3848

@@ -71,4 +81,10 @@ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer
7181
throw new ArgumentException();
7282
}
7383
}
84+
85+
[AttributeUsage(AttributeTargets.Enum)]
86+
public class StrictStringRepresentation : Attribute
87+
{
88+
89+
}
7490
}

src/Crowdin.Api/CrowdinApiClient.cs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
using Crowdin.Api.Core.Converters;
1313
using Crowdin.Api.Languages;
1414
using Crowdin.Api.ProjectsGroups;
15+
using Crowdin.Api.Reports;
16+
using Crowdin.Api.Screenshots;
1517
using Crowdin.Api.SourceFiles;
18+
using Crowdin.Api.SourceStrings;
1619
using Crowdin.Api.Storage;
20+
using Crowdin.Api.StringTranslations;
1721
using Crowdin.Api.Translations;
1822
using Crowdin.Api.TranslationStatus;
1923

@@ -32,10 +36,18 @@ public class CrowdinApiClient : ICrowdinApiClient
3236

3337
public ProjectsGroupsApiExecutor ProjectsGroups { get; }
3438

39+
public ReportsApiExecutor Reports { get; }
40+
41+
public ScreenshotsApiExecutor Screenshots { get; }
42+
3543
public SourceFilesApiExecutor SourceFiles { get; }
3644

45+
public SourceStringsApiExecutor SourceStrings { get; }
46+
3747
public StorageApiExecutor Storage { get; }
3848

49+
public StringTranslationsApiExecutor StringTranslations { get; }
50+
3951
public TranslationsApiExecutor Translations { get; }
4052

4153
public TranslationStatusApiExecutor TranslationStatus { get; set; }
@@ -85,8 +97,12 @@ public CrowdinApiClient(CrowdinCredentials credentials)
8597

8698
Languages = new LanguagesApiExecutor(this);
8799
ProjectsGroups = new ProjectsGroupsApiExecutor(this);
100+
Reports = new ReportsApiExecutor(this);
101+
Screenshots = new ScreenshotsApiExecutor(this);
88102
SourceFiles = new SourceFilesApiExecutor(this);
103+
SourceStrings = new SourceStringsApiExecutor(this);
89104
Storage = new StorageApiExecutor(this);
105+
StringTranslations = new StringTranslationsApiExecutor(this);
90106
Translations = new TranslationsApiExecutor(this);
91107
TranslationStatus = new TranslationStatusApiExecutor(this);
92108
}
@@ -130,15 +146,19 @@ public Task<CrowdinApiResult> SendPostRequest(
130146
return SendRequest(request);
131147
}
132148

133-
public Task<CrowdinApiResult> SendPutRequest(string subUrl, object body)
149+
public Task<CrowdinApiResult> SendPutRequest(string subUrl, object? body = null)
134150
{
135151
var request = new HttpRequestMessage
136152
{
137153
Method = HttpMethod.Put,
138-
RequestUri = new Uri(FormRequestUrl(subUrl)),
139-
Content = CreateJsonContent(body)
154+
RequestUri = new Uri(FormRequestUrl(subUrl))
140155
};
141156

157+
if (body != null)
158+
{
159+
request.Content = CreateJsonContent(body);
160+
}
161+
142162
return SendRequest(request);
143163
}
144164

@@ -154,12 +174,12 @@ public Task<CrowdinApiResult> SendPatchRequest(string subUrl, IEnumerable<PatchE
154174
return SendRequest(request);
155175
}
156176

157-
public Task<HttpStatusCode> SendDeleteRequest(string subUrl)
177+
public Task<HttpStatusCode> SendDeleteRequest(string subUrl, IDictionary<string, string>? queryParams = null)
158178
{
159179
var request = new HttpRequestMessage
160180
{
161181
Method = HttpMethod.Delete,
162-
RequestUri = new Uri(FormRequestUrl(subUrl))
182+
RequestUri = new Uri(FormRequestUrl(subUrl, queryParams))
163183
};
164184

165185
return SendRequest(request).ContinueWith(task => task.Result.StatusCode);

src/Crowdin.Api/ICrowdinApiClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ public interface ICrowdinApiClient
1717

1818
Task<CrowdinApiResult> SendPostRequest(string subUrl, object body, IDictionary<string, string>? extraHeaders = null);
1919

20-
Task<CrowdinApiResult> SendPutRequest(string subUrl, object body);
20+
Task<CrowdinApiResult> SendPutRequest(string subUrl, object? body = null);
2121

2222
Task<CrowdinApiResult> SendPatchRequest(string subUrl, IEnumerable<PatchEntry> body);
2323

24-
Task<HttpStatusCode> SendDeleteRequest(string subUrl);
24+
Task<HttpStatusCode> SendDeleteRequest(string subUrl, IDictionary<string, string>? queryParams = null);
2525

2626
Task<CrowdinApiResult> UploadFile(string subUrl, string filename, Stream fileStream);
2727
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+

2+
using System;
3+
using System.ComponentModel;
4+
using JetBrains.Annotations;
5+
using Newtonsoft.Json;
6+
7+
#nullable enable
8+
9+
namespace Crowdin.Api.Reports
10+
{
11+
[PublicAPI]
12+
public class ContributionRawDataGenerateReportRequest : GenerateReportRequest
13+
{
14+
[JsonProperty("name")]
15+
public string Name => "contribution-raw-data";
16+
17+
[JsonProperty("schema")]
18+
#pragma warning disable CS8618
19+
public RequestSchema Schema { get; set; }
20+
#pragma warning restore CS8618
21+
22+
[PublicAPI]
23+
public class RequestSchema
24+
{
25+
[JsonProperty("mode")]
26+
public ContributionReportMode Mode { get; set; }
27+
28+
[JsonProperty("unit")]
29+
public ReportUnit? Unit { get; set; }
30+
31+
[JsonProperty("languageId")]
32+
public string? LanguageId { get; set; }
33+
34+
[JsonProperty("userId")]
35+
public string? UserId { get; set; }
36+
37+
[JsonProperty("dateFrom")]
38+
public DateTimeOffset? DateFrom { get; set; }
39+
40+
[JsonProperty("dateTo")]
41+
public DateTimeOffset? DateTo { get; set; }
42+
}
43+
}
44+
45+
[PublicAPI]
46+
public enum ContributionReportMode
47+
{
48+
[Description("translations")]
49+
Translations,
50+
51+
[Description("approvals")]
52+
Approvals,
53+
54+
[Description("votes")]
55+
Votes
56+
}
57+
}

0 commit comments

Comments
 (0)