document.addEventListener('DOMContentLoaded', function() { const loader = document.getElementById('loader'); // Debug URL parameters const urlParams = new URLSearchParams(window.location.search); console.log("URL parameters:", Object.fromEntries(urlParams)); const folderId = urlParams.get('folder_id'); if (folderId) { //console.log("Folder ID:", folderId); //console.log("Expected video path:", `/static/uploads/${folderId}/video.mp4`); //console.log("Expected subtitle path:", `/static/uploads/${folderId}/titulky.srt`); } const player = videojs('video-player', { controls: true, fluid: true, autoplay: false, preload: 'auto', playbackRates: [0.5, 1, 1.5, 2], html5: { vhs: { enableLowInitialPlaylist: true } } }); console.log("Video.js player initialized"); player.ready(() => { console.log("Video.js player is ready"); // Funkce pro kontrolu a načítání titulků function checkAndLoadSubtitles() { //console.log("Hledám titulky v elementu 'initial-subtitles' v HTML..."); const initialSubtitles = document.getElementById('initial-subtitles'); if (initialSubtitles) { console.log("Nalezen element s titulky v HTML šabloně"); const content = initialSubtitles.textContent; console.log("Obsah titulků:", content ? `Nalezen (délka: ${content.length} znaků)` : "Prázdný"); if (content && content.trim()) { console.log("Načítám nalezené titulky do editoru"); try { SubtitleManager.loadSubtitles(content.trim()); console.log("Titulky úspěšně načteny do editoru"); // Skryj loader, pokud video a titulky jsou připravené if (loader) { loader.classList.add('loader-hidden'); } // Zastav interval, protože titulky byly úspěšně načteny clearInterval(subtitleCheckInterval); } catch (error) { console.error("Chyba při načítání titulků:", error); } } else { console.warn("Element s titulky byl nalezen, ale je prázdný"); } } else { //console.log("Titulky nebyly nalezeny v HTML elementu 'initial-subtitles'. Cesta v šabloně: {{ subtitle_content | safe }}"); } } // Opakovaná kontrola titulků každých 2 sekundy const subtitleCheckInterval = setInterval(checkAndLoadSubtitles, 2000); // Kontrola i při načtení videa checkAndLoadSubtitles(); // Inicializace Timeline Manageru TimelineManager.init(player); // Skrytí loaderu, pokud je video načteno a titulky jsou přítomné const videoSource = player.currentSrc(); if (loader && videoSource) { console.log("Loader hidden as video source is loaded"); } }); const videoUpload = document.getElementById('video-upload'); const subtitleUpload = document.getElementById('subtitle-upload'); const exportVttBtn = document.getElementById('export-vtt'); const exportSrtBtn = document.getElementById('export-srt'); videoUpload.addEventListener('change', function(e) { const file = e.target.files[0]; if (file) { const formData = new FormData(); formData.append('video', file); fetch('/upload_video', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { player.src({ type: 'video/mp4', src: data.filepath }); player.load(); } }) .catch(error => console.error('Error:', error)); } }); subtitleUpload.addEventListener('change', function(e) { const file = e.target.files[0]; if (file) { const formData = new FormData(); formData.append('subtitle', file); fetch('/upload_subtitle', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { SubtitleManager.loadSubtitles(data.content); TimelineManager.render(); } }) .catch(error => console.error('Error:', error)); } }); exportVttBtn.addEventListener('click', function() { const vtt = SubtitleManager.exportVTT(); downloadFile(vtt, 'subtitles.vtt', 'text/vtt'); }); exportSrtBtn.addEventListener('click', function() { const srt = SubtitleManager.exportSRT(); downloadFile(srt, 'subtitles.srt', 'text/plain'); }); document.getElementById('generate-subtitles').addEventListener('click', function() { const videoFile = videoUpload.files[0]; if (!videoFile) { alert('Please upload a video file first'); return; } const formData = new FormData(); formData.append('video', videoFile); this.disabled = true; this.innerHTML = ' Generating...'; fetch('/generate_subtitles', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { SubtitleManager.subtitles = []; data.subtitles.forEach(subtitle => { SubtitleManager.addSubtitle(subtitle.start, subtitle.end, subtitle.text); }); TimelineManager.render(); } else { alert('Error generating subtitles: ' + data.error); } }) .catch(error => { console.error('Error:', error); alert('Error generating subtitles'); }) .finally(() => { this.disabled = false; this.innerHTML = ' Generate Subtitles'; }); }); function downloadFile(content, filename, type) { const blob = new Blob([content], { type: type }); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; a.click(); window.URL.revokeObjectURL(url); } // Add subtitle button functionality document.getElementById('add-subtitle').addEventListener('click', function() { const currentTime = player.currentTime(); SubtitleManager.addSubtitle(currentTime, currentTime + 2, 'New subtitle'); TimelineManager.render(); }); // Save subtitle button functionality document.getElementById('saveSubtitle').addEventListener('click', function() { SubtitleManager.updateParentEditor(); }); // Export translation button functionality document.getElementById('exportTranslation').addEventListener('click', function() { const srt = SubtitleManager.exportSRT(); // Aktualizace session storage window.parent.sessionStorage.setItem('subtitles', srt); console.log('Exportovaný překlad (SRT formát):'); console.log('----------------------------------------'); console.log(srt); console.log('----------------------------------------'); console.log('Session storage "subtitles" byl aktualizován'); console.log("Všechny session:"); for (let i = 0; i < sessionStorage.length; i++) { const key = sessionStorage.key(i); const value = sessionStorage.getItem(key); console.log(`${key}: ${value}`); } // Odeslání zprávy o změně titulků do rodičovské stránky window.parent.postMessage({ type: 'subtitlesChanged', data: srt }, '*'); // Notifikace uživateli if (window.parent.showToast) { window.parent.showToast('Překlad byl úspěšně aktualizován', false); } }); // Funkce pro odeslání zprávy o změně titulků do rodičovské stránky function notifySubtitlesChange(subtitlesContent) { window.parent.postMessage({ type: 'subtitlesChanged', data: subtitlesContent }, '*'); } // Handler pro tlačítko vytvoření dabingu document.getElementById('createDubbing').addEventListener('click', async function() { try { // Získat titulky ze session storage const subtitles = SubtitleManager.getSubtitles(); if (!subtitles || subtitles.length === 0) { alert('Nejprve musíte upravit titulky!'); return; } // Převést titulky na JSON ve správném formátu pro backend const formattedSubtitles = subtitles.map((sub, index) => ({ id: index + 1, start: sub.start, end: sub.end, text: sub.text, translation: sub.text // Text je už přeložený })); const subtitlesJson = JSON.stringify(formattedSubtitles); // Získat formulář z hlavní stránky const mainForm = window.parent.document.getElementById('translateForm'); const formData = new FormData(mainForm); // Přidat titulky jako JSON formData.append('edited_subtitles', subtitlesJson); // Přidat cestu k videu ze session const videoPath = sessionStorage.getItem('video_path'); if (videoPath) { formData.append('downloaded_video_path', videoPath); } // Odeslat požadavek na vytvoření dabingu const response = await fetch('/translate', { method: 'POST', body: formData }); const result = await response.json(); if (result.success) { // Přehrát výsledné video if (result.video) { const videoPlayer = document.getElementById('video-player'); if (videoPlayer) { videoPlayer.src = result.video; videoPlayer.load(); } } alert('Dabing byl úspěšně vytvořen!'); } else { alert('Chyba při vytváření dabingu: ' + result.error); } } catch (error) { console.error('Error:', error); alert('Chyba při vytváření dabingu: ' + error.message); } }); // Update timeline when video metadata is loaded player.on('loadedmetadata', function() { console.log("Video metadata loaded, duration:", player.duration()); TimelineManager.render(); }); });