Update Saqel Platform: 2026-09-02 00:55:56
This commit is contained in:
@@ -1,6 +1,15 @@
|
||||
import '../../core/config/app_config.dart';
|
||||
|
||||
String _absolutePlaybackUrl(String value) {
|
||||
if (value.isEmpty || value.startsWith('http://') || value.startsWith('https://')) return value;
|
||||
final base = AppConfig.baseUrl.replaceAll(RegExp(r'/+$'), '');
|
||||
return '$base/${value.replaceFirst(RegExp(r'^/+'), '')}';
|
||||
}
|
||||
|
||||
/// Model representing an In-Video Socratic Gatekeeping Checkpoint (فحص الفهم السقراطي)
|
||||
class SocraticCheckpointModel {
|
||||
final int id;
|
||||
final int questionId;
|
||||
final String questionText;
|
||||
final int timestampSeconds;
|
||||
final int rewindSecondsOnFail;
|
||||
@@ -10,6 +19,7 @@ class SocraticCheckpointModel {
|
||||
|
||||
const SocraticCheckpointModel({
|
||||
required this.id,
|
||||
this.questionId = 0,
|
||||
required this.questionText,
|
||||
required this.timestampSeconds,
|
||||
this.rewindSecondsOnFail = 45,
|
||||
@@ -29,7 +39,12 @@ class SocraticCheckpointModel {
|
||||
}
|
||||
|
||||
return SocraticCheckpointModel(
|
||||
id: (json['id'] as num?)?.toInt() ?? 0,
|
||||
id: json['id'] is num
|
||||
? (json['id'] as num).toInt()
|
||||
: int.tryParse((json['id'] ?? json['exam_id'] ?? '0').toString()) ?? 0,
|
||||
questionId: json['question_id'] is num
|
||||
? (json['question_id'] as num).toInt()
|
||||
: int.tryParse(json['question_id']?.toString() ?? '0') ?? 0,
|
||||
questionText: json['question']?.toString() ?? json['question_text']?.toString() ?? 'سؤال فحص الفهم السقراطي',
|
||||
timestampSeconds: (json['timestamp_seconds'] as num?)?.toInt() ?? 120,
|
||||
rewindSecondsOnFail: (json['rewind_seconds'] as num?)?.toInt() ?? 45,
|
||||
@@ -105,9 +120,9 @@ class LessonPlaybackData {
|
||||
}
|
||||
}
|
||||
|
||||
final vidUrl = playback['hls_url']?.toString() ??
|
||||
playback['stream_url']?.toString() ??
|
||||
playback['video_url']?.toString() ?? '';
|
||||
final vidUrl = _absolutePlaybackUrl(
|
||||
playback['hls_url']?.toString() ?? playback['stream_url']?.toString() ?? playback['video_url']?.toString() ?? '',
|
||||
);
|
||||
|
||||
return LessonPlaybackData(
|
||||
lessonId: (lesson['id'] as num?)?.toInt() ?? 0,
|
||||
@@ -143,9 +158,9 @@ class LessonVersionModel {
|
||||
|
||||
factory LessonVersionModel.fromJson(Map<String, dynamic> json) {
|
||||
final playback = json['playback'] is Map ? json['playback'] as Map : {};
|
||||
final vidUrl = playback['hls_url']?.toString() ??
|
||||
playback['stream_url']?.toString() ??
|
||||
playback['video_url']?.toString() ?? '';
|
||||
final vidUrl = _absolutePlaybackUrl(
|
||||
playback['hls_url']?.toString() ?? playback['stream_url']?.toString() ?? playback['video_url']?.toString() ?? '',
|
||||
);
|
||||
|
||||
return LessonVersionModel(
|
||||
lessonId: (json['lesson_id'] as num?)?.toInt() ?? 0,
|
||||
|
||||
Reference in New Issue
Block a user