118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html lang="en">
 | |
| <head>
 | |
|     <meta charset="UTF-8">
 | |
|     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | |
|     <title>FilaMan - Firmware Update</title>
 | |
|     <link rel="stylesheet" href="style.css">
 | |
|     <style>
 | |
|         .debug-log {
 | |
|             background: #f5f5f5;
 | |
|             border: 1px solid #ddd;
 | |
|             padding: 10px;
 | |
|             margin: 10px 0;
 | |
|             font-family: monospace;
 | |
|             max-height: 200px;
 | |
|             overflow-y: auto;
 | |
|             display: none;
 | |
|         }
 | |
|     </style>
 | |
| </head>
 | |
| <body>
 | |
|     <div class="content">
 | |
|         <h1>Firmware Update</h1>
 | |
|         
 | |
|         <div class="warning">
 | |
|             <strong>Warning:</strong> Do not power off the device during update.
 | |
|         </div>
 | |
| 
 | |
|         <form id="updateForm">
 | |
|             <input type="file" name="update" accept=".bin">
 | |
|             <button type="submit">Update Firmware</button>
 | |
|         </form>
 | |
| 
 | |
|         <div class="progress" style="display: none;">
 | |
|             <div class="progress-bar"></div>
 | |
|             <div class="status"></div>
 | |
|         </div>
 | |
| 
 | |
|         <div class="debug-log"></div>
 | |
|     </div>
 | |
| 
 | |
|     <script>
 | |
|         const form = document.getElementById('updateForm');
 | |
|         const progress = document.querySelector('.progress');
 | |
|         const progressBar = document.querySelector('.progress-bar');
 | |
|         const status = document.querySelector('.status');
 | |
|         const debugLog = document.querySelector('.debug-log');
 | |
| 
 | |
|         function log(message) {
 | |
|             debugLog.style.display = 'block';
 | |
|             const time = new Date().toLocaleTimeString();
 | |
|             debugLog.innerHTML += `[${time}] ${message}<br>`;
 | |
|             debugLog.scrollTop = debugLog.scrollHeight;
 | |
|         }
 | |
| 
 | |
|         form.addEventListener('submit', async (e) => {
 | |
|             e.preventDefault();
 | |
|             const file = form.update.files[0];
 | |
|             if (!file) {
 | |
|                 alert('Please select a file');
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             log(`Selected file: ${file.name} (${file.size} bytes)`);
 | |
|             
 | |
|             // Aktiviere Fortschrittsanzeige
 | |
|             progress.style.display = 'block';
 | |
|             form.style.display = 'none';
 | |
| 
 | |
|             // Erstelle FormData für den Upload
 | |
|             const formData = new FormData();
 | |
|             formData.append('update', file);
 | |
| 
 | |
|             try {
 | |
|                 log('Starting upload...');
 | |
|                 const response = await fetch('/update', {
 | |
|                     method: 'POST',
 | |
|                     body: formData
 | |
|                 });
 | |
| 
 | |
|                 log(`Server responded with status: ${response.status}`);
 | |
| 
 | |
|                 let result;
 | |
|                 const contentType = response.headers.get('content-type');
 | |
|                 log(`Response content-type: ${contentType}`);
 | |
| 
 | |
|                 if (contentType && contentType.includes('application/json')) {
 | |
|                     result = await response.json();
 | |
|                     log('Received JSON response');
 | |
|                 } else {
 | |
|                     const text = await response.text();
 | |
|                     log(`Received text response: ${text}`);
 | |
|                     result = { success: response.ok, message: text };
 | |
|                 }
 | |
|                 
 | |
|                 log(`Update result: ${JSON.stringify(result)}`);
 | |
|                 
 | |
|                 if (response.ok && result.success) {
 | |
|                     status.textContent = 'Update successful! Restarting...';
 | |
|                     status.className = 'success';
 | |
|                     setTimeout(() => {
 | |
|                         window.location.href = '/';
 | |
|                     }, 5000);
 | |
|                 } else {
 | |
|                     throw new Error(result.message || 'Update failed');
 | |
|                 }
 | |
|             } catch (error) {
 | |
|                 log(`Error: ${error.message}`);
 | |
|                 console.error('Update error:', error);
 | |
|                 status.textContent = `Error: ${error.message}`;
 | |
|                 status.className = 'error';
 | |
|                 form.style.display = 'block';
 | |
|                 progress.style.display = 'none';
 | |
|             }
 | |
|         });
 | |
|     </script>
 | |
| </body>
 | |
| </html> |