diff --git a/lib/services/ai/ai_api_service.dart b/lib/services/ai/ai_api_service.dart index 6d8381e..28dc5ac 100644 --- a/lib/services/ai/ai_api_service.dart +++ b/lib/services/ai/ai_api_service.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:didvan/models/ai/files_model.dart'; +import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/services/storage/storage.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; @@ -70,7 +71,9 @@ class AiApiService { filename = file.basename; mimeType = file.isAudio() - ? 'audio/m4a' + ? file.isRecorded + ? 'audio/${kIsWeb && AppInitializer.getOperatingSystem() == 'iOS' ? 'webm' : 'm4a'}' + : 'audio/${file.extname.replaceAll('.', '')}' : file.isImage() ? 'image/png' : 'application/pdf'; diff --git a/lib/services/app_initalizer.dart b/lib/services/app_initalizer.dart index 091de14..ca1a80b 100644 --- a/lib/services/app_initalizer.dart +++ b/lib/services/app_initalizer.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_web_libraries_in_flutter + import 'package:didvan/main.dart'; import 'package:didvan/models/notification_message.dart'; import 'package:didvan/models/requests/news.dart'; @@ -14,6 +16,7 @@ import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher_string.dart'; +import 'dart:html' as html; class AppInitializer { static String? fcmToken; @@ -39,6 +42,24 @@ class AppInitializer { }); } + static String getOperatingSystem() { + final userAgent = html.window.navigator.userAgent.toLowerCase(); + + if (userAgent.contains('windows')) { + return 'Windows'; + } else if (userAgent.contains('mac os')) { + return 'MacOS'; + } else if (userAgent.contains('iphone') || userAgent.contains('ipad')) { + return 'iOS'; + } else if (userAgent.contains('android')) { + return 'Android'; + } else if (userAgent.contains('linux')) { + return 'Linux'; + } else { + return 'Unknown'; + } + } + static Future initilizeSettings() async { try { final brightness = await StorageService.getValue(key: 'brightness'); diff --git a/lib/views/ai/widgets/ai_message_bar.dart b/lib/views/ai/widgets/ai_message_bar.dart index b9bd547..5ed6476 100644 --- a/lib/views/ai/widgets/ai_message_bar.dart +++ b/lib/views/ai/widgets/ai_message_bar.dart @@ -8,6 +8,7 @@ import 'package:didvan/models/ai/bots_model.dart'; import 'package:didvan/models/ai/chats_model.dart'; import 'package:didvan/models/ai/files_model.dart'; import 'package:didvan/models/ai/messages_model.dart'; +import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/services/media/voice.dart'; import 'package:didvan/utils/action_sheet.dart'; @@ -343,11 +344,11 @@ class _AiMessageBarState extends State { .getDuration( src: path ?? ''); - + state.file = FilesModel( path.toString(), name: - '${DateTime.now().millisecondsSinceEpoch ~/ 1000}.m4a', + '${DateTime.now().millisecondsSinceEpoch ~/ 1000}.${kIsWeb && AppInitializer.getOperatingSystem() == 'iOS' ? 'webm' : 'm4a'}', isRecorded: true, audio: true, image: false,