Skip to content

Commit

Permalink
Added What's New View (#81)
Browse files Browse the repository at this point in the history
* Added What's New View

* Version
  • Loading branch information
adamdriscoll committed Jul 30, 2024
1 parent 97b2cbb commit ffd20bb
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 2 deletions.
41 changes: 41 additions & 0 deletions vscode/powershellprotools/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 27 additions & 1 deletion vscode/powershellprotools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "powershellprotools",
"displayName": "PowerShell Pro Tools",
"description": "Powerful extensions for PowerShell development.",
"version": "2024.7.5",
"version": "2024.7.6",
"publisher": "ironmansoftware",
"repository": {
"type": "git",
Expand All @@ -29,6 +29,7 @@
"onView:customView",
"onView:historyView",
"onView:sessionsView",
"onView:newsView",
"onView:jobView",
"onCommand:powershell.showWinFormDesigner",
"onCommand:powershell.generateWinForm",
Expand Down Expand Up @@ -145,6 +146,11 @@
"title": "Refresh",
"icon": "$(refresh)"
},
{
"command": "newsView.refresh",
"title": "Refresh",
"icon": "$(refresh)"
},
{
"command": "providerView.refresh",
"title": "Refresh",
Expand Down Expand Up @@ -359,6 +365,11 @@
"command": "jobView.refresh",
"title": "Refresh",
"icon": "$(refresh)"
},
{
"command": "newsView.open",
"title": "Open",
"icon": "$(link-external)"
}
],
"configuration": {
Expand Down Expand Up @@ -509,6 +520,11 @@
"type": "boolean",
"default": true,
"markdownDescription": "Whether to clear the terminal after loading PowerShell Pro Tools. Set to false to see any errors loading the module."
},
"poshProTools.disableNewsNotification": {
"type": "boolean",
"default": false,
"markdownDescription": "Disables the notification when Ironman Software publishes news."
}
}
},
Expand Down Expand Up @@ -603,6 +619,10 @@
{
"id": "infoView",
"name": "Help and Information"
},
{
"id": "newsView",
"name": "What's New?"
}
]
},
Expand Down Expand Up @@ -630,6 +650,11 @@
"when": "view == moduleView",
"group": "navigation"
},
{
"command": "newsView.refresh",
"when": "view == newsView",
"group": "navigation"
},
{
"command": "providerView.refresh",
"when": "view == providerView",
Expand Down Expand Up @@ -840,6 +865,7 @@
"typescript": "^4.0.2"
},
"dependencies": {
"axios": "^0.21.1",
"cheerio": "^1.0.0-rc.2",
"extract-zip": "^2.0.1",
"json-rpc2": "^2.0.0",
Expand Down
42 changes: 42 additions & 0 deletions vscode/powershellprotools/src/commands/news.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
'use strict';
import * as vscode from 'vscode';
import { ICommand } from './command';
import axios from 'axios';
import { load } from '../settings';

export class NewsTreeViewCommands implements ICommand {
register(context: vscode.ExtensionContext) {
context.subscriptions.push(this.Open());
}

Open() {
return vscode.commands.registerCommand('newsView.open', async (url) => {
vscode.env.openExternal(vscode.Uri.parse(url));
})
}
}

export async function notifyAboutNews(context: vscode.ExtensionContext) {
var settings = load();
if (settings.disableNewsNotification) {
return;
}

var result = await axios({ url: 'https://www.ironmansoftware.com/news/api' });
var news = result.data;

if (news.length > 0) {
var latestNews = news[0];
var id = context.globalState.get("PSPNewsId");
if (id == latestNews.id) {
return;
}

vscode.window.showInformationMessage("Ironman Software News - " + latestNews.title + " - " + latestNews.description, "View").then((result) => {
if (result == "View") {
vscode.env.openExternal(vscode.Uri.parse(latestNews.url));
context.globalState.update("PSPNewsId", latestNews.id);
}
});
}
}
2 changes: 2 additions & 0 deletions vscode/powershellprotools/src/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { HistoryTreeViewCommands } from './commands/history';
import { SessionCommands } from './commands/sessions';
import { JobTreeViewCommands } from './commands/jobs';
import { PerformanceService } from './services/performanceService';
import { NewsTreeViewCommands } from './commands/news';

export class Container {
static initialize(context: ExtensionContext, powershellService: PowerShellService) {
Expand All @@ -40,6 +41,7 @@ export class Container {
this._commands.push(new HistoryTreeViewCommands());
this._commands.push(new SessionCommands());
this._commands.push(new JobTreeViewCommands());
this._commands.push(new NewsTreeViewCommands());
this.RegisterCommands();

//this._codeLensProvider = new PowerShellCodeLensProvider();
Expand Down
4 changes: 4 additions & 0 deletions vscode/powershellprotools/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import { SessionTreeViewProvider } from './treeView/sessionTreeView';
import { JobTreeViewProvider } from './treeView/jobTreeView';
import { PowerShellRenameProvider } from './services/renameProvider';
import { registerWelcomeCommands } from './commands/welcomeCommand';
import { NewsViewProvider } from './treeView/newsTreeView';
import { notifyAboutNews } from './commands/news';

const version = "PowerShellProTools.Version";

Expand All @@ -48,6 +50,7 @@ export interface IPowerShellExtensionClient {


export async function activate(context: vscode.ExtensionContext) {
notifyAboutNews(context);
var service = powerShellService = new PowerShellService(context);
context.subscriptions.push(showDataGrid(context));
context.subscriptions.push(packageAsExe());
Expand Down Expand Up @@ -125,6 +128,7 @@ async function finishActivation(context: vscode.ExtensionContext) {
vscode.window.createTreeView<vscode.TreeItem>('astView', { treeDataProvider: new AstTreeViewProvider() });
vscode.window.createTreeView<vscode.TreeItem>('hostProcessView', { treeDataProvider: new HostProcessViewProvider() });
vscode.window.createTreeView<vscode.TreeItem>('moduleView', { treeDataProvider: new ModuleViewProvider() });
vscode.window.createTreeView<vscode.TreeItem>('newsView', { treeDataProvider: new NewsViewProvider() });
vscode.window.createTreeView<vscode.TreeItem>('providerView', { treeDataProvider: new ProviderViewProvider() });
vscode.window.createTreeView<vscode.TreeItem>('quickScriptView', { treeDataProvider: new QuickScriptViewProvider() });
vscode.window.createTreeView<vscode.TreeItem>('variableView', { treeDataProvider: new VariableViewProvider() });
Expand Down
4 changes: 3 additions & 1 deletion vscode/powershellprotools/src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export interface ISettings {
signOnSaveCertificate: string;
excludeAutomaticVariables: boolean;
clearScreenAfterLoad: boolean;
disableNewsNotification: boolean;
}

export function load(): ISettings {
Expand All @@ -38,6 +39,7 @@ export function load(): ISettings {
signOnSave: configuration.get<boolean>("signOnSave", false),
signOnSaveCertificate: configuration.get<string>("signOnSaveCertificate", ""),
excludeAutomaticVariables: configuration.get<boolean>("excludeAutomaticVariables", false),
clearScreenAfterLoad: configuration.get<boolean>("clearScreenAfterLoad", true)
clearScreenAfterLoad: configuration.get<boolean>("clearScreenAfterLoad", true),
disableNewsNotification: configuration.get<boolean>("disableNewsNotification", false)
}
}
31 changes: 31 additions & 0 deletions vscode/powershellprotools/src/treeView/newsTreeView.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import * as vscode from 'vscode';
import { TreeViewProvider } from './treeViewProvider';
import axios from 'axios';

export class NewsViewProvider extends TreeViewProvider {
getRefreshCommand(): string {
return "newsView.refresh";
}

requiresLicense(): boolean {
return false;
}

async getNodes(): Promise<vscode.TreeItem[]> {
var result = await axios({ url: 'https://www.ironmansoftware.com/news/api' });
var news = result.data;
return news.map((news: any) => {
return {
label: news.title,
iconPath: new vscode.ThemeIcon('sparkle-filled'),
tooltip: news.description,
collapsibleState: vscode.TreeItemCollapsibleState.None,
command: {
title: 'open',
command: 'newsView.open',
arguments: [news.url]
}
};
});
}
}

0 comments on commit ffd20bb

Please sign in to comment.