Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
3e4b2135
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,发现更多精彩内容 >>
提交
3e4b2135
编写于
6月 08, 2016
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
submit telemetry events from extension management service
上级
3e5c92f5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
22 deletion
+51
-22
src/vs/platform/extensionManagement/node/extensionManagementService.ts
...rm/extensionManagement/node/extensionManagementService.ts
+51
-22
未找到文件。
src/vs/platform/extensionManagement/node/extensionManagementService.ts
浏览文件 @
3e4b2135
...
...
@@ -11,13 +11,16 @@ import * as path from 'path';
import
types
=
require
(
'
vs/base/common/types
'
);
import
*
as
pfs
from
'
vs/base/node/pfs
'
;
import
{
assign
}
from
'
vs/base/common/objects
'
;
import
{
IDisposable
,
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
flatten
}
from
'
vs/base/common/arrays
'
;
import
{
extract
,
buffer
}
from
'
vs/base/node/zip
'
;
import
{
Promise
,
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
IExtensionManagementService
,
IExtension
,
IExtensionManifest
,
IGalleryMetadata
,
IGalleryVersion
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
extensionEquals
,
getTelemetryData
}
from
'
vs/platform/extensionManagement/node/extensionManagementUtil
'
;
import
{
download
,
json
,
IRequestOptions
}
from
'
vs/base/node/request
'
;
import
{
getProxyAgent
}
from
'
vs/base/node/proxy
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
Limiter
}
from
'
vs/base/common/async
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
UserSettings
}
from
'
vs/workbench/node/userSettings
'
;
...
...
@@ -90,12 +93,13 @@ export class ExtensionManagementService implements IExtensionManagementService {
private
extensionsPath
:
string
;
private
obsoletePath
:
string
;
private
obsoleteFileLimiter
:
Limiter
<
void
>
;
private
disposables
:
IDisposable
[];
private
_onInstallExtension
=
new
Emitter
<
IExtensionManifest
>
();
onInstallExtension
:
Event
<
IExtensionManifest
>
=
this
.
_onInstallExtension
.
event
;
private
_onDidInstallExtension
=
new
Emitter
<
{
extension
:
IExtension
;
error
?:
Error
;
}
>
();
onDidInstallExtension
:
Event
<
{
extension
:
IExtension
;
error
?:
Error
;
}
>
=
this
.
_onDidInstallExtension
.
event
;
private
_onDidInstallExtension
=
new
Emitter
<
{
extension
:
IExtension
;
isUpdate
:
boolean
;
error
?:
Error
;
}
>
();
onDidInstallExtension
:
Event
<
{
extension
:
IExtension
;
isUpdate
:
boolean
;
error
?:
Error
;
}
>
=
this
.
_onDidInstallExtension
.
event
;
private
_onUninstallExtension
=
new
Emitter
<
IExtension
>
();
onUninstallExtension
:
Event
<
IExtension
>
=
this
.
_onUninstallExtension
.
event
;
...
...
@@ -104,11 +108,23 @@ export class ExtensionManagementService implements IExtensionManagementService {
onDidUninstallExtension
:
Event
<
IExtension
>
=
this
.
_onDidUninstallExtension
.
event
;
constructor
(
@
IEnvironmentService
private
environmentService
:
IEnvironmentService
@
IEnvironmentService
private
environmentService
:
IEnvironmentService
,
@
ITelemetryService
telemetryService
:
ITelemetryService
)
{
this
.
extensionsPath
=
environmentService
.
extensionsPath
;
this
.
obsoletePath
=
path
.
join
(
this
.
extensionsPath
,
'
.obsolete
'
);
this
.
obsoleteFileLimiter
=
new
Limiter
(
1
);
this
.
disposables
=
[
this
.
onDidInstallExtension
(({
extension
,
isUpdate
,
error
})
=>
telemetryService
.
publicLog
(
isUpdate
?
'
extensionGallery2:update
'
:
'
extensionGallery2:install
'
,
assign
(
getTelemetryData
(
extension
),
{
success
:
!
error
})
)),
this
.
onDidUninstallExtension
(
extension
=>
telemetryService
.
publicLog
(
'
extensionGallery2:uninstall
'
,
assign
(
getTelemetryData
(
extension
),
{
success
:
true
})
))
];
}
install
(
extension
:
IExtension
):
TPromise
<
IExtension
>
;
...
...
@@ -138,22 +154,26 @@ export class ExtensionManagementService implements IExtensionManagementService {
this
.
_onInstallExtension
.
fire
(
extension
);
return
this
.
getLastValidExtensionVersion
(
extension
,
extension
.
galleryInformation
.
versions
).
then
(
versionInfo
=>
{
const
version
=
versionInfo
.
version
;
const
url
=
versionInfo
.
downloadUrl
;
const
headers
=
versionInfo
.
downloadHeaders
;
const
zipPath
=
path
.
join
(
tmpdir
(),
galleryInformation
.
id
);
const
extensionPath
=
path
.
join
(
this
.
extensionsPath
,
getExtensionId
(
extension
,
version
));
const
manifestPath
=
path
.
join
(
extensionPath
,
'
package.json
'
);
return
this
.
request
(
url
)
.
then
(
opts
=>
assign
(
opts
,
{
headers
}))
.
then
(
opts
=>
download
(
zipPath
,
opts
))
.
then
(()
=>
validate
(
zipPath
,
extension
,
version
))
.
then
(
manifest
=>
extract
(
zipPath
,
extensionPath
,
{
sourcePath
:
'
extension
'
,
overwrite
:
true
}).
then
(()
=>
manifest
))
.
then
(
manifest
=>
assign
({
__metadata
:
galleryInformation
},
manifest
))
.
then
(
manifest
=>
pfs
.
writeFile
(
manifestPath
,
JSON
.
stringify
(
manifest
,
null
,
'
\t
'
)))
.
then
(()
=>
{
this
.
_onDidInstallExtension
.
fire
({
extension
});
return
extension
;
})
.
then
(
null
,
error
=>
{
this
.
_onDidInstallExtension
.
fire
({
extension
,
error
});
return
TPromise
.
wrapError
(
error
);
});
return
this
.
getInstalled
()
.
then
(
installed
=>
installed
.
some
(
e
=>
extensionEquals
(
e
,
extension
)))
.
then
(
isUpdate
=>
{
const
version
=
versionInfo
.
version
;
const
url
=
versionInfo
.
downloadUrl
;
const
headers
=
versionInfo
.
downloadHeaders
;
const
zipPath
=
path
.
join
(
tmpdir
(),
galleryInformation
.
id
);
const
extensionPath
=
path
.
join
(
this
.
extensionsPath
,
getExtensionId
(
extension
,
version
));
const
manifestPath
=
path
.
join
(
extensionPath
,
'
package.json
'
);
return
this
.
request
(
url
)
.
then
(
opts
=>
assign
(
opts
,
{
headers
}))
.
then
(
opts
=>
download
(
zipPath
,
opts
))
.
then
(()
=>
validate
(
zipPath
,
extension
,
version
))
.
then
(
manifest
=>
extract
(
zipPath
,
extensionPath
,
{
sourcePath
:
'
extension
'
,
overwrite
:
true
}).
then
(()
=>
manifest
))
.
then
(
manifest
=>
assign
({
__metadata
:
galleryInformation
},
manifest
))
.
then
(
manifest
=>
pfs
.
writeFile
(
manifestPath
,
JSON
.
stringify
(
manifest
,
null
,
'
\t
'
)))
.
then
(()
=>
{
this
.
_onDidInstallExtension
.
fire
({
extension
,
isUpdate
});
return
extension
;
})
.
then
(
null
,
error
=>
{
this
.
_onDidInstallExtension
.
fire
({
extension
,
isUpdate
,
error
});
return
TPromise
.
wrapError
(
error
);
});
});
});
}
...
...
@@ -185,9 +205,14 @@ export class ExtensionManagementService implements IExtensionManagementService {
const
extensionPath
=
path
.
join
(
this
.
extensionsPath
,
getExtensionId
(
manifest
));
this
.
_onInstallExtension
.
fire
(
manifest
);
return
extract
(
zipPath
,
extensionPath
,
{
sourcePath
:
'
extension
'
,
overwrite
:
true
})
.
then
(()
=>
createExtension
(
manifest
,
(
<
any
>
manifest
).
__metadata
,
extensionPath
))
.
then
(
extension
=>
{
this
.
_onDidInstallExtension
.
fire
({
extension
});
return
extension
;
});
return
this
.
getInstalled
()
.
then
(
installed
=>
installed
.
some
(
e
=>
extensionEquals
(
e
,
manifest
)))
.
then
(
isUpdate
=>
{
return
extract
(
zipPath
,
extensionPath
,
{
sourcePath
:
'
extension
'
,
overwrite
:
true
})
.
then
(()
=>
createExtension
(
manifest
,
(
<
any
>
manifest
).
__metadata
,
extensionPath
))
.
then
(
extension
=>
{
this
.
_onDidInstallExtension
.
fire
({
extension
,
isUpdate
});
return
extension
;
});
});
});
}
...
...
@@ -319,4 +344,8 @@ export class ExtensionManagementService implements IExtensionManagementService {
return
{
url
,
agent
,
strictSSL
};
});
}
dispose
()
{
this
.
disposables
=
dispose
(
this
.
disposables
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录