onedrive_sync/renderer/renderer.js

163 lines
5.4 KiB
JavaScript

const { ipcRenderer, session } = require('electron');
const graphApi = require('./graphApi');
// Wait for webview to load
const webview = document.getElementById('main-content');
console.log('Setting up webview event listeners...');
webview.addEventListener('did-start-loading', () => {
console.log('Webview started loading');
});
webview.addEventListener('did-finish-load', () => {
console.log('Webview finished loading');
// Create and add the configuration button
console.log('Creating configuration button');
const button = document.createElement('button');
button.id = 'config-button';
button.innerHTML = '<i class="fas fa-cog"></i> Configuration';
document.body.appendChild(button);
console.log('Configuration button added to DOM');
button.addEventListener('click', () => {
console.log('Configuration button clicked');
ipcRenderer.send('toggle-config');
});
});
webview.addEventListener('did-fail-load', (event) => {
console.error('Webview failed to load:', event);
});
// Configuration panel toggle
ipcRenderer.on('toggle-config', () => {
console.log('Toggling configuration panel');
const panel = document.getElementById('config-panel');
const isOpening = !panel.classList.contains('open');
panel.classList.toggle('open');
console.log(isOpening ? 'Panel opened' : 'Panel closed');
if (isOpening) {
console.log('Loading saved configuration...');
ipcRenderer.send('load-config');
}
});
// Folder selection
document.getElementById('select-folder').addEventListener('click', () => {
console.log('Folder selection requested');
ipcRenderer.send('select-folder');
});
ipcRenderer.on('folder-selected', (event, path) => {
console.log('Folder selected:', path);
document.getElementById('dest-folder').value = path;
});
// Form submission
document.getElementById('config-form').addEventListener('submit', (event) => {
event.preventDefault();
const destFolder = document.getElementById('dest-folder').value;
const onedriveSource = document.getElementById('onedrive-source').value;
console.log('Saving configuration:', { destFolder, onedriveSource });
ipcRenderer.send('set-config', { destFolder, onedriveSource });
document.getElementById('config-panel').classList.remove('open');
console.log('Configuration panel closed');
});
document.getElementById('sync-button').addEventListener('click', async () => {
const destFolder = document.getElementById('dest-folder').value;
const onedriveSource = document.getElementById('onedrive-source').value;
if (!destFolder || !onedriveSource) {
alert('Please set both destination folder and OneDrive source path first');
return;
}
try {
// Show loading state
const syncButton = document.getElementById('sync-button');
const originalText = syncButton.textContent;
syncButton.textContent = 'Syncing...';
syncButton.disabled = true;
// Get folder contents using GraphApiClient
const items = await graphApi.listFolderContents(onedriveSource);
console.log('Found items:', items.length);
// Process the items
// TODO: Handle the items as needed
showStatus(`Found ${items.length} items`);
// Send the items to the main process
ipcRenderer.send('start-sync', { destFolder, onedriveSource , items});
} catch (error) {
console.error('Sync error:', error);
showStatus(`Error: ${error.message}`, true);
} finally {
// Reset button state
const syncButton = document.getElementById('sync-button');
syncButton.textContent = originalText;
syncButton.disabled = false;
}
});
// Config loaded handler
ipcRenderer.on('config-loaded', (event, config) => {
console.log('Received saved configuration:', config);
document.getElementById('dest-folder').value = config.destFolder;
document.getElementById('onedrive-source').value = config.onedriveSource;
});
// Video handling
ipcRenderer.on('video-saved', (event, { filename, path }) => {
console.log('✓ Video saved successfully:', { filename, path });
showStatus(`Saved: ${filename}`);
});
ipcRenderer.on('video-save-error', (event, error) => {
console.error('⚠ Video save error:', error);
showStatus(`Error: ${error}`, true);
});
function showStatus(message, isError = false) {
console.log(`Showing status: ${message} (${isError ? 'error' : 'success'})`);
const statusDiv = document.getElementById('status-display') || createStatusDisplay();
statusDiv.textContent = message;
statusDiv.className = `show ${isError ? 'error' : 'success'}`;
// Reset animation
statusDiv.style.animation = 'none';
statusDiv.offsetHeight;
statusDiv.style.animation = null;
}
function createStatusDisplay() {
console.log('Creating status display element');
const div = document.createElement('div');
div.id = 'status-display';
document.body.appendChild(div);
return div;
}
// Add after the existing event listeners
document.getElementById('close-config').addEventListener('click', () => {
console.log('Close button clicked');
document.getElementById('config-panel').classList.remove('open');
});
// Add these event listeners with your other ipcRenderer.on handlers
ipcRenderer.on('sync-complete', (event, { totalItems, videoItems }) => {
console.log('Sync completed:', { totalItems, videoItems });
showStatus(`Sync complete: Downloaded ${videoItems} videos`);
});
ipcRenderer.on('sync-error', (event, error) => {
console.error('Sync error:', error);
showStatus(`Sync error: ${error}`, true);
});