From 424799a54dc193f99b619456ce8c4aab73dc429b Mon Sep 17 00:00:00 2001 From: Jeremy Grossmann Date: Wed, 20 May 2020 15:26:26 +0930 Subject: [PATCH 01/29] Change title to "IOS router templates" --- .../dynamips/ios-templates/ios-templates.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.html b/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.html index fad1fd29..9a573ad3 100644 --- a/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.html +++ b/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.html @@ -1,7 +1,7 @@
-

IOS routers templates

+

IOS router templates

From 1ed8123082c537188fb7765a515f02db91fc02cb Mon Sep 17 00:00:00 2001 From: Jeremy Grossmann Date: Wed, 20 May 2020 15:27:03 +0930 Subject: [PATCH 02/29] Change title to "IOU device templates" --- .../ios-on-unix/iou-templates/iou-templates.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/preferences/ios-on-unix/iou-templates/iou-templates.component.html b/src/app/components/preferences/ios-on-unix/iou-templates/iou-templates.component.html index b009b007..617cc70c 100644 --- a/src/app/components/preferences/ios-on-unix/iou-templates/iou-templates.component.html +++ b/src/app/components/preferences/ios-on-unix/iou-templates/iou-templates.component.html @@ -1,7 +1,7 @@
-

IOU devices templates

+

IOU device templates

From 0cee6188fb6e5f63d14c5c41bc644e0132fc53a4 Mon Sep 17 00:00:00 2001 From: grossmj Date: Wed, 20 May 2020 15:42:14 +0930 Subject: [PATCH 03/29] Change sentence "on your local computer" to "locally" --- .../cloud-nodes-add-template.component.html | 2 +- .../ethernet-hubs-add-template.component.html | 2 +- ...ernet-switches-add-template.component.html | 4 +- .../add-docker-template.component.html | 16 +++--- .../add-ios-template.component.html | 50 +++++++++---------- .../add-iou-template.component.html | 10 ++-- .../add-qemu-vm-template.component.html | 26 +++++----- .../add-vpcs-template.component.html | 2 +- 8 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.html b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.html index e9ece63c..2b0518f9 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.html +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.html @@ -7,7 +7,7 @@
- Run the cloud node on your local computer + Run the cloud node locally Run the cloud node on the GNS3 VM diff --git a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.html b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.html index dc590d73..599d2221 100644 --- a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.html +++ b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.html @@ -7,7 +7,7 @@
- Run the Ethernet Hub on your local computer + Run the Ethernet Hub locally Run the Ethernet Hub on the GNS3 VM diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.html b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.html index c0f21c20..1620b6f2 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.html +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.html @@ -7,10 +7,10 @@
- Run the Ethernet switch on your local computer + Run the Ethernet switch locally Run the Ethernet switch on the GNS3 VM - +
diff --git a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.html b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.html index 4feb5381..f7f3e029 100644 --- a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.html +++ b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.html @@ -10,7 +10,7 @@ - Run this Docker container on your local computer + Run this Docker container locally Run this Docker container on the GNS3 VM @@ -20,10 +20,10 @@ Existing image New image - {{image.image}} @@ -75,9 +75,9 @@ - {{type}} diff --git a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html index c0369041..63fa93e2 100644 --- a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html +++ b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html @@ -9,7 +9,7 @@ - Run this IOS router on your local computer + Run this IOS router locally Run this IOS router on the GNS3 VM @@ -26,8 +26,8 @@ or create from existing one - @@ -40,14 +40,14 @@ - - @@ -56,8 +56,8 @@ - @@ -66,8 +66,8 @@ - This is an EtherSwitch router @@ -75,8 +75,8 @@
- @@ -90,51 +90,51 @@
- {{option}} - +
- {{option}} - +
- {{option}} - +
- diff --git a/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.html b/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.html index 3176ce38..168fa2f3 100644 --- a/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.html +++ b/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.html @@ -9,7 +9,7 @@ - Run this IOU device on your local computer + Run this IOU device locally Run this IOU device on the GNS3 VM @@ -27,8 +27,8 @@ New image - @@ -37,8 +37,8 @@ - diff --git a/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html b/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html index f6db23c6..a2533e2c 100644 --- a/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html +++ b/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html @@ -9,7 +9,7 @@ - Run this QEMU VM on your local computer + Run this QEMU VM locally Run this QEMU VM on the GNS3 VM @@ -17,8 +17,8 @@ - @@ -31,7 +31,7 @@ - @@ -41,9 +41,9 @@
- MB @@ -52,8 +52,8 @@
- @@ -68,10 +68,10 @@ Existing image New image

- {{image.filename}} diff --git a/src/app/components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component.html b/src/app/components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component.html index d9ce36af..17a5f6d1 100644 --- a/src/app/components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component.html +++ b/src/app/components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component.html @@ -7,7 +7,7 @@
- Run the VPCS node on your local computer + Run the VPCS node locally Run the VPCS node on the GNS3 VM From 455a13b96f9d87a0b76c7dc6e1645aa44cbbe8bb Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Tue, 2 Jun 2020 17:29:14 +0200 Subject: [PATCH 04/29] Default values in templates --- .../add-docker-template/add-docker-template.component.ts | 2 +- .../add-iou-template/add-iou-template.component.ts | 8 ++++++++ .../add-qemu-vm-template.component.html | 3 --- .../add-qemu-vm-template.component.ts | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts index 28b32c61..c8bc1cfd 100644 --- a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts +++ b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts @@ -57,7 +57,7 @@ export class AddDockerTemplateComponent implements OnInit { }); this.networkAdaptersForm = this.formBuilder.group({ - adapters: new FormControl('', Validators.required) + adapters: new FormControl('1', Validators.required) }); } diff --git a/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.ts b/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.ts index 66c50685..6fa54508 100644 --- a/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.ts +++ b/src/app/components/preferences/ios-on-unix/add-iou-template/add-iou-template.component.ts @@ -133,6 +133,14 @@ export class AddIouTemplateComponent implements OnInit { this.iouTemplate.name = this.templateNameForm.get("templateName").value; if (this.newImageSelected) this.iouTemplate.path = this.imageForm.get("imageName").value; this.iouTemplate.compute_id = this.isGns3VmChosen ? 'vm' : 'local'; + + if (this.selectedType === 'L2 image') { + this.iouTemplate.ethernet_adapters = 4; + this.iouTemplate.serial_adapters = 0; + } else if (this.selectedType === 'L3 image') { + this.iouTemplate.ethernet_adapters = 2; + this.iouTemplate.serial_adapters = 2; + } this.iouService.addTemplate(this.server, this.iouTemplate).subscribe((template: IouTemplate) => { this.goBack(); diff --git a/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html b/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html index a2533e2c..fc32f94d 100644 --- a/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html +++ b/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.html @@ -23,9 +23,6 @@ placeholder="Please choose a descriptive name for your new QEMU virtual machine" ngDefaultContro/>
- - This is a legacy ASA VM - diff --git a/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.ts b/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.ts index 92d39f2d..eb32cab1 100644 --- a/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.ts +++ b/src/app/components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component.ts @@ -60,7 +60,7 @@ export class AddQemuVmTemplateComponent implements OnInit { }); this.memoryForm = this.formBuilder.group({ - ramMemory: new FormControl('', Validators.required) + ramMemory: new FormControl('256', Validators.required) }); this.diskForm = this.formBuilder.group({ @@ -98,6 +98,7 @@ export class AddQemuVmTemplateComponent implements OnInit { this.qemuService.getBinaries(server).subscribe((qemuBinaries: QemuBinary[]) => { this.qemuBinaries = qemuBinaries; + if (this.qemuBinaries[0]) this.selectedBinary = this.qemuBinaries[0]; }); this.qemuService.getImages(server).subscribe((qemuImages: QemuImage[]) => { From 7625ff5cfaacd2452eca88584f9430b0705d9008 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Tue, 2 Jun 2020 18:08:25 +0200 Subject: [PATCH 05/29] Update add-docker-template.component.ts --- .../add-docker-template.component.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts index c8bc1cfd..f593c615 100644 --- a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts +++ b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts @@ -25,6 +25,7 @@ export class AddDockerTemplateComponent implements OnInit { consoleTypes: string[] = []; isRemoteComputerChosen: boolean = false; dockerImages: DockerImage[] = []; + selectedImage: DockerImage; newImageSelected: boolean = false; virtualMachineForm: FormGroup; @@ -101,9 +102,15 @@ export class AddDockerTemplateComponent implements OnInit { } addTemplate() { - if ((!this.virtualMachineForm.invalid || !this.newImageSelected) && !this.containerNameForm.invalid && !this.networkAdaptersForm.invalid) { + if ((!this.virtualMachineForm.invalid || (!this.newImageSelected && this.selectedImage)) && !this.containerNameForm.invalid && !this.networkAdaptersForm.invalid) { this.dockerTemplate.template_id = uuid(); - this.dockerTemplate.image = this.virtualMachineForm.get('filename').value; + + if (this.newImageSelected) { + this.dockerTemplate.image = this.virtualMachineForm.get('filename').value; + } else { + this.dockerTemplate.image = this.selectedImage.image; + } + this.dockerTemplate.name = this.containerNameForm.get('templateName').value; this.dockerTemplate.adapters = this.networkAdaptersForm.get('adapters').value; this.dockerTemplate.compute_id = this.isGns3VmChosen ? 'vm' : 'local'; From 6bf268b47fe50d2d1ab1150d9c7d4301bfd3369d Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 3 Jun 2020 12:49:05 +0200 Subject: [PATCH 06/29] Fix for network addapters c7200, c3725, c3745, c2691 --- src/app/app-routing.module.ts | 2 +- .../add-ios-template.component.html | 6 ++--- .../add-ios-template.component.ts | 7 +++-- src/app/services/ios-configuration.service.ts | 27 +++++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index c22ca5f9..5b9ded88 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -169,7 +169,7 @@ const routes: Routes = [ ]; @NgModule({ - imports: [RouterModule.forRoot(routes, { anchorScrolling: 'enabled', enableTracing: true, scrollPositionRestoration: 'enabled'})], + imports: [RouterModule.forRoot(routes, { anchorScrolling: 'enabled', enableTracing: false, scrollPositionRestoration: 'enabled'})], exports: [RouterModule] }) export class AppRoutingModule {} diff --git a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html index 63fa93e2..e26b686e 100644 --- a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html +++ b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html @@ -88,7 +88,7 @@ -
+ +
Date: Wed, 3 Jun 2020 14:22:37 +0200 Subject: [PATCH 07/29] Fix for platforms and adapters --- .../add-ios-template.component.ts | 18 ++++++++++++++---- src/app/services/ios-configuration.service.ts | 5 ++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts index 44af13c1..5447f498 100644 --- a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts +++ b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts @@ -225,13 +225,23 @@ export class AddIosTemplateComponent implements OnInit { let name: string = this.iosImageForm.get("imageName").value.split('-')[0]; this.iosNameForm.controls['templateName'].setValue(name); - if (this.platforms.includes(name.split('-')[0])) { + if (name === 'c3620' || name === 'c3640' || name === 'c3660') { + this.iosNameForm.controls['platform'].setValue('c3600'); + this.selectedPlatform = 'c3600'; + } else { this.iosNameForm.controls['platform'].setValue(name); this.selectedPlatform = name; - - this.iosNameForm.controls['chassis'].setValue(''); - this.iosMemoryForm.controls['memory'].setValue(this.defaultRam[name]); } + + if (name === 'c1700') { + this.iosNameForm.controls['chassis'].setValue('1720'); + } else if (name === 'c2600') { + this.iosNameForm.controls['chassis'].setValue('2610'); + } else { + this.iosNameForm.controls['chassis'].setValue(''); + } + + this.iosMemoryForm.controls['memory'].setValue(this.defaultRam[name]); } onPlatformChosen() { diff --git a/src/app/services/ios-configuration.service.ts b/src/app/services/ios-configuration.service.ts index 408058a3..dd3f49c6 100644 --- a/src/app/services/ios-configuration.service.ts +++ b/src/app/services/ios-configuration.service.ts @@ -62,7 +62,10 @@ export class IosConfigurationService { "c1700": 128, "c2600": 128, "c2691": 256, - "c3600": 256, + "c3600": 192, + "c3620": 192, + "c3640": 192, + "c3660": 192, "c3725": 256, "c3745": 256, "c7200": 512 From f3b6b8393a6e0de11eadccb439391571dce4c393 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 3 Jun 2020 18:55:32 +0200 Subject: [PATCH 08/29] Update ReleaseNotes.txt --- src/ReleaseNotes.txt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ReleaseNotes.txt b/src/ReleaseNotes.txt index 615a4002..7ed9c210 100644 --- a/src/ReleaseNotes.txt +++ b/src/ReleaseNotes.txt @@ -1,6 +1,19 @@ GNS3 WebUI is web implementation of user interface for GNS3 software. -Current version: GNS3 Web UI 2020.2.0-beta.2 +Current version: GNS3 Web UI 2020.2.0-beta.4 + +Bug Fixes +- New port setting for GNS3 VM preferences +- Option to auto-hide menu toolbar on the left side +- Server type in template preferences +- Error when selecting existing Docker image +- Default values in templates +- TypeError: Cannot read property 'message' of undefined +- TypeError: e.error is undefined +- TypeError: Cannot read property 'placements' of null +- Creating IOS templates -> fix for platforms and network adapters + +GNS3 Web UI 2020.2.0-beta.2 What's New - Drag & drop to add new nodes on topology From 38dc9ccced434a808adb0505009e7473604fe500 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 3 Jun 2020 18:56:21 +0200 Subject: [PATCH 09/29] Release 2020.2.0-beta.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc25d80c..050d6dbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gns3-web-ui", - "version": "2020.2.0-beta.3", + "version": "2020.2.0-beta.4", "author": { "name": "GNS3 Technology Inc.", "email": "developers@gns3.com" From 3a57e73192dadfb2c13fe7d3592e5d06f5a92cfd Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Thu, 4 Jun 2020 02:39:27 +0200 Subject: [PATCH 10/29] Update symbols.component.html --- .../common/symbols/symbols.component.html | 62 +++++++++---------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/src/app/components/preferences/common/symbols/symbols.component.html b/src/app/components/preferences/common/symbols/symbols.component.html index 74a9090b..00279958 100644 --- a/src/app/components/preferences/common/symbols/symbols.component.html +++ b/src/app/components/preferences/common/symbols/symbols.component.html @@ -1,34 +1,32 @@ - - +
+ + + +
+
+
+
-
- - - -
-
-
- -
-
- +
From b8ded15ef7fea7655e0506dbe8d913226be5020f Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Thu, 4 Jun 2020 03:02:17 +0200 Subject: [PATCH 11/29] Update project-map.component.ts --- src/app/components/project-map/project-map.component.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/components/project-map/project-map.component.ts b/src/app/components/project-map/project-map.component.ts index facdd0fa..7e2c1bb4 100644 --- a/src/app/components/project-map/project-map.component.ts +++ b/src/app/components/project-map/project-map.component.ts @@ -67,6 +67,7 @@ import { NodeAddedEvent } from '../template/template-list-dialog/template-list-d import { NotificationService } from '../../services/notification.service'; import { ThemeService } from '../../services/theme.service'; import { Title } from '@angular/platform-browser'; +import { NodeConsoleService } from '../../services/nodeConsole.service'; @Component({ @@ -156,7 +157,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy { private bottomSheet: MatBottomSheet, private notificationService: NotificationService, private themeService: ThemeService, - private title: Title + private title: Title, + private nodeConsoleService: NodeConsoleService ) {} ngOnInit() { @@ -851,7 +853,9 @@ export class ProjectMapComponent implements OnInit, OnDestroy { } public ngOnDestroy() { + this.nodeConsoleService.openConsoles = 0; this.title.setTitle('GNS3 Web UI'); + this.drawingsDataSource.clear(); this.nodesDataSource.clear(); this.linksDataSource.clear(); From 672d25132f417194aa46c99125419eb47b83eb91 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 5 Jun 2020 02:32:53 +0200 Subject: [PATCH 12/29] Update node.ts --- src/app/cartography/widgets/node.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/cartography/widgets/node.ts b/src/app/cartography/widgets/node.ts index ebe96ca9..7d038ac2 100644 --- a/src/app/cartography/widgets/node.ts +++ b/src/app/cartography/widgets/node.ts @@ -87,12 +87,14 @@ export class NodeWidget implements Widget { }) .attr('xnode:href', (n: MapNode) => n.symbolUrl) .attr('width', (n: MapNode) => { - if (!n.width) return 60 - return n.width + if (!n.width) return 60; + if (n.width > 200) return 200; + return n.width; }) .attr('height', (n: MapNode) => { - if (!n.height) return 60 - return n.height + if (!n.height) return 60; + if (n.height > 200) return 200; + return n.height; }) .attr('x', (n: MapNode) => 0) .attr('y', (n: MapNode) => 0) From eb9102769c500db676017e3b2c5c98870eb88ffb Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Mon, 8 Jun 2020 11:58:11 +0200 Subject: [PATCH 13/29] Fix for chid.value is undefined --- src/app/cartography/converters/styles-to-font-converter.ts | 6 +++--- src/app/cartography/helpers/css-fixer.ts | 2 +- src/app/cartography/helpers/font-fixer.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/cartography/converters/styles-to-font-converter.ts b/src/app/cartography/converters/styles-to-font-converter.ts index 8ca22442..9fa1e5e6 100644 --- a/src/app/cartography/converters/styles-to-font-converter.ts +++ b/src/app/cartography/converters/styles-to-font-converter.ts @@ -18,21 +18,21 @@ export class StylesToFontConverter implements Converter { }); ast.children.forEach(child => { - if (child.property === 'font-size') { + if (child.property === 'font-size' && child.value && child.value.children) { child.value.children.forEach(value => { if (value.type === 'Dimension') { font.font_size = parseInt(value.value); } }); } - if (child.property === 'font-family') { + if (child.property === 'font-family' && child.value && child.value.children) { child.value.children.forEach(value => { if (value.type === 'Identifier') { font.font_family = value.name; } }); } - if (child.property === 'font-weight') { + if (child.property === 'font-weight' && child.value && child.value.children) { child.value.children.forEach(value => { if (value.type === 'Identifier') { font.font_weight = value.name; diff --git a/src/app/cartography/helpers/css-fixer.ts b/src/app/cartography/helpers/css-fixer.ts index 15eb330d..69e7e327 100644 --- a/src/app/cartography/helpers/css-fixer.ts +++ b/src/app/cartography/helpers/css-fixer.ts @@ -11,7 +11,7 @@ export class CssFixer { // fixes font-size when unit (pt|px) is not defined ast.children.forEach(child => { - if (child.property === 'font-size') { + if (child.property === 'font-size' && child.value && child.value.children) { child.value.children.forEach(value => { if (value.type === 'Number') { const fontSize = value.value.toString(); diff --git a/src/app/cartography/helpers/font-fixer.ts b/src/app/cartography/helpers/font-fixer.ts index 0c3c0f2c..760dcdce 100644 --- a/src/app/cartography/helpers/font-fixer.ts +++ b/src/app/cartography/helpers/font-fixer.ts @@ -30,7 +30,7 @@ export class FontFixer { let isByIdentifier = true; ast.children.forEach(child => { - if (child.property === 'font-family') { + if (child.property === 'font-family' && child.value && child.value.children) { child.value.children.forEach(value => { if (value.type === 'Identifier') { fontFamilyPointer = value; @@ -41,7 +41,7 @@ export class FontFixer { } }); } - if (child.property === 'font-size') { + if (child.property === 'font-size' && child.value && child.value.children) { child.value.children.forEach(value => { if (value.type === 'Dimension') { fontSizePointer = value; From 2b380a2699db01ad1383c029c2acbe0f930a140c Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Mon, 8 Jun 2020 16:05:59 +0200 Subject: [PATCH 14/29] replicate_network_connection_state added to qemu configurator --- src/app/cartography/models/node.ts | 1 + .../configurator/qemu/configurator-qemu.component.html | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/app/cartography/models/node.ts b/src/app/cartography/models/node.ts index f9f41428..e60f7202 100644 --- a/src/app/cartography/models/node.ts +++ b/src/app/cartography/models/node.ts @@ -54,6 +54,7 @@ export class Properties { qemu_path: string; environment: string; extra_hosts: string; + replicate_network_connection_state: boolean; } export class Node { diff --git a/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html b/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html index 936b02d0..e181eac4 100644 --- a/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html +++ b/src/app/components/project-map/node-editors/configurator/qemu/configurator-qemu.component.html @@ -155,6 +155,9 @@
Use the legacy networking mode +
+ Replicate network connection state + Date: Tue, 9 Jun 2020 12:34:14 +0200 Subject: [PATCH 15/29] Update node.ts --- src/app/cartography/widgets/node.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/cartography/widgets/node.ts b/src/app/cartography/widgets/node.ts index 7d038ac2..19be2d8c 100644 --- a/src/app/cartography/widgets/node.ts +++ b/src/app/cartography/widgets/node.ts @@ -88,12 +88,12 @@ export class NodeWidget implements Widget { .attr('xnode:href', (n: MapNode) => n.symbolUrl) .attr('width', (n: MapNode) => { if (!n.width) return 60; - if (n.width > 200) return 200; + if (n.width > 64) return 64; return n.width; }) .attr('height', (n: MapNode) => { if (!n.height) return 60; - if (n.height > 200) return 200; + if (n.height > 64) return 64; return n.height; }) .attr('x', (n: MapNode) => 0) From bf292b4286d91c996b87731d5faecfc91d395fa0 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Tue, 9 Jun 2020 13:17:37 +0200 Subject: [PATCH 16/29] Update toaster-error-handler.ts --- src/app/common/error-handlers/toaster-error-handler.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/common/error-handlers/toaster-error-handler.ts b/src/app/common/error-handlers/toaster-error-handler.ts index fe1eca1b..555cb22c 100644 --- a/src/app/common/error-handlers/toaster-error-handler.ts +++ b/src/app/common/error-handlers/toaster-error-handler.ts @@ -4,7 +4,8 @@ import { ToasterService } from '../../services/toaster.service'; export class ToasterErrorHandler extends RavenErrorHandler { handleError(err: any): void { super.handleError(err); - + if (!err) return; + const toasterService = this.injector.get(ToasterService); if (err.error && err.error.message) { toasterService.error(err.error.message); From 932c4828559e0b7830031bebef8195c7d145a7e1 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Tue, 9 Jun 2020 17:21:13 +0200 Subject: [PATCH 17/29] Dialog for changing hostname added --- src/app/app.module.ts | 9 +++- .../change-hostname-dialog.component.html | 24 +++++++++ .../change-hostname-dialog.component.scss | 3 ++ .../change-hostname-dialog.component.ts | 53 +++++++++++++++++++ .../change-hostname-action.component.html | 4 ++ .../change-hostname-action.component.ts | 28 ++++++++++ .../change-symbol-action.component.html | 2 +- .../context-menu/context-menu.component.html | 5 ++ 8 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.html create mode 100644 src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.scss create mode 100644 src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.ts create mode 100644 src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.html create mode 100644 src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 1153a19c..1dd8628f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -275,6 +275,8 @@ import { NodeConsoleService } from './services/nodeConsole.service'; import { HttpConsoleNewTabActionComponent } from './components/project-map/context-menu/actions/http-console-new-tab/http-console-new-tab-action.component'; import { WebConsoleFullWindowComponent } from './components/web-console-full-window/web-console-full-window.component'; import { ConsoleGuard } from './guards/console-guard'; +import { ChangeHostnameActionComponent } from './components/project-map/context-menu/actions/change-hostname/change-hostname-action.component'; +import { ChangeHostnameDialogComponent } from './components/project-map/change-hostname-dialog/change-hostname-dialog.component'; if (environment.production) { Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', { @@ -461,7 +463,9 @@ if (environment.production) { WebConsoleComponent, ConsoleWrapperComponent, HttpConsoleNewTabActionComponent, - WebConsoleFullWindowComponent + WebConsoleFullWindowComponent, + ChangeHostnameActionComponent, + ChangeHostnameDialogComponent ], imports: [ BrowserModule, @@ -600,7 +604,8 @@ if (environment.production) { ScreenshotDialogComponent, ConfirmationBottomSheetComponent, ConfigDialogComponent, - AdbutlerComponent + AdbutlerComponent, + ChangeHostnameDialogComponent ], bootstrap: [AppComponent] }) diff --git a/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.html b/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.html new file mode 100644 index 00000000..d668cfe2 --- /dev/null +++ b/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.html @@ -0,0 +1,24 @@ +

Change hostname for node {{name}}

+ + + +
+ + +
diff --git a/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.scss b/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.scss new file mode 100644 index 00000000..9c2173c2 --- /dev/null +++ b/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.scss @@ -0,0 +1,3 @@ +.form-field { + width: 100%; +} diff --git a/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.ts b/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.ts new file mode 100644 index 00000000..a5733ae1 --- /dev/null +++ b/src/app/components/project-map/change-hostname-dialog/change-hostname-dialog.component.ts @@ -0,0 +1,53 @@ +import { Component, OnInit, Input } from "@angular/core"; +import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms'; +import { Node } from '../../../cartography/models/node'; +import { Server } from '../../../models/server'; +import { NodeService } from '../../../services/node.service'; +import { ToasterService } from '../../../services/toaster.service'; +import { MatDialogRef } from '@angular/material'; + + +@Component({ + selector: 'app-change-hostname-dialog-component', + templateUrl: './change-hostname-dialog.component.html', + styleUrls: ['./change-hostname-dialog.component.scss'] +}) +export class ChangeHostnameDialogComponent implements OnInit { + server: Server; + node: Node; + inputForm: FormGroup; + name: string; + + constructor( + public dialogRef: MatDialogRef, + public nodeService: NodeService, + private toasterService: ToasterService, + private formBuilder: FormBuilder + ) { + this.inputForm = this.formBuilder.group({ + name: new FormControl('', Validators.required) + }); + } + + ngOnInit() { + this.nodeService.getNode(this.server, this.node).subscribe((node: Node) => { + this.node = node; + this.name = this.node.name; + }) + } + + onSaveClick() { + if (this.inputForm.valid) { + this.nodeService.updateNode(this.server, this.node).subscribe(() => { + this.toasterService.success(`Node ${this.node.name} updated.`); + this.onCancelClick(); + }); + } else { + this.toasterService.error(`Fill all required fields.`); + } + } + + onCancelClick() { + this.dialogRef.close(); + } +} diff --git a/src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.html b/src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.html new file mode 100644 index 00000000..1ffb2bb9 --- /dev/null +++ b/src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.html @@ -0,0 +1,4 @@ + diff --git a/src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.ts b/src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.ts new file mode 100644 index 00000000..327118a6 --- /dev/null +++ b/src/app/components/project-map/context-menu/actions/change-hostname/change-hostname-action.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { Node } from '../../../../../cartography/models/node'; +import { MatDialog } from '@angular/material'; +import { ChangeHostnameDialogComponent } from '../../../change-hostname-dialog/change-hostname-dialog.component'; + +@Component({ + selector: 'app-change-hostname-action', + templateUrl: './change-hostname-action.component.html' +}) +export class ChangeHostnameActionComponent implements OnInit { + @Input() server: Server; + @Input() node: Node; + + constructor(private dialog: MatDialog) {} + + ngOnInit() {} + + changeHostname() { + const dialogRef = this.dialog.open(ChangeHostnameDialogComponent, { + autoFocus: false, + disableClose: true + }); + let instance = dialogRef.componentInstance; + instance.server = this.server; + instance.node = this.node; + } +} diff --git a/src/app/components/project-map/context-menu/actions/change-symbol/change-symbol-action.component.html b/src/app/components/project-map/context-menu/actions/change-symbol/change-symbol-action.component.html index 71a7851e..b17302ad 100644 --- a/src/app/components/project-map/context-menu/actions/change-symbol/change-symbol-action.component.html +++ b/src/app/components/project-map/context-menu/actions/change-symbol/change-symbol-action.component.html @@ -1,4 +1,4 @@ diff --git a/src/app/components/project-map/context-menu/context-menu.component.html b/src/app/components/project-map/context-menu/context-menu.component.html index e375d31f..fbfcb3c5 100644 --- a/src/app/components/project-map/context-menu/context-menu.component.html +++ b/src/app/components/project-map/context-menu/context-menu.component.html @@ -40,6 +40,11 @@ [server]="server" [node]="nodes[0]" > + Date: Tue, 9 Jun 2020 17:55:35 +0200 Subject: [PATCH 18/29] Update project-map.component.ts --- src/app/components/project-map/project-map.component.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/components/project-map/project-map.component.ts b/src/app/components/project-map/project-map.component.ts index 7e2c1bb4..7591c0a4 100644 --- a/src/app/components/project-map/project-map.component.ts +++ b/src/app/components/project-map/project-map.component.ts @@ -436,6 +436,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy { if(!nodeAddedEvent) { return; } + + this.progressService.activate(); this.nodeService.createFromTemplate(this.server, this.project, nodeAddedEvent.template, nodeAddedEvent.x, nodeAddedEvent.y, nodeAddedEvent.server).subscribe((node: Node) => { // if (nodeAddedEvent.name !== nodeAddedEvent.template.name) { // node.name = nodeAddedEvent.name; @@ -454,6 +456,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy { nodeAddedEvent.x = nodeAddedEvent.x + 50 < this.project.scene_width/2 ? nodeAddedEvent.x + 50 : nodeAddedEvent.x; nodeAddedEvent.y = nodeAddedEvent.y + 50 < this.project.scene_height/2 ? nodeAddedEvent.y + 50 : nodeAddedEvent.y; this.onNodeCreation(nodeAddedEvent); + } else { + this.progressService.deactivate(); } }); }); From f06ba2bf774e415b126f1b47ea9608a523fb32f0 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 10 Jun 2020 10:14:33 +0200 Subject: [PATCH 19/29] Update template-mocks.service.ts --- src/app/services/template-mocks.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/services/template-mocks.service.ts b/src/app/services/template-mocks.service.ts index 1860e821..0859739c 100644 --- a/src/app/services/template-mocks.service.ts +++ b/src/app/services/template-mocks.service.ts @@ -229,7 +229,7 @@ export class TemplateMocksService { headless: false, linked_clone: false, name: '', - on_close: 'power-off', + on_close: 'power_off', port_name_format: 'Ethernet{0}', port_segment_size: 0, symbol: ':/symbols/vmware_guest.svg', From da5dcd5fe9fdbf8d10178b45587115fefd81a295 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 10 Jun 2020 10:33:14 +0200 Subject: [PATCH 20/29] Update add-docker-template.component.ts --- .../docker/add-docker-template/add-docker-template.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts index f593c615..93bd32c9 100644 --- a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts +++ b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts @@ -112,7 +112,7 @@ export class AddDockerTemplateComponent implements OnInit { } this.dockerTemplate.name = this.containerNameForm.get('templateName').value; - this.dockerTemplate.adapters = this.networkAdaptersForm.get('adapters').value; + this.dockerTemplate.adapters = +this.networkAdaptersForm.get('adapters').value; this.dockerTemplate.compute_id = this.isGns3VmChosen ? 'vm' : 'local'; this.dockerService.addTemplate(this.server, this.dockerTemplate).subscribe((template: DockerTemplate) => { From 0463b8c3b8bd34e8bf5fea39e9e28a551cea96e4 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Wed, 10 Jun 2020 11:18:20 +0200 Subject: [PATCH 21/29] Update add-ios-template.component.html --- .../add-ios-template.component.html | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html index e26b686e..6a4b913a 100644 --- a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html +++ b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.html @@ -7,14 +7,14 @@
- + Run this IOS router locally Run this IOS router on the GNS3 VM - + - + +
- + + + Run this Docker container locally Run this Docker container on the GNS3 VM - + +
Existing image @@ -41,7 +42,8 @@
- + +
- + +
- + + - + + + diff --git a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts index 93bd32c9..daad9e05 100644 --- a/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts +++ b/src/app/components/preferences/docker/add-docker-template/add-docker-template.component.ts @@ -50,11 +50,11 @@ export class AddDockerTemplateComponent implements OnInit { this.dockerTemplate = new DockerTemplate(); this.virtualMachineForm = this.formBuilder.group({ - filename: new FormControl('', Validators.required) + filename: new FormControl(null, Validators.required) }); this.containerNameForm = this.formBuilder.group({ - templateName: new FormControl('', Validators.required) + templateName: new FormControl(null, Validators.required) }); this.networkAdaptersForm = this.formBuilder.group({ From 84212c0c33fde77cbc4a6997c1d4f42dcfc9e608 Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 12 Jun 2020 12:05:27 +0200 Subject: [PATCH 25/29] Update server.service.ts --- src/app/services/server.service.ts | 55 +++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/app/services/server.service.ts b/src/app/services/server.service.ts index 1f5e03a1..8bdae05d 100644 --- a/src/app/services/server.service.ts +++ b/src/app/services/server.service.ts @@ -3,26 +3,51 @@ import { IndexedDbService } from './indexed-db.service'; import { Server } from '../models/server'; import { Observable } from 'rxjs'; import { HttpServer } from './http-server.service'; +import { ToasterService } from './toaster.service'; @Injectable() export class ServerService { private tablename = 'servers'; private ready: Promise; + private isIncognitoMode: boolean = false; + private serverIdsInIncognitoMode: string[] = []; constructor( private indexedDbService: IndexedDbService, - private httpServer: HttpServer + private httpServer: HttpServer, + private toasterService: ToasterService ) { this.ready = indexedDbService.get().openDatabase(1, evt => { evt.currentTarget.result.createObjectStore(this.tablename, { keyPath: 'id', autoIncrement: true }); }); + + this.ready.then(() => {}).catch(() => { + this.isIncognitoMode = true; + }) } public get(id: number): Promise { + if (this.isIncognitoMode) { + let server: Server = JSON.parse(localStorage.getItem(`server-${id}`)); + let promise = new Promise(resolve => { + return server; + }); + return promise; + } + return this.onReady(() => this.indexedDbService.get().getByKey(this.tablename, id)) as Promise; } public create(server: Server) { + if (this.isIncognitoMode) { + server.id = this.serverIdsInIncognitoMode.length + 1; + localStorage.setItem(`server-${server.id}`, JSON.stringify(server)); + let promise = new Promise(resolve => { + return server; + }); + return promise; + } + return this.onReady(() => { const promise = new Promise((resolve, reject) => { this.indexedDbService @@ -38,6 +63,13 @@ export class ServerService { } public update(server: Server) { + if (this.isIncognitoMode) { + let promise = new Promise(resolve => { + return []; + }); + return promise; + } + return this.onReady(() => { const promise = new Promise((resolve, reject) => { this.indexedDbService @@ -52,10 +84,24 @@ export class ServerService { } public findAll() { + if (this.isIncognitoMode) { + let promise = new Promise(resolve => { + return []; + }); + return promise; + } + return this.onReady(() => this.indexedDbService.get().getAll(this.tablename)) as Promise; } public delete(server: Server) { + if (this.isIncognitoMode) { + let promise = new Promise(resolve => { + return []; + }); + return promise; + } + return this.onReady(() => this.indexedDbService.get().delete(this.tablename, server.id)); } @@ -68,6 +114,13 @@ export class ServerService { } public getLocalServer(host: string, port: number) { + if (this.isIncognitoMode) { + let promise = new Promise(resolve => { + return []; + }); + return promise; + } + const promise = new Promise((resolve, reject) => { this.findAll().then((servers: Server[]) => { const local = servers.find(server => server.location === 'bundled'); From 5f52f25da4044be0e62381e881492536b9d8394a Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 12 Jun 2020 14:28:53 +0200 Subject: [PATCH 26/29] Update server.service.ts --- src/app/services/server.service.ts | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/app/services/server.service.ts b/src/app/services/server.service.ts index 8bdae05d..55e7de22 100644 --- a/src/app/services/server.service.ts +++ b/src/app/services/server.service.ts @@ -42,6 +42,8 @@ export class ServerService { if (this.isIncognitoMode) { server.id = this.serverIdsInIncognitoMode.length + 1; localStorage.setItem(`server-${server.id}`, JSON.stringify(server)); + this.serverIdsInIncognitoMode.push(`server-${server.id}`); + let promise = new Promise(resolve => { return server; }); @@ -64,6 +66,9 @@ export class ServerService { public update(server: Server) { if (this.isIncognitoMode) { + localStorage.removeItem(`server-${server.id}`); + localStorage.setItem(`server-${server.id}`, JSON.stringify(server)); + let promise = new Promise(resolve => { return []; }); @@ -86,7 +91,13 @@ export class ServerService { public findAll() { if (this.isIncognitoMode) { let promise = new Promise(resolve => { - return []; + let servers: Server[] = []; + this.serverIdsInIncognitoMode.forEach(n => { + let server: Server = JSON.parse(localStorage.getItem(n)); + servers.push(server); + }); + + return servers; }); return promise; } @@ -96,8 +107,11 @@ export class ServerService { public delete(server: Server) { if (this.isIncognitoMode) { + localStorage.removeItem(`server-${server.id}`); + this.serverIdsInIncognitoMode = this.serverIdsInIncognitoMode.filter(n => n !== `server-${server.id}`); + let promise = new Promise(resolve => { - return []; + return server.id; }); return promise; } @@ -114,13 +128,6 @@ export class ServerService { } public getLocalServer(host: string, port: number) { - if (this.isIncognitoMode) { - let promise = new Promise(resolve => { - return []; - }); - return promise; - } - const promise = new Promise((resolve, reject) => { this.findAll().then((servers: Server[]) => { const local = servers.find(server => server.location === 'bundled'); From 53b4e064ee9c4a414e48c84c2e0af5609a76659a Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 12 Jun 2020 15:44:04 +0200 Subject: [PATCH 27/29] Updating server service --- .../direct-link/direct-link.component.ts | 36 ++++++++++-------- .../add-server-dialog.component.ts | 8 ++++ .../server-discovery.component.ts | 6 ++- .../components/servers/servers.component.ts | 38 ++++++++++--------- src/app/services/server.service.ts | 37 +++++++++++------- 5 files changed, 78 insertions(+), 47 deletions(-) diff --git a/src/app/components/direct-link/direct-link.component.ts b/src/app/components/direct-link/direct-link.component.ts index 66277db4..d76496bb 100644 --- a/src/app/components/direct-link/direct-link.component.ts +++ b/src/app/components/direct-link/direct-link.component.ts @@ -24,22 +24,26 @@ export class DirectLinkComponent implements OnInit { const serverIp = this.route.snapshot.paramMap.get('server_ip'); const serverPort = +this.route.snapshot.paramMap.get('server_port'); const projectId = this.route.snapshot.paramMap.get('project_id'); + + this.serverService.serviceInitialized.subscribe(async (value: boolean) => { + if (value) { + const servers = await this.serverService.findAll(); + const server = servers.filter(server => server.host === serverIp && server.port === serverPort)[0]; - const servers = await this.serverService.findAll(); - const server = servers.filter(server => server.host === serverIp && server.port === serverPort)[0]; - - if (server) { - this.router.navigate(['/server', server.id, 'project', projectId]); - } else { - let serverToAdd: Server = new Server(); - serverToAdd.host = serverIp; - serverToAdd.port = serverPort; - serverToAdd.location = 'bundled'; - serverToAdd.name = serverIp; - - this.serverService.create(serverToAdd).then((addedServer: Server) => { - this.router.navigate(['/server', addedServer.id, 'project', projectId]); - }); - } + if (server) { + this.router.navigate(['/server', server.id, 'project', projectId]); + } else { + let serverToAdd: Server = new Server(); + serverToAdd.host = serverIp; + serverToAdd.port = serverPort; + serverToAdd.location = 'bundled'; + serverToAdd.name = serverIp; + + this.serverService.create(serverToAdd).then((addedServer: Server) => { + this.router.navigate(['/server', addedServer.id, 'project', projectId]); + }); + } + } + }); } } diff --git a/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts b/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts index 5519c3da..7408a2e5 100644 --- a/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts +++ b/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts @@ -48,6 +48,8 @@ export class AddServerDialogComponent implements OnInit { async getDefaultLocation() { + console.log('get default location'); + const localServers = await this.numberOfLocalServers(); if(this.electronService.isElectronApp && localServers === 0) { return 'local'; @@ -56,7 +58,10 @@ export class AddServerDialogComponent implements OnInit { } async numberOfLocalServers() { + console.log('calling find all'); const servers = await this.serverService.findAll(); + console.log('servers from add server dialog....'); + return servers.filter((server) => server.location === 'local').length; } @@ -83,7 +88,9 @@ export class AddServerDialogComponent implements OnInit { } async ngOnInit() { + console.log('Start.... '); this.locations = await this.getLocations(); + console.log('Locations: ', this.locations); const defaultLocalServerPath = await this.getDefaultLocalServerPath(); const defaultUbridgePath = await this.getDefaultUbridgePath(); @@ -134,6 +141,7 @@ export class AddServerDialogComponent implements OnInit { }) }); + console.log('????'); const defaultLocation = await this.getDefaultLocation(); this.serverForm.get('location').setValue(defaultLocation); this.serverForm.get('host').setValue(this.getDefaultHost()); diff --git a/src/app/components/servers/server-discovery/server-discovery.component.ts b/src/app/components/servers/server-discovery/server-discovery.component.ts index da682fca..3dec2dd6 100644 --- a/src/app/components/servers/server-discovery/server-discovery.component.ts +++ b/src/app/components/servers/server-discovery/server-discovery.component.ts @@ -32,7 +32,11 @@ export class ServerDiscoveryComponent implements OnInit { ) {} ngOnInit() { - this.discoverFirstAvailableServer(); + this.serverService.serviceInitialized.subscribe(async (value: boolean) => { + if (value) { + this.discoverFirstAvailableServer(); + } + }); } discoverFirstAvailableServer() { diff --git a/src/app/components/servers/servers.component.ts b/src/app/components/servers/servers.component.ts index 29372b95..de6fc3db 100644 --- a/src/app/components/servers/servers.component.ts +++ b/src/app/components/servers/servers.component.ts @@ -40,24 +40,28 @@ export class ServersComponent implements OnInit, OnDestroy { this.isElectronApp = this.electronService.isElectronApp; const runningServersNames = this.serverManagement.getRunningServers(); - this.serverService.findAll().then((servers: Server[]) => { - servers.forEach((server) => { - const serverIndex = runningServersNames.findIndex((serverName) => server.name === serverName); - if(serverIndex >= 0) { - server.status = 'running'; - } - }); - - servers.forEach((server) => { - this.serverService.checkServerVersion(server).subscribe( - (serverInfo) => { - if ((serverInfo.version.split('.')[1]>=2) && (serverInfo.version.split('.')[0]>=2)) { - if (!this.serverDatabase.find(server.name)) this.serverDatabase.addServer(server); + this.serverService.serviceInitialized.subscribe(async (value: boolean) => { + if (value) { + this.serverService.findAll().then((servers: Server[]) => { + servers.forEach((server) => { + const serverIndex = runningServersNames.findIndex((serverName) => server.name === serverName); + if(serverIndex >= 0) { + server.status = 'running'; } - }, - error => {} - ); - }); + }); + + servers.forEach((server) => { + this.serverService.checkServerVersion(server).subscribe( + (serverInfo) => { + if ((serverInfo.version.split('.')[1]>=2) && (serverInfo.version.split('.')[0]>=2)) { + if (!this.serverDatabase.find(server.name)) this.serverDatabase.addServer(server); + } + }, + error => {} + ); + }); + }); + } }); this.dataSource = new ServerDataSource(this.serverDatabase); diff --git a/src/app/services/server.service.ts b/src/app/services/server.service.ts index 55e7de22..1838a312 100644 --- a/src/app/services/server.service.ts +++ b/src/app/services/server.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@angular/core'; +import { Injectable, EventEmitter } from '@angular/core'; import { IndexedDbService } from './indexed-db.service'; import { Server } from '../models/server'; import { Observable } from 'rxjs'; @@ -11,30 +11,35 @@ export class ServerService { private ready: Promise; private isIncognitoMode: boolean = false; private serverIdsInIncognitoMode: string[] = []; + public serviceInitialized: EventEmitter = new EventEmitter(); constructor( private indexedDbService: IndexedDbService, private httpServer: HttpServer, private toasterService: ToasterService ) { - this.ready = indexedDbService.get().openDatabase(1, evt => { - evt.currentTarget.result.createObjectStore(this.tablename, { keyPath: 'id', autoIncrement: true }); - }); - - this.ready.then(() => {}).catch(() => { + this.indexedDbService.get().openDatabase(1).then(() => { + this.ready = indexedDbService.get().openDatabase(1, evt => { + evt.currentTarget.result.createObjectStore(this.tablename, { keyPath: 'id', autoIncrement: true }); + }); + }).catch(() => { + console.log('in incognito mode'); this.isIncognitoMode = true; - }) + }).finally(() => { + this.serviceInitialized.emit(true); + }); } public get(id: number): Promise { if (this.isIncognitoMode) { let server: Server = JSON.parse(localStorage.getItem(`server-${id}`)); let promise = new Promise(resolve => { - return server; + resolve(server); }); return promise; } + console.log('pfffff get'); return this.onReady(() => this.indexedDbService.get().getByKey(this.tablename, id)) as Promise; } @@ -45,11 +50,12 @@ export class ServerService { this.serverIdsInIncognitoMode.push(`server-${server.id}`); let promise = new Promise(resolve => { - return server; + resolve(server); }); return promise; } + console.log('pfffff create'); return this.onReady(() => { const promise = new Promise((resolve, reject) => { this.indexedDbService @@ -70,11 +76,12 @@ export class ServerService { localStorage.setItem(`server-${server.id}`, JSON.stringify(server)); let promise = new Promise(resolve => { - return []; + resolve(server); }); return promise; } + console.log('pfffff update'); return this.onReady(() => { const promise = new Promise((resolve, reject) => { this.indexedDbService @@ -96,12 +103,13 @@ export class ServerService { let server: Server = JSON.parse(localStorage.getItem(n)); servers.push(server); }); - - return servers; + console.log('pfffff find all iin'); + resolve(servers); }); return promise; } + console.log('pfffff find all'); return this.onReady(() => this.indexedDbService.get().getAll(this.tablename)) as Promise; } @@ -111,11 +119,12 @@ export class ServerService { this.serverIdsInIncognitoMode = this.serverIdsInIncognitoMode.filter(n => n !== `server-${server.id}`); let promise = new Promise(resolve => { - return server.id; + resolve(server.id); }); return promise; } + console.log('pfffff delete'); return this.onReady(() => this.indexedDbService.get().delete(this.tablename, server.id)); } @@ -154,6 +163,8 @@ export class ServerService { } protected onReady(query) { + console.log('pfffff'); + const promise = new Promise((resolve, reject) => { this.ready.then( () => { From 7248a0f183783db145463910868bd34694e9230c Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Fri, 12 Jun 2020 16:08:12 +0200 Subject: [PATCH 28/29] Code cleaned up --- .../add-server-dialog/add-server-dialog.component.ts | 7 ------- src/app/services/server.service.ts | 9 --------- 2 files changed, 16 deletions(-) diff --git a/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts b/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts index 7408a2e5..12a354bb 100644 --- a/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts +++ b/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts @@ -48,8 +48,6 @@ export class AddServerDialogComponent implements OnInit { async getDefaultLocation() { - console.log('get default location'); - const localServers = await this.numberOfLocalServers(); if(this.electronService.isElectronApp && localServers === 0) { return 'local'; @@ -58,9 +56,7 @@ export class AddServerDialogComponent implements OnInit { } async numberOfLocalServers() { - console.log('calling find all'); const servers = await this.serverService.findAll(); - console.log('servers from add server dialog....'); return servers.filter((server) => server.location === 'local').length; } @@ -88,9 +84,7 @@ export class AddServerDialogComponent implements OnInit { } async ngOnInit() { - console.log('Start.... '); this.locations = await this.getLocations(); - console.log('Locations: ', this.locations); const defaultLocalServerPath = await this.getDefaultLocalServerPath(); const defaultUbridgePath = await this.getDefaultUbridgePath(); @@ -141,7 +135,6 @@ export class AddServerDialogComponent implements OnInit { }) }); - console.log('????'); const defaultLocation = await this.getDefaultLocation(); this.serverForm.get('location').setValue(defaultLocation); this.serverForm.get('host').setValue(this.getDefaultHost()); diff --git a/src/app/services/server.service.ts b/src/app/services/server.service.ts index 1838a312..5dfedebf 100644 --- a/src/app/services/server.service.ts +++ b/src/app/services/server.service.ts @@ -23,7 +23,6 @@ export class ServerService { evt.currentTarget.result.createObjectStore(this.tablename, { keyPath: 'id', autoIncrement: true }); }); }).catch(() => { - console.log('in incognito mode'); this.isIncognitoMode = true; }).finally(() => { this.serviceInitialized.emit(true); @@ -39,7 +38,6 @@ export class ServerService { return promise; } - console.log('pfffff get'); return this.onReady(() => this.indexedDbService.get().getByKey(this.tablename, id)) as Promise; } @@ -55,7 +53,6 @@ export class ServerService { return promise; } - console.log('pfffff create'); return this.onReady(() => { const promise = new Promise((resolve, reject) => { this.indexedDbService @@ -81,7 +78,6 @@ export class ServerService { return promise; } - console.log('pfffff update'); return this.onReady(() => { const promise = new Promise((resolve, reject) => { this.indexedDbService @@ -103,13 +99,11 @@ export class ServerService { let server: Server = JSON.parse(localStorage.getItem(n)); servers.push(server); }); - console.log('pfffff find all iin'); resolve(servers); }); return promise; } - console.log('pfffff find all'); return this.onReady(() => this.indexedDbService.get().getAll(this.tablename)) as Promise; } @@ -124,7 +118,6 @@ export class ServerService { return promise; } - console.log('pfffff delete'); return this.onReady(() => this.indexedDbService.get().delete(this.tablename, server.id)); } @@ -163,8 +156,6 @@ export class ServerService { } protected onReady(query) { - console.log('pfffff'); - const promise = new Promise((resolve, reject) => { this.ready.then( () => { From a7f5a5fa091b99386eda7d685eac67321e01938c Mon Sep 17 00:00:00 2001 From: piotrpekala7 <31202938+piotrpekala7@users.noreply.github.com> Date: Mon, 15 Jun 2020 10:39:22 +0200 Subject: [PATCH 29/29] Fix for auto_close --- .../edit-project-dialog/edit-project-dialog.component.html | 2 +- .../edit-project-dialog/edit-project-dialog.component.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.html b/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.html index 94d562cf..1103afd7 100644 --- a/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.html +++ b/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.html @@ -33,7 +33,7 @@ Start all nodes when this project is opened - + Leave this project running in the background after closing diff --git a/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.ts b/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.ts index f6fd15c9..dc77f0f9 100644 --- a/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.ts +++ b/src/app/components/projects/edit-project-dialog/edit-project-dialog.component.ts @@ -22,6 +22,8 @@ export class EditProjectDialogComponent implements OnInit { displayedColumns: string[] = ['name', 'value', 'actions']; variables: ProjectVariable[] = []; + auto_close: boolean; + constructor( public dialogRef: MatDialogRef, private formBuilder: FormBuilder, @@ -52,6 +54,7 @@ export class EditProjectDialogComponent implements OnInit { if (this.project.variables) { this.project.variables.forEach(n => this.variables.push(n)); } + this.auto_close = !this.project.auto_close; } addVariable() { @@ -83,6 +86,8 @@ export class EditProjectDialogComponent implements OnInit { this.project.grid_size = this.formGroup.get('nodeGridSize').value; this.project.variables = this.variables; + this.project.auto_close = !this.project.auto_close; + this.projectService.update(this.server, this.project).subscribe((project: Project) => { this.toasterService.success(`Project ${project.name} updated.`); this.onNoClick();