Files
2025-05-26 07:45:27 -05:00

305 lines
7.5 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistema de descarga automatizado</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root {
--primary-color: #1DA1F2;
--background-color: #15202B;
--card-background: #192734;
--text-color: #FFFFFF;
--border-color: #38444D;
--success-color: #17BF63;
--error-color: #E0245E;
}
body {
font-family: 'Inter', sans-serif;
background-color: var(--background-color);
color: var(--text-color);
margin: 0;
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 800px;
margin: 0 auto;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 15px 0;
border-bottom: 1px solid var(--border-color);
margin-bottom: 20px;
}
h1 {
font-size: 1.5em;
font-weight: 600;
margin: 0;
}
.url-list {
display: flex;
flex-direction: column;
gap: 20px;
}
.url-container {
background: var(--card-background);
border-radius: 15px;
padding: 20px;
position: relative;
border: 1px solid var(--border-color);
transition: all 0.3s ease;
}
.url-container:hover {
border-color: var(--primary-color);
}
.url-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.url-title {
font-weight: 600;
color: var(--primary-color);
}
.remove-url {
background: transparent;
color: var(--error-color);
border: none;
font-size: 1.2em;
cursor: pointer;
padding: 5px 10px;
border-radius: 50%;
transition: all 0.3s ease;
}
.remove-url:hover {
background: rgba(224, 36, 94, 0.1);
}
.url-inputs {
display: flex;
flex-direction: column;
gap: 15px;
}
input {
background: var(--background-color);
border: 1px solid var(--border-color);
color: var(--text-color);
padding: 12px;
border-radius: 25px;
font-size: 0.9em;
width: 100%;
box-sizing: border-box;
}
input:focus {
border-color: var(--primary-color);
outline: none;
}
.log-container {
margin-top: 15px;
background: var(--background-color);
border-radius: 12px;
padding: 10px;
max-height: 200px;
overflow-y: auto;
font-size: 0.9em;
border: 1px solid var(--border-color);
}
.log-message {
padding: 5px 10px;
border-bottom: 1px solid var(--border-color);
}
.log-message:last-child {
border-bottom: none;
}
.actions {
display: flex;
gap: 10px;
margin-top: 20px;
}
button {
background: var(--primary-color);
color: white;
border: none;
padding: 12px 24px;
border-radius: 25px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
font-size: 0.9em;
}
button:hover {
opacity: 0.9;
}
.add-url {
background: var(--success-color);
}
.status-indicator {
width: 10px;
height: 10px;
border-radius: 50%;
margin-right: 10px;
display: inline-block;
}
.status-pending {
background-color: #FFD700;
}
.status-success {
background-color: var(--success-color);
}
.status-error {
background-color: var(--error-color);
}
/* Scrollbar personalizado */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: var(--background-color);
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--primary-color);
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Sistema de descarga automatizado</h1>
</div>
<div class="url-list" id="urlList">
<div class="url-container">
<div class="url-header">
<span class="url-title">Proceso #1</span>
<button class="remove-url" onclick="removeUrl(this)">×</button>
</div>
<div class="url-inputs">
<input type="text" class="downloadUrl" placeholder="URL de Descarga" required>
<input type="text" class="ftpUrl" placeholder="Ruta FTP" required>
</div>
<div class="log-container"></div>
</div>
</div>
<div class="actions">
<button class="add-url" onclick="addNewUrl()">Nueva URL</button>
<button id="url_send">Procesar URLs</button>
</div>
</div>
<script>
const { ipcRenderer } = require('electron');
let processCount = 1;
function addNewUrl() {
processCount++;
const urlList = document.getElementById('urlList');
const newUrl = document.createElement('div');
newUrl.className = 'url-container';
newUrl.innerHTML = `
<div class="url-header">
<span class="url-title">Proceso #${processCount}</span>
<button class="remove-url" onclick="removeUrl(this)">×</button>
</div>
<div class="url-inputs">
<input type="text" class="downloadUrl" placeholder="URL de Descarga" required>
<input type="text" class="ftpUrl" placeholder="Ruta FTP" required>
</div>
<div class="log-container"></div>
`;
urlList.appendChild(newUrl);
}
function removeUrl(button) {
const container = button.closest('.url-container');
if (document.getElementsByClassName('url-container').length > 1) {
container.remove();
}
}
document.getElementById('url_send').addEventListener('click', () => {
const urls = [];
const containers = document.getElementsByClassName('url-container');
Array.from(containers).forEach((container, index) => {
const downloadUrl = container.querySelector('.downloadUrl').value;
const ftpUrl = container.querySelector('.ftpUrl').value;
if (downloadUrl && ftpUrl) {
urls.push({
downloadUrl,
ftpUrl,
containerId: index
});
// Limpiar logs anteriores
container.querySelector('.log-container').innerHTML = '';
}
});
if (urls.length > 0) {
ipcRenderer.send('url_process', urls);
}
});
ipcRenderer.on('log_message', (event, message) => {
const containers = document.getElementsByClassName('url-container');
const urlPattern = /URL: (.*?)(?=\s|$)/;
const match = message.match(urlPattern);
if (match) {
const url = match[1];
// Encontrar el contenedor correspondiente
Array.from(containers).forEach(container => {
if (container.querySelector('.downloadUrl').value === url) {
const logContainer = container.querySelector('.log-container');
const logElement = document.createElement('div');
logElement.className = 'log-message';
// Eliminar la URL del mensaje para los logs
const cleanMessage = message.replace(urlPattern, '').trim();
logElement.textContent = cleanMessage;
logContainer.appendChild(logElement);
logContainer.scrollTop = logContainer.scrollHeight;
}
});
}
});
</script>
</body>
</html>