diff --git a/lib/main.dart b/lib/main.dart index 510c28b0..2b80ff65 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,7 +14,6 @@ void main() async { await Stac.initialize(); //Load all LLMs - // await LLMManager.fetchAvailableLLMs(); await ModelManager.fetchAvailableModels(); var settingsModel = await getSettingsFromSharedPrefs(); @@ -30,9 +29,6 @@ void main() async { settingsModel = settingsModel?.copyWithPath(workspaceFolderPath: null); } - // TODO: Load all models at init - // await ModelManager.loadAvailableLLMs(); - runApp( ProviderScope( overrides: [ diff --git a/lib/providers/collection_providers.dart b/lib/providers/collection_providers.dart index 51de409b..12c19eeb 100644 --- a/lib/providers/collection_providers.dart +++ b/lib/providers/collection_providers.dart @@ -350,8 +350,20 @@ class CollectionStateNotifier executionRequestModel.httpRequestModel!); } - // Terminal: start network log + // Terminal final terminal = ref.read(terminalStateProvider.notifier); + + var valRes = getValidationResult(substitutedHttpRequestModel); + if (valRes != null) { + terminal.logSystem( + category: 'validation', + message: valRes, + level: TerminalLevel.error, + ); + ref.read(showTerminalBadgeProvider.notifier).state = true; + } + + // Terminal: start network log final logId = terminal.startNetwork( apiType: executionRequestModel.apiType, method: substitutedHttpRequestModel.method, diff --git a/lib/providers/ui_providers.dart b/lib/providers/ui_providers.dart index 4e5d217f..638d8e0b 100644 --- a/lib/providers/ui_providers.dart +++ b/lib/providers/ui_providers.dart @@ -13,6 +13,7 @@ final historyCodePaneVisibleStateProvider = StateProvider((ref) => false); final saveDataStateProvider = StateProvider((ref) => false); final clearDataStateProvider = StateProvider((ref) => false); final hasUnsavedChangesProvider = StateProvider((ref) => false); +final showTerminalBadgeProvider = StateProvider((ref) => false); // final nameTextFieldControllerProvider = // StateProvider.autoDispose((ref) { diff --git a/lib/screens/dashboard.dart b/lib/screens/dashboard.dart index 5ff7987a..21457302 100644 --- a/lib/screens/dashboard.dart +++ b/lib/screens/dashboard.dart @@ -76,13 +76,21 @@ class Dashboard extends ConsumerWidget { style: Theme.of(context).textTheme.labelSmall, ), kVSpacer10, - IconButton( - isSelected: railIdx == 3, - onPressed: () { - ref.read(navRailIndexStateProvider.notifier).state = 3; - }, - icon: const Icon(Icons.terminal_outlined), - selectedIcon: const Icon(Icons.terminal), + Badge( + backgroundColor: Theme.of(context).colorScheme.error, + isLabelVisible: + ref.watch(showTerminalBadgeProvider) && railIdx != 3, + child: IconButton( + isSelected: railIdx == 3, + onPressed: () { + ref.read(navRailIndexStateProvider.notifier).state = + 3; + ref.read(showTerminalBadgeProvider.notifier).state = + false; + }, + icon: const Icon(Icons.terminal_outlined), + selectedIcon: const Icon(Icons.terminal), + ), ), Text( 'Logs', diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 72b57468..bca76b79 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -8,4 +8,5 @@ export 'http_utils.dart'; export 'js_utils.dart'; export 'save_utils.dart'; export 'ui_utils.dart'; +export 'validation_utils.dart'; export 'window_utils.dart'; diff --git a/lib/utils/validation_utils.dart b/lib/utils/validation_utils.dart new file mode 100644 index 00000000..261faa08 --- /dev/null +++ b/lib/utils/validation_utils.dart @@ -0,0 +1,18 @@ +import 'package:apidash_core/apidash_core.dart'; + +String? getValidationResult(HttpRequestModel requestModel) { + if (requestModel.url.trim().isEmpty) { + return 'Request URL is empty. Please provide a valid URL.'; + } + if (requestModel.method == HTTPVerb.get && requestModel.hasAnyBody) { + return 'GET request contains a body. This is not supported.'; + } + if (requestModel.hasJsonData) { + try { + kJsonDecoder.convert(requestModel.body!); + } catch (e) { + return 'Invalid JSON in request body: ${e.toString()}'; + } + } + return null; +} diff --git a/packages/better_networking/lib/models/http_request_model.dart b/packages/better_networking/lib/models/http_request_model.dart index 3443e3d6..51caf361 100644 --- a/packages/better_networking/lib/models/http_request_model.dart +++ b/packages/better_networking/lib/models/http_request_model.dart @@ -47,6 +47,10 @@ class HttpRequestModel with _$HttpRequestModel { bool get hasTextContentType => bodyContentType == ContentType.text; int get contentLength => utf8.encode(body ?? "").length; bool get hasBody => hasJsonData || hasTextData || hasFormData; + bool get hasAnyBody => + (hasJsonContentType && contentLength > 0) || + (hasTextContentType && contentLength > 0) || + (hasFormDataContentType && formDataMapList.isNotEmpty); bool get hasJsonData => kMethodsWithBody.contains(method) && hasJsonContentType &&