Files
discord-clone/node_modules/vscode-languageclient/lib/common/progressPart.js
2023-01-03 09:29:04 -06:00

82 lines
3.2 KiB
JavaScript

"use strict";
/* --------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProgressPart = void 0;
const vscode_1 = require("vscode");
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
const Is = require("./utils/is");
class ProgressPart {
constructor(_client, _token, done) {
this._client = _client;
this._token = _token;
this._reported = 0;
this._disposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {
switch (value.kind) {
case 'begin':
this.begin(value);
break;
case 'report':
this.report(value);
break;
case 'end':
this.done();
done && done(this);
break;
}
});
}
begin(params) {
// Since we don't use commands this will be a silent window progress with a hidden notification.
vscode_1.window.withProgress({ location: vscode_1.ProgressLocation.Window, cancellable: params.cancellable, title: params.title }, async (progress, cancellationToken) => {
this._progress = progress;
this._infinite = params.percentage === undefined;
this._cancellationToken = cancellationToken;
this._cancellationToken.onCancellationRequested(() => {
this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, { token: this._token });
});
this.report(params);
return new Promise((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
});
}
report(params) {
if (this._infinite && Is.string(params.message)) {
this._progress.report({ message: params.message });
}
else if (Is.number(params.percentage)) {
let percentage = Math.max(0, Math.min(params.percentage, 100));
let delta = Math.max(0, percentage - this._reported);
this._progress.report({ message: params.message, increment: delta });
this._reported += delta;
}
}
cancel() {
if (this._disposable) {
this._disposable.dispose();
this._disposable = undefined;
}
if (this._reject) {
this._reject();
this._resolve = undefined;
this._reject = undefined;
}
}
done() {
if (this._disposable) {
this._disposable.dispose();
this._disposable = undefined;
}
if (this._resolve) {
this._resolve();
this._resolve = undefined;
this._reject = undefined;
}
}
}
exports.ProgressPart = ProgressPart;
//# sourceMappingURL=progressPart.js.map