| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /**
- * @fileoverview Integration patch for enhanced download methods
- * @author GrabZilla Development Team
- * @version 2.1.0
- * @since 2024-01-01
- */
- /**
- * DOWNLOAD INTEGRATION PATCH
- *
- * Patches the main GrabZilla app with enhanced download functionality
- * Replaces placeholder methods with real yt-dlp integration
- *
- * Usage: Include this script after the main app.js to apply patches
- */
- // Wait for DOM and app to be ready
- document.addEventListener('DOMContentLoaded', function() {
- // Wait a bit more for the app to initialize
- setTimeout(function() {
- if (typeof window.app !== 'undefined' && window.app instanceof GrabZilla) {
- console.log('Applying enhanced download method patches...');
- applyDownloadPatches(window.app);
- } else {
- console.warn('GrabZilla app not found, retrying...');
- // Retry after a longer delay
- setTimeout(function() {
- if (typeof window.app !== 'undefined' && window.app instanceof GrabZilla) {
- console.log('Applying enhanced download method patches (retry)...');
- applyDownloadPatches(window.app);
- } else {
- console.error('Failed to find GrabZilla app instance for patching');
- console.log('Available on window:', Object.keys(window).filter(k => k.includes('app') || k.includes('grab')));
- }
- }, 2000);
- }
- }, 500);
- });
- /**
- * Apply enhanced download method patches to the app instance
- * @param {GrabZilla} app - The main application instance
- */
- function applyDownloadPatches(app) {
- try {
- // Load enhanced methods
- if (typeof window.EnhancedDownloadMethods === 'undefined') {
- console.error('Enhanced download methods not loaded');
- return;
- }
- const methods = window.EnhancedDownloadMethods;
- // Patch core download methods
- console.log('Patching handleDownloadVideos method...');
- app.handleDownloadVideos = methods.handleDownloadVideos.bind(app);
- console.log('Patching fetchVideoMetadata method...');
- app.fetchVideoMetadata = methods.fetchVideoMetadata.bind(app);
- console.log('Patching handleDownloadProgress method...');
- app.handleDownloadProgress = methods.handleDownloadProgress.bind(app);
- console.log('Patching checkBinaries method...');
- app.checkBinaries = methods.checkBinaries.bind(app);
- // Patch UI update methods
- console.log('Patching updateBinaryStatus method...');
- app.updateBinaryStatus = methods.updateBinaryStatus.bind(app);
- console.log('Patching file selection methods...');
- app.handleSelectSaveDirectory = methods.handleSelectSaveDirectory.bind(app);
- app.handleSelectCookieFile = methods.handleSelectCookieFile.bind(app);
- // Patch UI helper methods
- app.updateSavePathUI = methods.updateSavePathUI.bind(app);
- app.updateCookieFileUI = methods.updateCookieFileUI.bind(app);
- // Re-initialize binary checking with enhanced methods
- console.log('Re-initializing binary check with enhanced methods...');
- app.checkBinaries();
- // Update event listeners for file selection if they exist
- patchFileSelectionListeners(app);
- console.log('Enhanced download method patches applied successfully!');
- } catch (error) {
- console.error('Error applying download method patches:', error);
- }
- }
- /**
- * Patch file selection event listeners
- * @param {GrabZilla} app - The main application instance
- */
- function patchFileSelectionListeners(app) {
- try {
- // Patch save directory selection
- const savePathBtn = document.getElementById('savePathBtn');
- if (savePathBtn) {
- // Remove existing listeners by cloning the element
- const newSavePathBtn = savePathBtn.cloneNode(true);
- savePathBtn.parentNode.replaceChild(newSavePathBtn, savePathBtn);
-
- // Add enhanced listener
- newSavePathBtn.addEventListener('click', () => {
- app.handleSelectSaveDirectory();
- });
-
- console.log('Patched save directory selection listener');
- }
- // Patch cookie file selection
- const cookieFileBtn = document.getElementById('cookieFileBtn');
- if (cookieFileBtn) {
- // Remove existing listeners by cloning the element
- const newCookieFileBtn = cookieFileBtn.cloneNode(true);
- cookieFileBtn.parentNode.replaceChild(newCookieFileBtn, cookieFileBtn);
-
- // Add enhanced listener
- newCookieFileBtn.addEventListener('click', () => {
- app.handleSelectCookieFile();
- });
-
- console.log('Patched cookie file selection listener');
- }
- // Patch download button if it exists
- const downloadBtn = document.getElementById('downloadVideosBtn');
- if (downloadBtn) {
- // Remove existing listeners by cloning the element
- const newDownloadBtn = downloadBtn.cloneNode(true);
- downloadBtn.parentNode.replaceChild(newDownloadBtn, downloadBtn);
-
- // Add enhanced listener
- newDownloadBtn.addEventListener('click', () => {
- app.handleDownloadVideos();
- });
-
- console.log('Patched download button listener');
- }
- } catch (error) {
- console.error('Error patching file selection listeners:', error);
- }
- }
- // Export for manual application if needed
- if (typeof window !== 'undefined') {
- window.applyDownloadPatches = applyDownloadPatches;
- }
|