Skip to content

Commit 4bf8f1d

Browse files
committed
Added command: Restore/upgrade system templates
1 parent 3bf2a19 commit 4bf8f1d

File tree

4 files changed

+37
-33
lines changed

4 files changed

+37
-33
lines changed

package.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
},
117117
"fastiot.template.loadonstart": {
118118
"type": "boolean",
119-
"default": false,
119+
"default": true,
120120
"description": "Load templates on extension start (false, speeds up the start of the extension)."
121121
},
122122
"conf.resource.insertEmptyLastLine": {
@@ -304,6 +304,10 @@
304304
{
305305
"command": "viewTemplates.OpenTemplateFolder",
306306
"title": "Open template folder"
307+
},
308+
{
309+
"command": "viewTemplates.RestoreSystemTemplates",
310+
"title": "Restore/upgrade system templates (offline)"
307311
}
308312
],
309313
"viewsContainers": {
@@ -374,6 +378,10 @@
374378
{
375379
"command": "viewTemplates.OpenTemplateFolder",
376380
"when": "view == viewTemplates"
381+
},
382+
{
383+
"command": "viewTemplates.RestoreSystemTemplates",
384+
"when": "view == viewTemplates"
377385
}
378386
],
379387
"view/item/context": [

src/Configuration/IotConfiguration.ts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -188,27 +188,6 @@ export class IotConfiguration {
188188
});
189189
});
190190

191-
//old variant
192-
/*
193-
const loadTemplates = async () => {
194-
let url:string="";
195-
if(this._context.extensionMode==vscode.ExtensionMode.Production)
196-
{
197-
url="https://raw.githubusercontent.com/devdotnetorg/vscode-extension-dotnet-fastiot/master/templates/system/templatelist.fastiot.yaml";
198-
}else{
199-
//for test
200-
url="https://raw.githubusercontent.com/devdotnetorg/vscode-extension-dotnet-fastiot/dev/templates/system/templatelist.fastiot.yaml";
201-
}
202-
this._logCallback("-------- Loading templates -------");
203-
this.Templates.Clear();
204-
await this.Templates.LoadTemplatesSystem();
205-
await this.Templates.UpdateSystemTemplate(url,this.Folder.Temp);
206-
await this.Templates.LoadTemplatesUser();
207-
this._logCallback(`${this.Templates.Count} template(s) available.`);
208-
this._logCallback("----------------------------------");
209-
};
210-
loadTemplates();
211-
*/
212191
}
213192
}
214193

src/Templates/IotTemplateCollection.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as vscode from 'vscode';
2-
import * as fs from 'fs';
2+
import * as fs from 'fs-extra';
33
import * as path from 'path';
44
import {EntityType} from '../Entity/EntityType';
55
import {EntityCollection,ContainsType} from '../Entity/EntityCollection';
@@ -51,22 +51,22 @@ export class IotTemplateCollection extends EntityCollection<IotTemplateAttribute
5151
this.ContextUI.Output(`${result.Status}. ${result.Message}. ${result.SystemMessage}`);
5252
}
5353

54-
protected async LoadFromFolder(path:string, type:EntityType,recoverySourcePath:string|undefined):Promise<IotResult>
54+
protected async LoadFromFolder(pathFolder:string, type:EntityType,recoverySourcePath:string|undefined):Promise<IotResult>
5555
{
5656
let result= new IotResult(StatusResult.Ok, undefined,undefined);
5757
//Recovery
5858
let recovery = new IotTemplateRecovery(type);
5959
if(type==EntityType.system&&recoverySourcePath)
6060
{
61-
result=recovery.RestoryDirStructure(recoverySourcePath,path);
61+
result=recovery.RestoryDirStructure(recoverySourcePath,pathFolder);
6262
if(result.Status==StatusResult.Error) return Promise.resolve(result);
6363
}
6464
//
65-
const listFolders=IoTHelper.GetListDir(path);
65+
const listFolders=IoTHelper.GetListDir(pathFolder);
6666
//ckeck
6767
if (listFolders.length==0)
6868
{
69-
result=new IotResult(StatusResult.Ok,`${path} folder is empty. There are no templates to load.`);
69+
result=new IotResult(StatusResult.Ok,`${pathFolder} folder is empty. There are no templates to load.`);
7070
return Promise.resolve(result);
7171
}
7272
//checking all folders
@@ -78,7 +78,7 @@ export class IotTemplateCollection extends EntityCollection<IotTemplateAttribute
7878
if(!template.IsValid&&type==EntityType.system)
7979
{
8080
//Recovery
81-
this.ContextUI.Output(`Template recovery: ${filePath}`);
81+
this.ContextUI.Output(`Template recovery: ${path.dirname(filePath)}`);
8282
result= template.Recovery();
8383
if(result.Status==StatusResult.Ok)
8484
{
@@ -127,9 +127,9 @@ export class IotTemplateCollection extends EntityCollection<IotTemplateAttribute
127127
});
128128
//result
129129
if(this.Count>0){
130-
result= new IotResult(StatusResult.Ok,`Loading templates from ${path} folder successfully completed`,undefined);
130+
result= new IotResult(StatusResult.Ok,`Loading templates from ${pathFolder} folder successfully completed`,undefined);
131131
}else{
132-
result= new IotResult(StatusResult.Error,` No template was loaded from the ${path} folder`,undefined);
132+
result= new IotResult(StatusResult.Error,` No template was loaded from the ${pathFolder} folder`,undefined);
133133
}
134134
return Promise.resolve(result);
135135
}
@@ -233,4 +233,13 @@ export class IotTemplateCollection extends EntityCollection<IotTemplateAttribute
233233
return Promise.resolve(result);
234234
}
235235

236+
public RestoreSystemTemplates()
237+
{
238+
const path=`${this.BasePath}\\${EntityType.system}`;
239+
if (fs.existsSync(path)) {
240+
//clear
241+
fs.emptyDirSync(path);
242+
}
243+
}
244+
236245
}

src/extension.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,19 +279,26 @@ export async function activate(context: vscode.ExtensionContext) {
279279
});
280280
//Open template folder
281281
let commandOpenTemplateFolder = vscode.commands.registerCommand('viewTemplates.OpenTemplateFolder', () => {
282-
openTemplateFolder(config.Folder.Templates);
282+
openTemplateFolder(config.Folder.Templates);
283+
});
284+
//Restore/upgrade system templates
285+
let commandRestoreSystemTemplates = vscode.commands.registerCommand('viewTemplates.RestoreSystemTemplates', async () => {
286+
config.Templates.RestoreSystemTemplates();
287+
if(config.Templates.Count>0) await config.LoadTemplatesAsync();
288+
vscode.window.showInformationMessage("Restore/upgrade system templates completed successfully");
283289
});
284290
//Events
285291
//Extension configuration change event
286292
let eventChangeConfiguration=vscode.workspace.onDidChangeConfiguration((e) => {
287293
if(e.affectsConfiguration('fastiot'))
288294
{
295+
// TODO reload settings while the extension is running
289296
/*
290297
treeDataDevicesProvider.Config=config;
291298
treeDataConfigurationsProvider.Config=config;
292299
treeDataProjectsProvider.Config=config;
293300
*/
294-
vscode.window.showInformationMessage('Changed extension settings: .NET FastIoT');
301+
//vscode.window.showInformationMessage('Changed extension settings: .NET FastIoT');
295302
//vscode.window.showInformationMessage('You must restart the .NET FastIoT extension or VSCode to apply the new settings');
296303
}
297304
}, undefined, context.subscriptions);
@@ -339,8 +346,9 @@ export async function activate(context: vscode.ExtensionContext) {
339346
context.subscriptions.push(commandCreateProject);
340347
context.subscriptions.push(commandReloadTemplates);
341348
context.subscriptions.push(commandOpenTemplateFolder);
349+
context.subscriptions.push(commandOpenTemplateFolder);
342350
//events
343-
context.subscriptions.push(eventChangeConfiguration);
351+
context.subscriptions.push(commandRestoreSystemTemplates);
344352
}
345353

346354
// this method is called when your extension is deactivated

0 commit comments

Comments
 (0)