Update codebase

This commit is contained in:
Hamza-Ayed
2026-08-09 16:56:13 +03:00
parent 95e2e4f35d
commit b64debaa88
1058 changed files with 164327 additions and 113928 deletions
@@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import 'package:get/get.dart' hide Response;
import 'package:tripz_rider/views/widgets/error_snakbar.dart';
import 'package:siro_rider/views/widgets/error_snakbar.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:just_audio/just_audio.dart';
@@ -12,6 +12,7 @@ import '../../constant/links.dart';
import '../../main.dart';
import '../../print.dart';
import '../../services/signaling_service.dart';
import '../../services/turn_credentials_service.dart';
import '../../views/widgets/voice_call_bottom_sheet.dart';
import 'functions/crud.dart';
@@ -231,11 +232,16 @@ class VoiceCallController extends GetxController with WidgetsBindingObserver {
// EN: Initiates an outgoing call.
// AR: يبدأ مكالمة صادرة.
/// [sessionEndpoint] و [sessionPayload] يسمحان لوحدات أخرى (طلبات الطعام)
/// بإعادة استخدام نفس قناة WebRTC المقنّعة بواجهة إنشاء جلسة خاصة بها،
/// بدل تكرار منطق الإشارات والصوت. القيمة الافتراضية هي مكالمة الرحلة.
Future<void> startCall({
required String rideIdVal,
required String driverId,
required String passengerId,
required String remoteNameVal,
String? sessionEndpoint,
Map<String, String>? sessionPayload,
}) async {
if (state.value != VoiceCallState.idle) return;
@@ -266,8 +272,9 @@ class VoiceCallController extends GetxController with WidgetsBindingObserver {
// 2. EN: Call PHP Backend to create Node.js session & notify Driver via FCM.
// AR: استدعاء واجهة PHP لإنشاء الجلسة على Node.js وإشعار السائق عبر FCM.
final response = await CRUD().post(
link: "${AppLink.server}/ride/call/passenger/create_call_session.php",
payload: {'ride_id': rideIdVal},
link: sessionEndpoint ??
"${AppLink.server}/ride/call/passenger/create_call_session.php",
payload: sessionPayload ?? {'ride_id': rideIdVal},
);
if (response == null ||
@@ -278,8 +285,15 @@ class VoiceCallController extends GetxController with WidgetsBindingObserver {
return;
}
final data = response['data'];
sessionId.value = data['session_id'];
// واجهات الرحلات تُعيد الجلسة في 'data'، وواجهات وحدة الطعام تُعيدها في
// 'message' (غلاف jsonSuccess الموحّد) — نقبل الشكلين.
final data = response['data'] ?? response['message'];
if (data is! Map || data['session_id'] == null) {
_endCallInternal("session_creation_failed");
mySnackbarError("Error starting voice call".tr);
return;
}
sessionId.value = data['session_id'].toString();
// 3. EN: Connect to WebRTC signaling server / AR: الاتصال بخادم الإشارات
await _signaling.connect(sessionId.value, currentUserId);
@@ -473,7 +487,15 @@ class VoiceCallController extends GetxController with WidgetsBindingObserver {
});
}
}
} else {
}
// خوادم TURN من الباك إند — بيانات اعتماد مؤقتة. بلا TURN تفشل المكالمة
// صامتةً حين يكون الطرفان خلف CGNAT (شبكة الجوال)، وهي الحالة الغالبة.
// نُضيفها قبل خوادم الإشارات: STUN يبقى أولاً في الترتيب داخل القائمة.
final turnServers = await TurnCredentialsService.getIceServers();
iceServers.addAll(turnServers);
if (iceServers.isEmpty) {
// EN: Fallback STUN servers / AR: خوادم STUN الاحتياطية
iceServers.addAll([
{"urls": "stun:stun.l.google.com:19302"},