Skip to content

Commit 96d1c45

Browse files
committed
Support request level settings and no-rediect is added #680
1 parent 10a7dde commit 96d1c45

File tree

6 files changed

+407
-131
lines changed

6 files changed

+407
-131
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,7 @@ REST Client Extension also supports request-level settings for each independent
685685
Name | Syntax | Description
686686
-----|-----------|--------------------------------------------------------------
687687
note | `# @note` | Use for request confirmation, especially for critical request
688+
no-redirect | `# @no-redirect` | Don't follow the 3XX response as redirects
688689

689690
> All the above leading `#` can be replaced with `//`
690691

src/controllers/requestController.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ExtensionContext, Range, TextDocument, ViewColumn, window } from 'vscode';
22
import Logger from '../logger';
3-
import { SystemSettings } from '../models/configurationSettings';
3+
import { IRestClientSettings, RequestSettings, RestClientSettings, SystemSettings } from '../models/configurationSettings';
44
import { HistoricalHttpRequest, HttpRequest } from '../models/httpRequest';
55
import { RequestMetadata } from '../models/requestMetadata';
66
import { RequestParserFactory } from '../models/requestParserFactory';
@@ -15,7 +15,6 @@ import { HttpResponseTextDocumentView } from '../views/httpResponseTextDocumentV
1515
import { HttpResponseWebview } from '../views/httpResponseWebview';
1616

1717
export class RequestController {
18-
private readonly _restClientSettings: SystemSettings = SystemSettings.Instance;
1918
private _requestStatusEntry: RequestStatusEntry;
2019
private _httpClient: HttpClient;
2120
private _webview: HttpResponseWebview;
@@ -55,10 +54,13 @@ export class RequestController {
5554
}
5655
}
5756

57+
const requestSettings = new RequestSettings(metadatas)
58+
const settings: IRestClientSettings = new RestClientSettings(requestSettings);
59+
5860
// parse http request
5961
const httpRequest = await RequestParserFactory.createRequestParser(text).parseHttpRequest(name);
6062

61-
await this.runCore(httpRequest, document);
63+
await this.runCore(httpRequest, settings, document);
6264
}
6365

6466
@trace('Rerun Request')
@@ -67,7 +69,8 @@ export class RequestController {
6769
return;
6870
}
6971

70-
await this.runCore(this._lastRequest);
72+
// TODO: recover from last request settings
73+
await this.runCore(this._lastRequest, SystemSettings.Instance);
7174
}
7275

7376
@trace('Cancel Request')
@@ -77,7 +80,7 @@ export class RequestController {
7780
this._requestStatusEntry.update({ state: RequestState.Cancelled });
7881
}
7982

80-
private async runCore(httpRequest: HttpRequest, document?: TextDocument) {
83+
private async runCore(httpRequest: HttpRequest, settings: IRestClientSettings, document?: TextDocument) {
8184
// clear status bar
8285
this._requestStatusEntry.update({ state: RequestState.Pending });
8386

@@ -86,7 +89,7 @@ export class RequestController {
8689

8790
// set http request
8891
try {
89-
const response = await this._httpClient.send(httpRequest);
92+
const response = await this._httpClient.send(httpRequest, settings);
9093

9194
// check cancel
9295
if (httpRequest.isCancelled) {
@@ -101,10 +104,10 @@ export class RequestController {
101104

102105
try {
103106
const activeColumn = window.activeTextEditor!.viewColumn;
104-
const previewColumn = this._restClientSettings.previewColumn === ViewColumn.Active
107+
const previewColumn = settings.previewColumn === ViewColumn.Active
105108
? activeColumn
106109
: ((activeColumn as number) + 1) as ViewColumn;
107-
if (this._restClientSettings.previewResponseInUntitledDocument) {
110+
if (settings.previewResponseInUntitledDocument) {
108111
this._textDocumentView.render(response, previewColumn);
109112
} else if (previewColumn) {
110113
this._webview.render(response, previewColumn);
@@ -123,7 +126,7 @@ export class RequestController {
123126
}
124127

125128
if (error.code === 'ETIMEDOUT') {
126-
error.message = `Request timed out. Double-check your network connection and/or raise the timeout duration (currently set to ${this._restClientSettings.timeoutInMilliseconds}ms) as needed: 'rest-client.timeoutinmilliseconds'. Details: ${error}.`;
129+
error.message = `Request timed out. Double-check your network connection and/or raise the timeout duration (currently set to ${settings.timeoutInMilliseconds}ms) as needed: 'rest-client.timeoutinmilliseconds'. Details: ${error}.`;
127130
} else if (error.code === 'ECONNREFUSED') {
128131
error.message = `The connection was rejected. Either the requested service isn’t running on the requested server/port, the proxy settings in vscode are misconfigured, or a firewall is blocking requests. Details: ${error}.`;
129132
} else if (error.code === 'ENETUNREACH') {

0 commit comments

Comments
 (0)