Skip to content

Commit 93668e8

Browse files
committed
SETTING HEADERS AND PARAMS
1 parent 5b37792 commit 93668e8

File tree

13 files changed

+120
-60
lines changed

13 files changed

+120
-60
lines changed

lib/models/settings_model.dart

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class SettingsModel {
1717
this.historyRetentionPeriod = HistoryRetentionPeriod.oneWeek,
1818
this.workspaceFolderPath,
1919
this.isSSLDisabled = false,
20+
this.pingInterval = 100,
21+
this.isPinging = false,
2022
});
2123

2224
final bool isDark;
@@ -31,6 +33,8 @@ class SettingsModel {
3133
final HistoryRetentionPeriod historyRetentionPeriod;
3234
final String? workspaceFolderPath;
3335
final bool isSSLDisabled;
36+
final int? pingInterval;
37+
final bool isPinging;
3438

3539
SettingsModel copyWith({
3640
bool? isDark,
@@ -45,6 +49,8 @@ class SettingsModel {
4549
HistoryRetentionPeriod? historyRetentionPeriod,
4650
String? workspaceFolderPath,
4751
bool? isSSLDisabled,
52+
int? pingInterval,
53+
bool? isPinging,
4854
}) {
4955
return SettingsModel(
5056
isDark: isDark ?? this.isDark,
@@ -61,6 +67,8 @@ class SettingsModel {
6167
historyRetentionPeriod ?? this.historyRetentionPeriod,
6268
workspaceFolderPath: workspaceFolderPath ?? this.workspaceFolderPath,
6369
isSSLDisabled: isSSLDisabled ?? this.isSSLDisabled,
70+
pingInterval: pingInterval ?? this.pingInterval,
71+
isPinging: isPinging ?? this.isPinging,
6472
);
6573
}
6674

@@ -80,6 +88,8 @@ class SettingsModel {
8088
historyRetentionPeriod: historyRetentionPeriod,
8189
workspaceFolderPath: workspaceFolderPath,
8290
isSSLDisabled: isSSLDisabled,
91+
pingInterval: pingInterval,
92+
isPinging: isPinging
8393
);
8494
}
8595

@@ -134,6 +144,8 @@ class SettingsModel {
134144
}
135145
final workspaceFolderPath = data["workspaceFolderPath"] as String?;
136146
final isSSLDisabled = data["isSSLDisabled"] as bool?;
147+
final pingInterval = data["pingInterval"] as int?;
148+
final isPinging = data["isPinging"] as bool?;
137149

138150
const sm = SettingsModel();
139151

@@ -151,6 +163,8 @@ class SettingsModel {
151163
historyRetentionPeriod ?? HistoryRetentionPeriod.oneWeek,
152164
workspaceFolderPath: workspaceFolderPath,
153165
isSSLDisabled: isSSLDisabled,
166+
pingInterval: pingInterval,
167+
isPinging: isPinging
154168
);
155169
}
156170

@@ -170,6 +184,8 @@ class SettingsModel {
170184
"historyRetentionPeriod": historyRetentionPeriod.name,
171185
"workspaceFolderPath": workspaceFolderPath,
172186
"isSSLDisabled": isSSLDisabled,
187+
"pingInterval": pingInterval,
188+
"isPinging": isPinging
173189
};
174190
}
175191

@@ -194,7 +210,9 @@ class SettingsModel {
194210
other.activeEnvironmentId == activeEnvironmentId &&
195211
other.historyRetentionPeriod == historyRetentionPeriod &&
196212
other.workspaceFolderPath == workspaceFolderPath &&
197-
other.isSSLDisabled == isSSLDisabled;
213+
other.isSSLDisabled == isSSLDisabled &&
214+
other.pingInterval == pingInterval &&
215+
other.isPinging == isPinging;
198216
}
199217

200218
@override
@@ -213,6 +231,8 @@ class SettingsModel {
213231
historyRetentionPeriod,
214232
workspaceFolderPath,
215233
isSSLDisabled,
234+
pingInterval,
235+
isPinging
216236
);
217237
}
218238
}

lib/providers/collection_providers.dart

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
import 'dart:developer';
2-
import 'dart:io';
3-
41
import 'package:apidash_core/apidash_core.dart';
52
import 'package:flutter/material.dart';
63
import 'package:flutter_riverpod/flutter_riverpod.dart';
74
import 'package:apidash/consts.dart';
8-
import 'package:highlighter/languages/q.dart';
95
import 'providers.dart';
106
import '../models/models.dart';
117
import '../services/services.dart' show hiveHandler, HiveHandler;
@@ -236,7 +232,9 @@ class CollectionStateNotifier
236232
List<FormDataModel>? formData,
237233
int? responseStatus,
238234
String? message,
235+
ContentTypeWebSocket? contentType,
239236
HttpResponseModel? httpResponseModel,
237+
WebSocketResponseModel? webSocketResponseModel,
240238
}) {
241239
final rId = id ?? ref.read(selectedIdStateProvider);
242240
if (rId == null) {
@@ -264,10 +262,12 @@ class CollectionStateNotifier
264262
formData: formData ?? currentHttpRequestModel.formData,
265263
) : currentHttpRequestModel;
266264

267-
var currentWebSocketRequestModel = currentModel.webSocketRequestModel;
265+
var currentWebSocketRequestModel = currentModel.webSocketRequestModel ?? const WebSocketRequestModel();
266+
268267
final newWebSocketRequestModel = currentApiType == APIType.webSocket
269268
? currentWebSocketRequestModel?.copyWith(
270269
url: url ?? currentWebSocketRequestModel.url,
270+
contentType: contentType ?? currentWebSocketRequestModel.contentType,
271271
headers: headers ?? currentWebSocketRequestModel.headers,
272272
params: params ?? currentWebSocketRequestModel.params,
273273
isHeaderEnabledList: isHeaderEnabledList ??
@@ -471,7 +471,7 @@ class CollectionStateNotifier
471471
Future<void> sendFrames() async {
472472
final requestId = ref.read(selectedIdStateProvider);
473473
ref.read(codePaneVisibleStateProvider.notifier).state = false;
474-
final defaultUriScheme = ref.read(settingsProvider).defaultUriScheme;
474+
475475

476476
if (requestId == null || state == null) {
477477
return;
@@ -484,9 +484,7 @@ class CollectionStateNotifier
484484

485485

486486

487-
// substituted websocket needs to be added here
488-
489-
// set current model's isWorking to true and update state
487+
490488
var map = {...state!};
491489
map[requestId] = requestModel.copyWith(
492490
isWorking: true,
@@ -496,9 +494,14 @@ class CollectionStateNotifier
496494

497495

498496
String message = currentWebSocketRequestModel.message ?? '';
499-
(String?,DateTime?,String?) frame = await webSocketManager.sendText(requestId,message);
497+
late (String?,DateTime?,String?) frame;
498+
if(currentWebSocketRequestModel.contentType == ContentTypeWebSocket.text){
499+
frame = await webSocketManager.sendText(requestId,message);
500+
}else if(currentWebSocketRequestModel.contentType == ContentTypeWebSocket.binary){
501+
frame = await webSocketManager.sendBinary(requestId,message);
502+
}
500503

501-
var newWebSocketResponseModel;
504+
late WebSocketResponseModel newWebSocketResponseModel;
502505
if(frame.$1 != null){
503506
newWebSocketResponseModel = requestModel.webSocketResponseModel!.copyWith(
504507
frames: [
@@ -563,14 +566,23 @@ class CollectionStateNotifier
563566
print("entered null");
564567
return;
565568
}
569+
570+
bool isPinging = ref.read(settingsProvider).isPinging;
571+
566572
webSocketManager.createWebSocketClient(requestId);
567-
// webSocketClient.pingDuration = Duration(seconds: 5);
573+
if(isPinging){
574+
Duration durationPinging = Duration(milliseconds: ref.read(settingsProvider).pingInterval!);
575+
webSocketManager.setPingInterval(requestId,durationPinging);
576+
}else{
577+
webSocketManager.setPingInterval(requestId,null);
578+
}
579+
568580
final url = requestModel!.webSocketRequestModel!.url;
569581
(String?,DateTime?) result = await webSocketManager.connect(requestId,url);
570582

571583
var map = {...state!};
572584
map[requestId] = requestModel.copyWith(
573-
isWorking: result.$1 == "Connected",
585+
isWorking: result.$1 == KLabelConnect,
574586
sendingTime: result.$2,
575587
webSocketResponseModel: const WebSocketResponseModel(),
576588
);
@@ -603,28 +615,10 @@ class CollectionStateNotifier
603615
print(message);
604616
},
605617
onError: (error) async{
606-
print("error found");
607-
608-
// var map = {...state!};
609-
// map[requestId] = requestModel.copyWith(
610-
// responseStatus: -1,
611-
// message: error.toString(),
612-
// isWorking: false,
613-
// );
614-
// state = map;
615618

616619
},
617620
onDone: () async{
618621
print("Connection done");
619-
620-
621-
// var map = {...state!};
622-
// map[requestId] = requestModel.copyWith(
623-
// responseStatus: 200,
624-
// message: "Connection closed",
625-
// isWorking: false,
626-
// );
627-
// state = map;
628622
},
629623
cancelOnError: false,
630624
);

lib/providers/settings_providers.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class ThemeStateNotifier extends StateNotifier<SettingsModel> {
3333
HistoryRetentionPeriod? historyRetentionPeriod,
3434
String? workspaceFolderPath,
3535
bool? isSSLDisabled,
36+
int? pingInterval,
37+
bool? isPinging
3638
}) async {
3739
state = state.copyWith(
3840
isDark: isDark,
@@ -47,6 +49,8 @@ class ThemeStateNotifier extends StateNotifier<SettingsModel> {
4749
historyRetentionPeriod: historyRetentionPeriod,
4850
workspaceFolderPath: workspaceFolderPath,
4951
isSSLDisabled: isSSLDisabled,
52+
pingInterval: pingInterval,
53+
isPinging: isPinging,
5054
);
5155
await setSettingsToSharedPrefs(state);
5256
}

lib/screens/home_page/editor_pane/details_card/request_pane/request_body.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ class DropdownButtonBodyContentWebSocketType extends ConsumerWidget {
187187
return DropdownButtonContentTypeWebSocket(
188188
contentType: requestBodyContentType,
189189
onChanged: (ContentTypeWebSocket? value) {
190+
191+
// ref.read(collectionStateNotifierProvider.notifier).update(
192+
// contentType: value,
193+
// );
190194

191195
},
192196
);

lib/screens/home_page/editor_pane/details_card/request_pane/request_headers.dart

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,40 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
4343
final selectedId = ref.watch(selectedIdStateProvider);
4444
ref.watch(selectedRequestModelProvider
4545
.select((value) => value?.httpRequestModel?.headers?.length));
46-
var rH = ref.read(selectedRequestModelProvider)?.httpRequestModel?.headers;
46+
var apiType = ref.read(selectedRequestModelProvider)?.apiType;
47+
late List<NameValueModel>? rH;
48+
if(apiType == APIType.webSocket){
49+
rH = ref.read(selectedRequestModelProvider)?.webSocketRequestModel?.headers;
50+
}else{
51+
rH = ref.read(selectedRequestModelProvider)?.httpRequestModel?.headers;
52+
}
4753
bool isHeadersEmpty = rH == null || rH.isEmpty;
4854
headerRows = isHeadersEmpty
4955
? [
5056
kNameValueEmptyModel,
5157
]
5258
: rH + [kNameValueEmptyModel];
53-
isRowEnabledList = [
59+
60+
if(apiType == APIType.webSocket){
61+
isRowEnabledList = [
62+
...(ref
63+
.read(selectedRequestModelProvider)
64+
?.webSocketRequestModel
65+
?.isHeaderEnabledList ??
66+
List.filled(rH?.length ?? 0, true, growable: true))
67+
];
68+
69+
}else{
70+
isRowEnabledList = [
5471
...(ref
5572
.read(selectedRequestModelProvider)
5673
?.httpRequestModel
5774
?.isHeaderEnabledList ??
5875
List.filled(rH?.length ?? 0, true, growable: true))
5976
];
77+
78+
}
79+
6080
isRowEnabledList.add(false);
6181
isAddingRow = false;
6282

lib/screens/settings_page.dart

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class SettingsPage extends ConsumerWidget {
9797
trailing: CodegenPopupMenu(
9898
value: settings.defaultCodeGenLang,
9999
onChanged: (value) {
100-
ref
100+
ref
101101
.read(settingsProvider.notifier)
102102
.update(defaultCodeGenLang: value);
103103
},
@@ -224,21 +224,37 @@ class SettingsPage extends ConsumerWidget {
224224
),
225225
),
226226
),
227+
!kIsWeb
228+
? SwitchListTile(
229+
hoverColor: kColorTransparent,
230+
title: const Text('Enable Pinging'),
231+
subtitle: Text(
232+
'Current selection: ${settings.isPinging ? "Pinging Enabled" : "Pinging Disabled"}',
233+
234+
),
235+
value: settings.isPinging,
236+
onChanged: (bool value) {
237+
ref
238+
.read(settingsProvider.notifier)
239+
.update(isPinging: value );
240+
},
241+
)
242+
: kSizedBoxEmpty,
227243

228244
ListTile(
229245
hoverColor: kColorTransparent,
230246
title: const Text('Interval Between Ping Requests'),
231247
subtitle: Text(
232-
'Current interval: seconds'),
248+
'Current interval between consecutive pings are: ${settings.pingInterval} milliseconds'),
233249
trailing: SizedBox(
234250
width: 120,
235251
child: TextField(
236-
controller: TextEditingController(text: "22"),
252+
controller: TextEditingController(text: settings.pingInterval.toString()),
237253
keyboardType: TextInputType.number,
238254
onChanged: (value) {
239-
// ref
240-
// .read(settingsProvider.notifier)
241-
// .update(pingInterval: int.parse(value));
255+
ref
256+
.read(settingsProvider.notifier)
257+
.update(pingInterval: int.parse(value));
242258
},
243259
),
244260
),

packages/apidash_core/lib/consts.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ const kSubTypeFormData = "form-data";
7575

7676
const kSubTypeDefaultViewOptions = 'all';
7777

78+
const kTypeBinary = 'binary';
79+
7880
enum ContentType {
7981
json("$kTypeApplication/$kSubTypeJson"),
8082
text("$kTypeText/$kSubTypePlain"),
@@ -86,8 +88,8 @@ enum ContentType {
8688

8789
enum ContentTypeWebSocket {
8890

89-
text("$kTypeText/$kSubTypePlain"),
90-
binary("$kTypeApplication/$kSubTypeOctetStream");
91+
text(kTypeText),
92+
binary(kTypeBinary);
9193

9294

9395
const ContentTypeWebSocket(this.header);

packages/apidash_core/lib/services/http_client_manager.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import 'dart:io';
22
import 'dart:collection';
3-
import 'package:apidash_core/services/clientWrapper.dart';
4-
import 'package:apidash_core/services/websocket_service.dart';
53
import 'package:flutter/foundation.dart';
64
import 'package:http/http.dart' as http;
75
import 'package:http/io_client.dart';

packages/apidash_core/lib/services/web_socket_manager.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ Future<(String?,DateTime?)> connect(String requestId,String url) async {
4343
return (null,null,null);
4444
}
4545

46+
Future<(String?,DateTime?,String?)> sendBinary(String requestId,String message) async {
47+
if (_clients.containsKey(requestId)) {
48+
return _clients[requestId]!.sendBinary(message);
49+
}
50+
return (null,null,null);
51+
}
52+
53+
4654
Future<void> listen(String requestId,Future<void> Function(dynamic message) onMessage,{Future<void> Function(dynamic error)? onError, Future<void> Function()? onDone,bool? cancelOnError}) async {
4755
if (_clients.containsKey(requestId)) {
4856
return _clients[requestId]!.listen(
@@ -53,4 +61,9 @@ Future<(String?,DateTime?)> connect(String requestId,String url) async {
5361
);
5462
}
5563
}
64+
Future<void> setPingInterval(String requestId,Duration? interval) async {
65+
if (_clients.containsKey(requestId)) {
66+
_clients[requestId]!.pingInterval = interval;
67+
}
68+
}
5669
}

0 commit comments

Comments
 (0)