-
-
⚡ رفع مباشر ومعالجة ذكية فورية (HLS + Gemini Socratic Engine)
-
معالجة آلية 100% 🧠
+
+
+
+
⚡ رفع وحفظ الحصة ومعالجة البث الذكي
+ معالجة تلقائية بالكامل 100% 🧠
-
رفع وحفظ الحصة والتحليل الذكي الآن 🚀
+
رفع وبث الحصة وتوليد الفحص السقراطي آلياً 🚀
-
-
-
-
🐰 الربط مع شبكة Bunny.net Stream (Cloud CDN & Token DRM)
- HLS + SHA256 DRM
-
-
-
-
-
-
+
🧠
-
المعالجة السقراطية الذكية تعمل تلقائياً 100%
+
المعالجة السقراطية والتخزين السحابي يعملان تلقائياً 100%
- لا داعي لأي جهد يدوي من المعلم. فور رفعك للملف، يطابق النظام نصوص المنهاج الوزاري، ويولد الفهرس الزمني للأفكار ونقاط الفحص السقراطي اللحظي، وتظهر فوراً للطالب في المشغل التفاعلي.
+ لا يوجد أي جهد إضافي على المعلم. فور انتهاء الرفع، يُجزأ الفيديو إلى مقاطع HLS مشفرة، وتُحفظ على شبكة Cloudflare R2 فائقة السرعة، ويولد الذكاء الاصطناعي الفهرس الزمني وأسئلة التثبيت الصدمي لتظهر فوراً للطالب.
@@ -1248,29 +1213,6 @@ class TeacherPortal
// ==========================================
// Video Storage & Bunny Stream Studio Handlers
// ==========================================
- function switchVideoUploadMode(mode) {
- const apiBox = document.getElementById('uploader_box_api');
- const bunnyBox = document.getElementById('uploader_box_bunny');
- const btnApi = document.getElementById('btn_mode_api');
- const btnBunny = document.getElementById('btn_mode_bunny');
-
- if (mode === 'api') {
- apiBox.style.display = 'block';
- bunnyBox.style.display = 'none';
- btnApi.style.background = 'linear-gradient(135deg, #0284C7, #0369A1)';
- btnApi.style.border = 'none';
- btnBunny.style.background = 'rgba(255,255,255,0.06)';
- btnBunny.style.border = '1px solid var(--border)';
- } else {
- apiBox.style.display = 'none';
- bunnyBox.style.display = 'block';
- btnBunny.style.background = 'linear-gradient(135deg, #F59E0B, #D97706)';
- btnBunny.style.border = 'none';
- btnApi.style.background = 'rgba(255,255,255,0.06)';
- btnApi.style.border = '1px solid var(--border)';
- }
- }
-
function onVideoFileSelected(input) {
if (input.files && input.files[0]) {
const f = input.files[0];
@@ -1312,7 +1254,7 @@ class TeacherPortal
progressContainer.style.display = 'block';
submitBtn.disabled = true;
- submitBtn.textContent = 'جارٍ رفع الفيديو... ⏳';
+ submitBtn.textContent = 'جارٍ رفع الفيديو والمعالجة الذكية... ⏳';
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/teacher/videos/upload-direct', true);
@@ -1331,12 +1273,12 @@ class TeacherPortal
xhr.onload = function() {
submitBtn.disabled = false;
- submitBtn.textContent = 'بدء رفع وحفظ الفيديو الآن 🚀';
+ submitBtn.textContent = 'رفع وبث الحصة وتوليد الفحص السقراطي آلياً 🚀';
try {
const data = JSON.parse(xhr.responseText);
if (xhr.status >= 200 && xhr.status < 300 && data.status === 'success') {
- showLuxuryToast('تم حفظ الفيديو بنجاح 🎬', data.message || 'تم إنشاء الدرس وحفظ الفيديو');
- alert('✅ ' + data.message + '\nرابط البث المباشر: ' + data.data.stream_url);
+ showLuxuryToast('تم حفظ ومعالجة الفيديو بنجاح 🎬', data.message || 'تم إنشاء الدرس وبث HLS');
+ alert('✅ ' + data.message + '\n\nتم تقطيع الفيديو لـ HLS وحفظه وتوليد نقاط الفحص السقراطي آلياً!');
document.getElementById('form_direct_upload').reset();
document.getElementById('file_selected_label').textContent = 'اضغط لاختيار ملف الفيديو أو اسحبه وأفلته هنا';
progressContainer.style.display = 'none';
@@ -1351,77 +1293,13 @@ class TeacherPortal
xhr.onerror = function() {
submitBtn.disabled = false;
- submitBtn.textContent = 'بدء رفع وحفظ الفيديو الآن 🚀';
+ submitBtn.textContent = 'رفع وبث الحصة وتوليد الفحص السقراطي آلياً 🚀';
alert('❌ حدث خطأ في الاتصال أثناء رفع الفيديو');
};
xhr.send(formData);
}
- async function handleBunnyCreateVideo() {
- const token = getAuthToken();
- const title = document.getElementById('bunny_lesson_title').value.trim() || 'درس جديد في الرياضيات';
- const courseId = document.getElementById('bunny_course_select').value;
-
- try {
- const res = await fetch('/api/teacher/videos/bunny-create', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Authorization': 'Bearer ' + token
- },
- body: JSON.stringify({ title: title, course_id: courseId })
- });
- const data = await res.json();
- if (res.ok && data.status === 'success') {
- document.getElementById('bunny_video_id_input').value = data.data.video_id;
- showLuxuryToast('تم توليد المعرف في Bunny Stream 🐰', `GUID: ${data.data.video_id}`);
- } else {
- alert('خطأ: ' + (data.message || 'فشل الاتصال بـ Bunny Stream'));
- }
- } catch (err) {
- console.error(err);
- alert('خطأ في الاتصال بالخادم');
- }
- }
-
- async function handleBunnyVideoLink(e) {
- e.preventDefault();
- const token = getAuthToken();
- const courseId = document.getElementById('bunny_course_select').value;
- const title = document.getElementById('bunny_lesson_title').value.trim();
- const bunnyVideoId = document.getElementById('bunny_video_id_input').value.trim();
- const duration = document.getElementById('bunny_duration_input').value;
-
- try {
- const res = await fetch('/api/teacher/videos/bunny-link', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Authorization': 'Bearer ' + token
- },
- body: JSON.stringify({
- course_id: courseId,
- title: title,
- bunny_video_id: bunnyVideoId,
- duration_seconds: duration
- })
- });
- const data = await res.json();
- if (res.ok && data.status === 'success') {
- showLuxuryToast('تم ربط الدرس بنجاح 🐰', data.message);
- alert('✅ تم ربط الحصة بـ Bunny Stream وحمايتها بروابط التشفير الرقمي DRM!');
- document.getElementById('form_bunny_link').reset();
- loadTeacherCourses();
- } else {
- alert('خطأ: ' + (data.message || 'فشل حفظ الدرس'));
- }
- } catch (err) {
- console.error(err);
- alert('خطأ في الاتصال بالخادم');
- }
- }
-
async function loadTeacherCourses() {
const token = getAuthToken();
if (!token) return;
@@ -1431,17 +1309,12 @@ class TeacherPortal
});
const data = await res.json();
if (res.ok && data.data && data.data.length > 0) {
- const selects = [
- document.getElementById('direct_upload_course_select'),
- document.getElementById('bunny_course_select')
- ];
- selects.forEach(sel => {
- if (sel) {
- sel.innerHTML = data.data.map(c => `
-
${c.title} (${c.semester || 'فصل أول'})
- `).join('');
- }
- });
+ const sel = document.getElementById('direct_upload_course_select');
+ if (sel) {
+ sel.innerHTML = data.data.map(c => `
+
${c.title} (${c.semester || 'فصل أول'})
+ `).join('');
+ }
}
} catch (e) {
console.error('Load courses note:', e);