diff --git a/data/log.txt b/data/log.txt index fce08ca..846395e 100644 --- a/data/log.txt +++ b/data/log.txt @@ -32,3 +32,19 @@ [01:54:56] ✅ Proceso completado exitosamente (PID: 44892) [01:54:56] ⏱️ Tiempo de ejecución: 3.87 segundos [01:54:56] ================================================== +[02:43:57] 🚀 Ejecutando: GTPCorrgir +[02:43:57] 📁 Directorio: D:/Proyectos/VisualStudio/GTPCorrgir\bin\Release\net8.0-windows +[02:43:57] ⚡ Comando: D:/Proyectos/VisualStudio/GTPCorrgir\bin\Release\net8.0-windows\GTPCorrgir.exe --Menu +[02:43:57] ================================================== +[02:43:57] ✅ Proceso iniciado con PID: 42668 +[02:43:59] ✅ Proceso completado exitosamente (PID: 42668) +[02:43:59] ⏱️ Tiempo de ejecución: 2.71 segundos +[02:43:59] ================================================== +[02:44:06] 🚀 Ejecutando: GTPCorrgir +[02:44:06] 📁 Directorio: D:/Proyectos/VisualStudio/GTPCorrgir\bin\Release\net8.0-windows +[02:44:06] ⚡ Comando: D:/Proyectos/VisualStudio/GTPCorrgir\bin\Release\net8.0-windows\GTPCorrgir.exe --Menu +[02:44:06] ================================================== +[02:44:06] ✅ Proceso iniciado con PID: 34300 +[02:44:08] ❌ Proceso terminó con código: 1 (PID: 34300) +[02:44:08] ⏱️ Tiempo de ejecución: 2.09 segundos +[02:44:08] ================================================== diff --git a/static/js/csharp_launcher.js b/static/js/csharp_launcher.js index b45e54c..f123834 100644 --- a/static/js/csharp_launcher.js +++ b/static/js/csharp_launcher.js @@ -12,10 +12,16 @@ class CSharpLauncherManager { 'Desarrollo', 'APIs', 'Otros' ]; this.currentCategory = 'all'; + this.initialized = false; + this.processInterval = null; } async init() { console.log('Initializing C# Launcher Manager...'); + + // Limpiar estado previo si existe + this.clearState(); + await this.loadProjects(); await this.loadFavorites(); this.setupEventListeners(); @@ -23,7 +29,35 @@ class CSharpLauncherManager { await this.refreshProcesses(); // Actualizar procesos cada 10 segundos - setInterval(() => this.refreshProcesses(), 10000); + if (!this.processInterval) { + this.processInterval = setInterval(() => this.refreshProcesses(), 10000); + } + + this.initialized = true; + console.log('C# Launcher Manager initialized successfully'); + } + + clearState() { + console.log('Clearing C# launcher state...'); + this.currentProject = null; + this.projects = []; + this.executables = []; + this.favorites = new Set(); + this.runningProcesses = []; + + // Limpiar intervalos previos + if (this.processInterval) { + clearInterval(this.processInterval); + this.processInterval = null; + } + } + + // Método de utilidad para resetear completamente el launcher + async reset() { + console.log('Resetting C# Launcher...'); + localStorage.removeItem('csharp_last_selected_project'); + this.clearState(); + await this.init(); } async loadProjects() { @@ -71,7 +105,10 @@ class CSharpLauncherManager { renderProjectSelector() { const select = document.getElementById('csharp-project-select'); - if (!select) return; + if (!select) { + console.warn('C# project select element not found'); + return; + } select.innerHTML = ''; @@ -83,24 +120,78 @@ class CSharpLauncherManager { option.setAttribute('data-category', project.category || 'Otros'); select.appendChild(option); }); + + // Restaurar última selección con delay para asegurar que el DOM esté listo + setTimeout(() => this.restoreLastSelectedProject(), 100); + } + + restoreLastSelectedProject() { + try { + const lastSelectedProject = localStorage.getItem('csharp_last_selected_project'); + console.log('Restoring last selected project:', lastSelectedProject); + + if (!lastSelectedProject) { + console.log('No last selected project found'); + return; + } + + const project = this.projects.find(p => p.id === lastSelectedProject); + if (!project) { + console.log('Last selected project not found in current projects list, clearing localStorage'); + localStorage.removeItem('csharp_last_selected_project'); + return; + } + + const select = document.getElementById('csharp-project-select'); + if (!select) { + console.warn('Project select element not found during restore'); + return; + } + + console.log('Restoring project:', project.name); + select.value = lastSelectedProject; + + // Disparar evento change para cargar el proyecto + const changeEvent = new Event('change', { bubbles: true }); + select.dispatchEvent(changeEvent); + } catch (error) { + console.error('Error restoring last selected project:', error); + // Limpiar localStorage corrupto + localStorage.removeItem('csharp_last_selected_project'); + } } async onProjectChange(e) { const projectId = e.target.value; + console.log('Project change event:', projectId); if (!projectId) { + console.log('No project selected, clearing state'); this.currentProject = null; this.hideCSharpProjectButtons(); this.clearExecutables(); + // Limpiar persistencia + localStorage.removeItem('csharp_last_selected_project'); return; } try { this.currentProject = this.projects.find(p => p.id === projectId); + if (!this.currentProject) { + console.error('Project not found:', projectId); + return; + } + + console.log('Loading project:', this.currentProject.name); this.showCSharpProjectButtons(); await this.loadProjectExecutables(projectId); + + // Guardar selección para persistencia + localStorage.setItem('csharp_last_selected_project', projectId); + console.log('Project loaded successfully'); } catch (error) { console.error('Error changing project:', error); + this.showNotification('Error cargando el proyecto', 'error'); } } @@ -162,6 +253,11 @@ class CSharpLauncherManager { } grid.innerHTML = filteredExecutables.map(exe => this.createExecutableCard(exe)).join(''); + + // Cargar argumentos para cada ejecutable después de renderizar + filteredExecutables.forEach(exe => { + this.loadExecutableArgumentsForCard(this.currentProject.id, exe.filename); + }); } createExecutableCard(exe) { @@ -171,6 +267,8 @@ class CSharpLauncherManager { 'Release' : 'Debug'; + // Los argumentos se cargan después de renderizar + return `