feat: STEM Virtual Lab, English TTS companion, dynamic textbooks and zero-demo video fallback

This commit is contained in:
Hamza-Ayed
2026-09-03 17:37:15 +03:00
parent 445a1aa0e3
commit 58c3c48f69
19 changed files with 2162 additions and 258 deletions
@@ -85,6 +85,7 @@ class LessonPlaybackData {
final String storageType;
final List<LessonVersionModel> availableVersions;
final List<SocraticCheckpointModel> checkpoints;
final int? lastPositionSeconds;
const LessonPlaybackData({
required this.lessonId,
@@ -94,6 +95,7 @@ class LessonPlaybackData {
this.storageType = 'api_upload',
this.availableVersions = const [],
this.checkpoints = const [],
this.lastPositionSeconds,
});
factory LessonPlaybackData.fromJson(Map<String, dynamic> json) {
@@ -124,6 +126,8 @@ class LessonPlaybackData {
playback['hls_url']?.toString() ?? playback['stream_url']?.toString() ?? playback['video_url']?.toString() ?? '',
);
final lastPos = (json['last_position_seconds'] ?? playback['last_position_seconds'] ?? json['progress']?['position_seconds']) as num?;
return LessonPlaybackData(
lessonId: (lesson['id'] as num?)?.toInt() ?? 0,
title: lesson['title']?.toString() ?? 'الدرس التفاعلي',
@@ -132,6 +136,7 @@ class LessonPlaybackData {
storageType: playback['storage_type']?.toString() ?? 'api_upload',
availableVersions: versions,
checkpoints: points,
lastPositionSeconds: lastPos?.toInt(),
);
}
}