Skip to content

Commit e22ca5f

Browse files
committed
Added check for 10K line (user settings) #23
1 parent cc04546 commit e22ca5f

7 files changed

Lines changed: 99 additions & 52 deletions

File tree

package.json

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -206,19 +206,19 @@
206206
],
207207
"markdownDescription": "Configure Units for G-Code Files. Choose Auto to have G-Code parse for ```G20/G21```"
208208
},
209-
"gcode.navTree.autoRefresh": {
210-
"type": "boolean",
211-
"default": true,
212-
"markdownDescription": "Enable G-Code Tree Auto Refresh",
209+
"gcode.views.maxAutoRefresh": {
210+
"type": "integer",
211+
"default": "10000",
212+
"markdownDescription": "Maximum Number of Lines in Editor to allow Auto Refresh",
213213
"scope": "window"
214214
},
215-
"gcode.stats.enabled": {
215+
"gcode.views.navTree.autoRefresh": {
216216
"type": "boolean",
217-
"default": false,
218-
"markdownDescription": "Enable G-Code Statistics Panel",
217+
"default": true,
218+
"markdownDescription": "Enable G-Code Tree Auto Refresh",
219219
"scope": "window"
220220
},
221-
"gcode.stats.autoRefresh": {
221+
"gcode.views.stats.autoRefresh": {
222222
"type": "boolean",
223223
"default": false,
224224
"markdownDescription": "Enable G-Code Stats Auto Refresh",
@@ -251,7 +251,6 @@
251251
{
252252
"id": "gcode.views.stats",
253253
"name": "Stats",
254-
"when": "config.gcode.statsEnable",
255254
"contextualTitle": "G-Code"
256255
}
257256
]
@@ -260,12 +259,12 @@
260259
{
261260
"view": "gcode.views.navTree",
262261
"contents": "Tree only available when viewing G-Code",
263-
"when": "!gcode:navTree:enabled"
262+
"when": "!gcode:views:navTree:enabled"
264263
},
265264
{
266265
"view": "gcode.views.stats",
267266
"contents": "G-Code Stats only available when viewing G-Code",
268-
"when": "!gcode:stats:enabled"
267+
"when": "!gcode:views:stats:enabled"
269268
}
270269
],
271270
"menus": {
@@ -430,4 +429,4 @@
430429
"dependencies": {
431430
"@appliedengdesign/gcode-reference": "^0.0.3"
432431
}
433-
}
432+
}

src/control.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,20 +113,22 @@ export class Control {
113113

114114
context.subscriptions.push((this._navTree = new NavTreeView()));
115115

116-
Logger.log(`Nav Tree AutoRefresh: ${configuration.getParam('navTree.autoRefresh') ? 'Enabled' : 'Disabled'}`);
116+
Logger.log(
117+
`Nav Tree AutoRefresh: ${configuration.getParam('views.navTree.autoRefresh') ? 'Enabled' : 'Disabled'}`,
118+
);
117119

118120
// Load Stats View
119-
Logger.log(`Stats: ${configuration.getParam('stats.enabled') ? 'Enabled' : 'Disabled'}`);
120-
Logger.log(`Stats AutoRefresh: ${configuration.getParam('stats.autoRefresh') ? 'Enabled' : 'Disabled'}`);
121+
Logger.log(`Stats: ${configuration.getParam('views.stats.enabled') ? 'Enabled' : 'Disabled'}`);
122+
Logger.log(`Stats AutoRefresh: ${configuration.getParam('views.stats.autoRefresh') ? 'Enabled' : 'Disabled'}`);
121123

122-
if (config.getParam('stats.enabled')) {
124+
if (config.getParam('views.stats.enabled')) {
123125
Logger.log('Loading Stats View...');
124126
context.subscriptions.push((this._statsView = new StatsView()));
125127
} else {
126128
let disposable: Disposable;
127129
// eslint-disable-next-line prefer-const
128130
disposable = configuration.onDidChange(e => {
129-
if (configuration.changed(e, 'stats.enabled')) {
131+
if (configuration.changed(e, 'views.stats.enabled')) {
130132
disposable.dispose();
131133
Logger.log('Loading Stats View...');
132134
context.subscriptions.push((this._statsView = new StatsView()));

src/util/constants.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,6 @@ export const enum VSBuiltInCommands {
7272

7373
export const enum Contexts {
7474
MachineType = 'gcode:general:machineType',
75-
ViewsNavTreeEnabled = 'gcode:navTree:enabled',
76-
ViewsStatsEnabled = 'gcode:stats:enabled',
75+
ViewsNavTreeEnabled = 'gcode:views:navTree:enabled',
76+
ViewsStatsEnabled = 'gcode:views:stats:enabled',
7777
}

src/util/messages.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,28 @@ export class Messages {
5353
}
5454
}
5555

56+
static async showRefreshWarningMessage(): Promise<boolean> {
57+
// Show Warning message about large file refresh
58+
59+
const actions: MessageItem[] = [{ title: 'Continue' }, { title: 'Abort' }];
60+
61+
const result = await Messages.showMessage(
62+
'warn',
63+
'File size is above 10K lines. Tree / Stats refresh may not work.',
64+
...actions,
65+
);
66+
67+
if (result != null) {
68+
if (result === actions[0]) {
69+
return true;
70+
} else {
71+
return false;
72+
}
73+
} else {
74+
return false;
75+
}
76+
}
77+
5678
private static async showMessage(
5779
type: 'info' | 'warn' | 'error',
5880
msg: string,

src/views/navTreeView.ts

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ import { GCodeTreeParser } from './providers/gcodeTreeParser';
2121
import { Control } from '../control';
2222
import { Logger } from '../util/logger';
2323
import { ViewCommands } from './viewCommands';
24+
import { Messages } from '../util/messages';
2425

2526
const NavTreeViewInfo = {
2627
ViewId: 'gcode.views.navTree',
2728
ViewName: 'Nav Tree',
28-
CONFIG: {
29-
AUTOREF: 'navTree.autoRefresh',
29+
Config: {
30+
AutoRefresh: 'views.navTree.autoRefresh',
31+
MaxAutoRefresh: 'views.maxAutoRefresh',
3032
},
3133
Context: Contexts.ViewsNavTreeEnabled,
3234
};
@@ -53,10 +55,10 @@ export class NavTreeView extends GView<NavTreeNode> {
5355
// Initialize StatusBar
5456
this._statusbar = Control.statusBarController;
5557

56-
this._autoRefresh = <boolean>configuration.getParam(NavTreeViewInfo.CONFIG.AUTOREF);
58+
this._autoRefresh = <boolean>configuration.getParam(NavTreeViewInfo.Config.AutoRefresh);
5759

5860
if (this._autoRefresh) {
59-
this.refresh();
61+
void this.refresh();
6062
}
6163
}
6264

@@ -92,7 +94,7 @@ export class NavTreeView extends GView<NavTreeNode> {
9294
);
9395

9496
if (this._autoRefresh) {
95-
this.refresh();
97+
void this.refresh();
9698
}
9799
}
98100
} else {
@@ -120,7 +122,7 @@ export class NavTreeView extends GView<NavTreeNode> {
120122
);
121123

122124
if (this._autoRefresh) {
123-
this.refresh();
125+
void this.refresh();
124126
}
125127
}
126128
} else {
@@ -133,8 +135,8 @@ export class NavTreeView extends GView<NavTreeNode> {
133135
}
134136

135137
protected onConfigurationChanged(e: ConfigurationChangeEvent) {
136-
if (configuration.changed(e, NavTreeViewInfo.CONFIG.AUTOREF)) {
137-
this._autoRefresh = <boolean>configuration.getParam(NavTreeViewInfo.CONFIG.AUTOREF);
138+
if (configuration.changed(e, NavTreeViewInfo.Config.AutoRefresh)) {
139+
this._autoRefresh = <boolean>configuration.getParam(NavTreeViewInfo.Config.AutoRefresh);
138140
Logger.log(`Nav Tree AutoRefresh: ${this._autoRefresh ? 'Enabled' : 'Disabled'}`);
139141
}
140142
}
@@ -149,7 +151,7 @@ export class NavTreeView extends GView<NavTreeNode> {
149151
void Control.setContext(Contexts.ViewsNavTreeEnabled, true);
150152
}
151153

152-
this.refresh();
154+
void this.refresh();
153155
}
154156
},
155157
this,
@@ -165,12 +167,28 @@ export class NavTreeView extends GView<NavTreeNode> {
165167
);
166168
}
167169

168-
protected refresh(element?: NavTreeNode): void {
169-
if (this.parseTree()) {
170-
if (element) {
171-
this._onDidChangeTreeData.fire(element);
170+
protected async refresh(element?: NavTreeNode): Promise<void> {
171+
if (this._editor && this._editor.document) {
172+
if (
173+
this._editor.document.lineCount > <number>configuration.getParam(NavTreeViewInfo.Config.MaxAutoRefresh)
174+
) {
175+
if (await Messages.showRefreshWarningMessage()) {
176+
if (this.parseTree()) {
177+
if (element) {
178+
this._onDidChangeTreeData.fire(element);
179+
} else {
180+
this._onDidChangeTreeData.fire(undefined);
181+
}
182+
}
183+
}
172184
} else {
173-
this._onDidChangeTreeData.fire(undefined);
185+
if (this.parseTree()) {
186+
if (element) {
187+
this._onDidChangeTreeData.fire(element);
188+
} else {
189+
this._onDidChangeTreeData.fire(undefined);
190+
}
191+
}
174192
}
175193
}
176194
}

src/views/statsView.ts

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Control } from '../control';
99
import { configuration } from '../util/config';
1010
import { constants, Contexts } from '../util/constants';
1111
import { Logger } from '../util/logger';
12+
import { Messages } from '../util/messages';
1213
import { ResourceType } from './nodes/nodes';
1314
import { StatsNode, StatsType } from './nodes/statsNode';
1415
import { GCodeRuntimeParser } from './providers/gcodeRuntimeParser';
@@ -19,7 +20,9 @@ const StatsViewInfo = {
1920
ViewId: 'gcode.views.stats',
2021
ViewName: 'Stats',
2122
Config: {
22-
AutoRefresh: 'stats.autoRefresh',
23+
AutoRefresh: 'views.stats.autoRefresh',
24+
Enabled: 'views.stats.enabled',
25+
MaxAutoRefresh: 'views.maxAutoRefresh',
2326
},
2427
Context: Contexts.ViewsStatsEnabled,
2528
};
@@ -125,8 +128,8 @@ export class StatsView extends GView<StatsNode> {
125128
}
126129

127130
protected onConfigurationChanged(e: ConfigurationChangeEvent) {
128-
if (configuration.changed(e, 'stats.autoRefresh')) {
129-
this._autoRefresh = <boolean>configuration.getParam('stats.autoRefresh');
131+
if (configuration.changed(e, StatsViewInfo.Config.AutoRefresh)) {
132+
this._autoRefresh = <boolean>configuration.getParam(StatsViewInfo.Config.AutoRefresh);
130133
Logger.log(`Stats AutoRefresh: ${this._autoRefresh ? 'Enabled' : 'Disabled'}`);
131134
}
132135
}
@@ -144,24 +147,28 @@ export class StatsView extends GView<StatsNode> {
144147
},
145148
this,
146149
);
147-
148-
// Enable stats
149-
commands.registerCommand(
150-
ViewCommands.EnableStats,
151-
() => {
152-
Logger.log('Enabling Stats...');
153-
void configuration.setParam('stats.enabled', true);
154-
},
155-
this,
156-
);
157150
}
158151

159-
protected refresh(element?: StatsNode): void {
160-
if (this.genStats()) {
161-
if (element) {
162-
this._onDidChangeTreeData.fire(element);
152+
protected async refresh(element?: StatsNode): Promise<void> {
153+
if (this._editor && this._editor.document) {
154+
if (this._editor.document.lineCount > <number>configuration.getParam(StatsViewInfo.Config.MaxAutoRefresh)) {
155+
if (await Messages.showRefreshWarningMessage()) {
156+
if (this.genStats()) {
157+
if (element) {
158+
this._onDidChangeTreeData.fire(element);
159+
} else {
160+
this._onDidChangeTreeData.fire(undefined);
161+
}
162+
}
163+
}
163164
} else {
164-
this._onDidChangeTreeData.fire(undefined);
165+
if (this.genStats()) {
166+
if (element) {
167+
this._onDidChangeTreeData.fire(element);
168+
} else {
169+
this._onDidChangeTreeData.fire(undefined);
170+
}
171+
}
165172
}
166173
}
167174
}

src/views/viewCommands.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
'use strict';
77

88
export const enum ViewCommands {
9-
EnableStats = 'gcode.views.stats.enable',
109
RefreshStats = 'gcode.views.stats.refresh',
1110
RefreshTree = 'gcode.views.navTree.refresh',
1211
TreeSelect = 'gcode.views.navTree.select',

0 commit comments

Comments
 (0)