Skip to content

Commit b681fcd

Browse files
committed
Avoid saving redundant default data (Fixes #44)
1 parent 243b967 commit b681fcd

File tree

5 files changed

+52
-8
lines changed

5 files changed

+52
-8
lines changed

src/utils/BaseViewProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export default abstract class<ProviderMessageType, WebviewMessageType>
5858
return data;
5959
}
6060

61-
writeStorage(file: string, data: object) {
61+
writeStorage(file: string, data?: object) {
6262
const fileData = this._context.workspaceState.get(this.view, {});
6363
this._context.workspaceState.update(this.view, {
6464
...fileData,

src/views/judge/provider/JudgeViewProvider.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,11 @@ export default class extends BaseViewProvider<ProviderMessage, WebviewMessage> {
267267
if (!file) {
268268
return;
269269
}
270+
if (this._state.size === 0 && this._timeLimit === 0) {
271+
// everything is defaulted, might as well not save it
272+
super.writeStorage(file, undefined);
273+
return;
274+
}
270275

271276
const testcases: ITestcase[] = [];
272277
for (const testcase of this._state.values()) {

src/views/stress/message.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export enum ProviderMessageType {
3535
STOP = 2,
3636
VIEW = 3,
3737
ADD = 4,
38+
RESET = 5,
3839
}
3940
export interface ILoadedMessage {
4041
type: ProviderMessageType.LOADED;
@@ -53,9 +54,13 @@ export interface IAddMessage {
5354
type: ProviderMessageType.ADD;
5455
id: number;
5556
}
57+
export interface IResetMessage {
58+
type: ProviderMessageType.RESET;
59+
}
5660
export type ProviderMessage =
5761
| ILoadedMessage
5862
| IRunMessage
5963
| IStopMessage
6064
| IViewMessage
61-
| IAddMessage;
65+
| IAddMessage
66+
| IResetMessage;

src/views/stress/provider/StressViewProvider.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ export default class extends BaseViewProvider<ProviderMessage, WebviewMessage> {
5757
case ProviderMessageType.ADD:
5858
this._add(msg);
5959
break;
60+
case ProviderMessageType.RESET:
61+
this._reset();
62+
break;
6063
}
6164
}
6265

@@ -385,20 +388,41 @@ export default class extends BaseViewProvider<ProviderMessage, WebviewMessage> {
385388
});
386389
}
387390

391+
private _reset() {
392+
const file = vscode.window.activeTextEditor?.document.fileName;
393+
if (!file) {
394+
return;
395+
}
396+
397+
for (let i = 0; i < 3; i++) {
398+
this._state[i].data.reset();
399+
this._state[i].status = Status.NA;
400+
}
401+
super._postMessage({ type: WebviewMessageType.CLEAR });
402+
this._saveState();
403+
}
404+
388405
private _saveState() {
389406
const file = vscode.window.activeTextEditor?.document.fileName;
390407
if (!file) {
391408
return;
392409
}
393410

411+
let isDefault = true;
412+
for (const state of this._state) {
413+
isDefault &&= state.data.data === '';
414+
isDefault &&= state.status === Status.NA;
415+
}
394416
super.writeStorage(
395417
file,
396-
this._state.map<IData>((value) => {
397-
return {
398-
data: value.data.data,
399-
status: value.status,
400-
};
401-
}),
418+
isDefault
419+
? undefined
420+
: this._state.map<IData>((value) => {
421+
return {
422+
data: value.data.data,
423+
status: value.status,
424+
};
425+
}),
402426
);
403427
}
404428

src/views/stress/webview/App.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const expand = (id: number) =>
3131
postProviderMessage({ type: ProviderMessageType.VIEW, id });
3232
const add = (id: number) =>
3333
postProviderMessage({ type: ProviderMessageType.ADD, id });
34+
const reset = () => postProviderMessage({ type: ProviderMessageType.RESET });
3435

3536
window.addEventListener('message', (event: MessageEvent<WebviewMessage>) => {
3637
switch (event.data.type) {
@@ -61,6 +62,7 @@ function handleClear() {
6162
batch(() => {
6263
for (let i = 0; i < 3; i++) {
6364
state[i].data = '';
65+
state[i].status = Status.NA;
6466
}
6567
});
6668
}
@@ -116,6 +118,14 @@ export default function App() {
116118
<div class="w-6 shrink-0" />
117119
<div class="flex justify-start gap-x-2 bg-zinc-800 grow">
118120
{button}
121+
<button
122+
type="button"
123+
class="text-base leading-tight px-3 w-fit display-font"
124+
style={{ backgroundColor: BLUE_COLOR }}
125+
onClick={reset}
126+
>
127+
reset
128+
</button>
119129
</div>
120130
</div>
121131
</div>

0 commit comments

Comments
 (0)