diff --git a/package.json b/package.json index 6e21f6a..735f0a9 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,10 @@ "command": "alicloud.api.removeSubscriptions", "icon": "$(notebook-delete-cell)", "title": "取消订阅" + }, + { + "command": "alicloud.api.updateCloseQuestionnaire", + "title": "刷新体验问卷弹出设置" } ], "keybindings": [ diff --git a/src/commands.ts b/src/commands.ts index b679ef7..259fa7d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -245,6 +245,14 @@ export class AlicloudApiCommands { new AlicloudAPIWebview().openTab(context.extensionUri, config); }); + // 刷新问卷调查弹窗过期设置 + vscode.commands.registerCommand("alicloud.api.updateCloseQuestionnaire", () => { + const lastPromptKey = "lastPromptTime"; + const globalState = context.globalState; + globalState.update(lastPromptKey, undefined); + console.log("update last prompt key to",globalState.get(lastPromptKey)) + }); + vscode.commands.registerCommand("alicloud.api.restart", async () => { await vscode.window.withProgress( { diff --git a/src/explorer.ts b/src/explorer.ts index 4b3e725..42e476b 100644 --- a/src/explorer.ts +++ b/src/explorer.ts @@ -21,8 +21,8 @@ export class PontAPITreeItem extends vscode.TreeItem { } export class PontAPIExplorer { - static getProductItems(products:Array, element:PontAPITreeItem = null){ - return products?.map(product=>{ + static getProductItems(products: Array, element: PontAPITreeItem = null) { + return products?.map((product) => { return { specName: product.code, modName: "", @@ -38,12 +38,12 @@ export class PontAPIExplorer { { specName: product.code, modName: "clickItem", - label: product.name + label: product.name, }, ], }, }; - }) + }); } static getDirItems(spec: PontSpec, element = null) { const dirs = element?.children || spec?.ext?.directories || []; @@ -230,19 +230,19 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider, code:string){ + getCNNameOfProduct(products: Array, code: string) { const findProduct = products?.find((product) => product.code === code); return `${findProduct?.name ? findProduct?.name : findProduct?.code}`; } getAPIManagerChildren(element?: PontAPITreeItem): vscode.ProviderResult { - if(element.contextValue === "alicloudProducts"){ + if (element.contextValue === "alicloudProducts") { const productExplorer = getProductRequestInstance(); - const productGroups = _.groupBy(productExplorer?.products, (product) => product.group) - return (Object.keys(productGroups || {}))?.map((group) => { + const productGroups = _.groupBy(productExplorer?.products, (product) => product.group); + return Object.keys(productGroups || {})?.map((group) => { return { specName: group, - contextValue: 'productGroup', + contextValue: "productGroup", label: `${group}`, modName: group, collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, @@ -258,8 +258,8 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider { - const [specName, version] = spec.name.split("::") - + const [specName, version] = spec.name.split("::"); + return { specName: spec.name, contextValue: "Spec", @@ -306,12 +306,11 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider product.group) - return PontAPIExplorer.getProductItems(productGroups[element?.modName?.toString()],element) - } - else { + const productGroups = _.groupBy(productExplorer?.products, (product) => product.group); + return PontAPIExplorer.getProductItems(productGroups[element?.modName?.toString()], element); + } else { return PontAPIExplorer.getDirItems(spec); } } @@ -364,10 +363,42 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider (questionnaireExpiration || 0) * 24 * 60 * 60 * 1000) { + // 显示信息弹窗 + let result = await vscode.window.showInformationMessage( + "您在使用插件期间是否遇到问题?欢迎吐槽或点赞,您的反馈对我们十分重要!", + "去反馈", + "关闭", + "30天内不再弹出", + ); + if (result === "去反馈") { + vscode.env.openExternal( + vscode.Uri.parse("https://g.alicdn.com/aes/tracker-survey-preview/0.0.13/survey.html?pid=fePxMy&id=3486"), + ); + globalState.update(experienceQuestionnaireKey, 30); + } + else if (result === "30天内不再弹出") { + globalState.update(experienceQuestionnaireKey, 30); + }else { + globalState.update(experienceQuestionnaireKey, 1); + } + globalState.update(lastPromptKey, Date.now()); + } + } + async removeSubscriptions(specName: string) { const pontxConfig = await findAlicloudAPIConfig(this.context); const newOrigins = pontxConfig?.origins?.filter((item) => item.name !== specName) || []; @@ -388,6 +419,7 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider{ - if (element.modName === 'clickItem') { + vscode.commands.registerCommand("alicloud.api.addSubscription", async (element) => { + if (element.modName === "clickItem") { // 取消订阅 let result = await vscode.window.showInformationMessage(`是否订阅${element.label}?`, "Yes", "No"); if (result === "No") { - return + return; } } - const productExplorer = getProductRequestInstance() + const productExplorer = getProductRequestInstance(); const selectedProduct = productExplorer?.products?.find((item) => item?.code === element?.specName); - const pickItem = AlicloudApiCommands.getPickProductItems(selectedProduct) + const pickItem = AlicloudApiCommands.getPickProductItems(selectedProduct); if (pickItem.versions?.length > 1) { vscode.window .showQuickPick(pickItem.versions, { @@ -432,11 +464,12 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider { // 搜索+订阅功能 - const productExplorer = getProductRequestInstance() - const items = productExplorer?.products?.map((item) => { + const productExplorer = getProductRequestInstance(); + const items = productExplorer?.products + ?.map((item) => { return AlicloudApiCommands.getPickProductItems(item); }) .reduce((pre, next) => pre.concat(next), []); @@ -467,8 +500,9 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider { // 搜索+订阅功能 - const productExplorer = getProductRequestInstance() - const items = productExplorer?.products?.map((item) => { + const productExplorer = getProductRequestInstance(); + const items = productExplorer?.products + ?.map((item) => { return AlicloudApiCommands.getPickProductItems(item); }) .reduce((pre, next) => pre.concat(next), []); @@ -496,7 +530,7 @@ export class AlicloudApiExplorer implements vscode.TreeDataProvider { if (meta.specName) { // 取消订阅 diff --git a/src/extension.ts b/src/extension.ts index 947c9ec..65716e2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -12,7 +12,7 @@ import { AlicloudAPIPontParserPlugin } from "./plugins/parser"; import { AlicloudApiMetaGeneratePlugin } from "./plugins/generate"; import { getProductRequestInstance } from "./productExplorer"; -import autoCompletion from './provider/autoCompletion' +import autoCompletion from "./provider/autoCompletion"; import autofix from "./provider/autofix"; export async function activate(context: vscode.ExtensionContext) { @@ -46,6 +46,21 @@ export async function activate(context: vscode.ExtensionContext) { }, }; + const globalState = context.globalState; + const lastPromptKey = "lastPromptTime"; + const currentVersion = vscode.extensions.getExtension("alibabacloud-openapi.vscode-alicloud-api").packageJSON.version + const storedVersion = globalState.get("extensionVersion"); + const experienceQuestionnaireKey = "questionnaireExpiration"; + // 检查是否是第一次启动新版本,新版本更新后,需要重新开启问卷调查 + if (storedVersion !== currentVersion) { + // 刷新问卷调查弹窗过期设置 + globalState.update(lastPromptKey, undefined); + // 问卷调查弹窗弹出频率初始化为 1 天 + globalState.update(experienceQuestionnaireKey, 1); + // 更新 globalState 中的版本号 + globalState.update("extensionVersion", currentVersion); + } + try { const pontManager = await PontManager.constructorFromPontConfigAndPlugins( pontxConfig, @@ -65,7 +80,7 @@ export async function activate(context: vscode.ExtensionContext) { // 自动补全 autoCompletion(context); // 自动修复 - autofix(context); + autofix(context); } } catch (e) { vscode.window.showErrorMessage(e.message);