Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
cdff1bce
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cdff1bce
编写于
9月 12, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
proper streaming
上级
e3aea3b9
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
26 addition
and
19 deletion
+26
-19
src/vs/workbench/services/files/electron-browser/remoteFileService.ts
...ench/services/files/electron-browser/remoteFileService.ts
+26
-19
未找到文件。
src/vs/workbench/services/files/electron-browser/remoteFileService.ts
浏览文件 @
cdff1bce
...
...
@@ -6,10 +6,9 @@
import
URI
from
'
vs/base/common/uri
'
;
import
{
FileService
}
from
'
vs/workbench/services/files/electron-browser/fileService
'
;
import
Event
from
'
vs/base/common/event
'
;
import
{
IContent
,
IStreamContent
,
IFileStat
,
IResolveContentOptions
,
IUpdateContentOptions
,
FileChangesEvent
,
IResolveFileOptions
,
IResolveFileResult
,
FileOperationEvent
,
FileOperation
}
from
'
vs/platform/files/common/files
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
Event
from
'
vs/base/common/event
'
;
import
{
EventEmitter
}
from
'
events
'
;
import
{
basename
}
from
'
path
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
*
as
Ftp
from
'
./ftpFileSystemProvider
'
;
...
...
@@ -25,6 +24,7 @@ import { groupBy, isFalsyOrEmpty } from 'vs/base/common/arrays';
import
{
compare
}
from
'
vs/base/common/strings
'
;
import
{
ITextResourceConfigurationService
}
from
'
vs/editor/common/services/resourceConfiguration
'
;
import
{
IProgress
,
Progress
}
from
'
vs/platform/progress/common/progress
'
;
import
{
decodeStream
}
from
'
vs/base/node/encoding
'
;
export
interface
IStat
{
...
...
@@ -198,7 +198,7 @@ export class RemoteFileService extends FileService {
resolveContent
(
resource
:
URI
,
options
?:
IResolveContentOptions
):
TPromise
<
IContent
>
{
const
provider
=
this
.
_provider
.
get
(
resource
.
scheme
);
if
(
provider
)
{
return
this
.
_doResolveContent
(
provider
,
resource
);
return
this
.
_doResolveContent
(
provider
,
resource
)
.
then
(
RemoteFileService
.
_asContent
)
;
}
else
{
return
super
.
resolveContent
(
resource
,
options
);
}
...
...
@@ -207,25 +207,28 @@ export class RemoteFileService extends FileService {
resolveStreamContent
(
resource
:
URI
,
options
?:
IResolveContentOptions
):
TPromise
<
IStreamContent
>
{
const
provider
=
this
.
_provider
.
get
(
resource
.
scheme
);
if
(
provider
)
{
return
this
.
_doResolveContent
(
provider
,
resource
)
.
then
(
RemoteFileService
.
_asStreamContent
)
;
return
this
.
_doResolveContent
(
provider
,
resource
);
}
else
{
return
super
.
resolveStreamContent
(
resource
,
options
);
}
}
private
async
_doResolveContent
(
provider
:
IRemoteFileSystemProvider
,
resource
:
URI
):
TPromise
<
IContent
>
{
private
async
_doResolveContent
(
provider
:
IRemoteFileSystemProvider
,
resource
:
URI
):
TPromise
<
I
Stream
Content
>
{
const
chunks
:
Uint8Array
[]
=
[];
await
provider
.
read
(
resource
,
new
Progress
<
Uint8Array
>
(
chunk
=>
chunks
.
push
(
chunk
)));
const
stat
=
await
toIFileStat
(
provider
,
await
provider
.
stat
(
resource
),
false
);
const
encoding
=
this
.
getEncoding
(
resource
);
const
stream
=
decodeStream
(
encoding
);
await
provider
.
read
(
resource
,
new
Progress
<
Uint8Array
>
(
chunk
=>
stream
.
write
(
<
Buffer
>
chunk
)));
stream
.
end
();
return
{
value
:
[].
concat
(...
chunks
).
toString
(),
encoding
,
value
:
stream
,
resource
:
stat
.
resource
,
name
:
stat
.
name
,
etag
:
stat
.
etag
,
mtime
:
stat
.
mtime
,
encoding
:
this
.
getEncoding
(
resource
)
};
}
...
...
@@ -258,16 +261,20 @@ export class RemoteFileService extends FileService {
return
fileStat
;
}
private
static
_asStreamContent
(
content
:
IContent
):
IStreamContent
{
const
emitter
=
new
EventEmitter
();
const
{
value
}
=
content
;
const
result
=
<
IStreamContent
><
any
>
content
;
result
.
value
=
emitter
;
setTimeout
(()
=>
{
emitter
.
emit
(
'
data
'
,
value
);
emitter
.
emit
(
'
end
'
);
},
0
);
return
result
;
private
static
_asContent
(
content
:
IStreamContent
):
TPromise
<
IContent
>
{
return
new
TPromise
<
IContent
>
((
resolve
,
reject
)
=>
{
let
result
:
IContent
=
{
value
:
''
,
encoding
:
content
.
encoding
,
etag
:
content
.
etag
,
mtime
:
content
.
mtime
,
name
:
content
.
name
,
resource
:
content
.
resource
};
content
.
value
.
on
(
'
data
'
,
chunk
=>
result
.
value
+=
chunk
);
content
.
value
.
on
(
'
error
'
,
reject
);
content
.
value
.
on
(
'
end
'
,
()
=>
resolve
(
result
));
});
}
// --- delete
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录