diff --git a/changelog.d/114.added.md b/changelog.d/114.added.md new file mode 100644 index 00000000..cf1ef1c5 --- /dev/null +++ b/changelog.d/114.added.md @@ -0,0 +1 @@ +Users will be invited to join the Discord server after 10 usages \ No newline at end of file diff --git a/package.json b/package.json index 864e4d5e..c59cda5f 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,12 @@ "mirrord.promptReview": { "type": "boolean", "default": true, - "description": "Occasionally show a notification asking for plugin review" + "description": "Occasionally show a notification asking for plugin review." + }, + "mirrord.promptDiscord": { + "type": "boolean", + "default": true, + "description": "Show a notification inviting the user to the Discord server." }, "mirrord.promptAgentVersionMismatch": { "type": "boolean", @@ -131,9 +136,12 @@ "description": "Path to local mirrord installation." }, "mirrord.autoUpdate": { - "type": ["string", "boolean"], + "type": [ + "string", + "boolean" + ], "default": true, - "description": "Automatically update mirrord binary." + "description": "Automatically update mirrord binary." } } }, @@ -163,7 +171,10 @@ }, "jsonValidation": [ { - "fileMatch": ["*mirrord.json", "*.mirrord/*.json"], + "fileMatch": [ + "*mirrord.json", + "*.mirrord/*.json" + ], "url": "https://raw.githubusercontent.com/metalbear-co/mirrord/latest/mirrord-schema.json" } ], @@ -246,4 +257,4 @@ "which": "^3.0.1", "yaml": "^2.1.3" } -} +} \ No newline at end of file diff --git a/src/api.ts b/src/api.ts index e76a81ec..c8d1be8b 100644 --- a/src/api.ts +++ b/src/api.ts @@ -17,6 +17,16 @@ const FEEDBACK_COUNTER = 'mirrord-feedback-counter'; */ const FEEDBACK_COUNTER_REVIEW_AFTER = 100; +/** +* Key to access the feedback counter (see `tickDiscordCounter`) from the global user config. +*/ +const DISCORD_COUNTER = 'mirrord-discord-counter'; + +/** +* Amount of times we run mirrord before inviting the user to join the Discord server. +*/ +const DISCORD_COUNTER_PROMPT_AFTER = 10; + const TARGET_TYPE_DISPLAY: Record = { pod: 'Pod', deployment: 'Deployment', @@ -378,6 +388,7 @@ export class MirrordAPI { async binaryExecute(target: string | null, configFile: string | null, executable: string | null, configEnv: EnvVars): Promise { tickMirrordForTeamsCounter(); tickFeedbackCounter(); + tickDiscordCounter(); /// Create a promise that resolves when the mirrord process exits return await vscode.window.withProgress({ @@ -543,3 +554,24 @@ function tickFeedbackCounter() { .info(); } } + +/** +* Updates the global Discord counter. +* After `DISCORD_COUNTER_PROMPT_AFTER` mirrord runs, displays a message asking the user to join the discord. +*/ +function tickDiscordCounter() { + const previousRuns = parseInt(globalContext.globalState.get(DISCORD_COUNTER) ?? '0'); + const currentRuns = previousRuns + 1; + + globalContext.globalState.update(DISCORD_COUNTER, currentRuns); + + if ((currentRuns - DISCORD_COUNTER_PROMPT_AFTER) === 0) { + new NotificationBuilder() + .withMessage(`Need any help with mirrord? Come chat with our team on Discord!`) + .withGenericAction("Join us!", async () => { + vscode.commands.executeCommand(MirrordStatus.joinDiscordCommandId); + }) + .withDisableAction('promptDiscord') + .info(); + } +} \ No newline at end of file