Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
c1ec6c2f
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c1ec6c2f
编写于
1月 16, 2018
作者:
M
Martin Aeschlimann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add download limiter to build/i18n script
上级
c18f63a1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
52 addition
and
3 deletion
+52
-3
build/lib/i18n.ts
build/lib/i18n.ts
+52
-3
未找到文件。
build/lib/i18n.ts
浏览文件 @
c1ec6c2f
...
...
@@ -17,6 +17,8 @@ import * as https from 'https';
var
util
=
require
(
'
gulp-util
'
);
var
iconv
=
require
(
'
iconv-lite
'
);
const
NUMBER_OF_CONCURRENT_DOWNLOADS
=
1
;
function
log
(
message
:
any
,
...
rest
:
any
[]):
void
{
util
.
log
(
util
.
colors
.
green
(
'
[i18n]
'
),
message
,
...
rest
);
}
...
...
@@ -272,6 +274,49 @@ export class XLF {
};
}
export
interface
ITask
<
T
>
{
():
T
;
}
interface
ILimitedTaskFactory
<
T
>
{
factory
:
ITask
<
Promise
<
T
>>
;
c
:
(
value
?:
T
|
Thenable
<
T
>
)
=>
void
;
e
:
(
error
?:
any
)
=>
void
;
}
export
class
Limiter
<
T
>
{
private
runningPromises
:
number
;
private
outstandingPromises
:
ILimitedTaskFactory
<
any
>
[];
constructor
(
private
maxDegreeOfParalellism
:
number
)
{
this
.
outstandingPromises
=
[];
this
.
runningPromises
=
0
;
}
queue
(
factory
:
ITask
<
Promise
<
T
>>
):
Promise
<
T
>
{
return
new
Promise
<
T
>
((
c
,
e
)
=>
{
this
.
outstandingPromises
.
push
({
factory
,
c
,
e
});
this
.
consume
();
});
}
private
consume
():
void
{
while
(
this
.
outstandingPromises
.
length
&&
this
.
runningPromises
<
this
.
maxDegreeOfParalellism
)
{
const
iLimitedTask
=
this
.
outstandingPromises
.
shift
();
this
.
runningPromises
++
;
const
promise
=
iLimitedTask
.
factory
();
promise
.
then
(
iLimitedTask
.
c
).
catch
(
iLimitedTask
.
e
);
promise
.
then
(()
=>
this
.
consumed
()).
catch
(()
=>
this
.
consumed
());
}
}
private
consumed
():
void
{
this
.
runningPromises
--
;
this
.
consume
();
}
}
const
iso639_3_to_2
:
Map
<
string
>
=
{
'
chs
'
:
'
zh-cn
'
,
'
cht
'
:
'
zh-tw
'
,
...
...
@@ -927,9 +972,10 @@ export function pullXlfFiles(projectName: string, apiHostname: string, username:
callback
();
});
}
const
limiter
=
new
Limiter
<
File
>
(
NUMBER_OF_CONCURRENT_DOWNLOADS
);
function
retrieveResource
(
language
:
string
,
resource
:
Resource
,
apiHostname
,
credentials
):
Promise
<
File
>
{
return
new
Promise
<
File
>
((
resolve
,
reject
)
=>
{
return
limiter
.
queue
(()
=>
new
Promise
<
File
>
((
resolve
,
reject
)
=>
{
const
slug
=
resource
.
name
.
replace
(
/
\/
/g
,
'
_
'
);
const
project
=
resource
.
project
;
const
iso639
=
language
.
toLowerCase
();
...
...
@@ -937,6 +983,7 @@ function retrieveResource(language: string, resource: Resource, apiHostname, cre
hostname
:
apiHostname
,
path
:
`/api/2/project/
${
project
}
/resource/
${
slug
}
/translation/
${
iso639
}
?file&mode=onlyreviewed`
,
auth
:
credentials
,
port
:
443
,
method
:
'
GET
'
};
...
...
@@ -945,16 +992,18 @@ function retrieveResource(language: string, resource: Resource, apiHostname, cre
res
.
on
(
'
data
'
,
(
chunk
:
Buffer
)
=>
xlfBuffer
.
push
(
chunk
));
res
.
on
(
'
end
'
,
()
=>
{
if
(
res
.
statusCode
===
200
)
{
console
.
log
(
'
success:
'
+
options
.
path
);
resolve
(
new
File
({
contents
:
Buffer
.
concat
(
xlfBuffer
),
path
:
`
${
project
}
/
${
iso639_2_to_3
[
language
]}
/
${
slug
}
.xlf`
}));
}
reject
(
`
${
slug
}
in
${
project
}
returned no data. Response code:
${
res
.
statusCode
}
.`
);
});
});
request
.
on
(
'
error
'
,
(
err
)
=>
{
reject
(
`Failed to query resource
${
slug
}
with the following error:
${
err
}
`
);
reject
(
`Failed to query resource
${
slug
}
with the following error:
${
err
}
.
${
options
.
path
}
`
);
});
request
.
end
();
});
console
.
log
(
'
started:
'
+
options
.
path
);
}));
}
export
function
prepareJsonFiles
():
ThroughStream
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录