fix uploding bugs
This commit is contained in:
+42
-8
@@ -383,8 +383,21 @@ function setupEventListeners() {
|
||||
/**
|
||||
* Load files and folders for the current path
|
||||
*/
|
||||
async function loadFiles() {
|
||||
async function loadFiles(options = {}) {
|
||||
try {
|
||||
console.log("Iniciando loadFiles() - cargando archivos...", options);
|
||||
|
||||
// Flag para forzar el refresco completo ignorando caché
|
||||
const forceRefresh = options.forceRefresh || false;
|
||||
|
||||
// Prevenir múltiples solicitudes de carga simultáneas
|
||||
if (window.isLoadingFiles) {
|
||||
console.log("Ya hay una carga de archivos en progreso, ignorando solicitud");
|
||||
return;
|
||||
}
|
||||
|
||||
window.isLoadingFiles = true;
|
||||
|
||||
// Always ensure a userHomeFolderId is set
|
||||
if (!app.userHomeFolderId) {
|
||||
// If we don't have a home folder ID yet, try to get the user's username
|
||||
@@ -392,35 +405,51 @@ async function loadFiles() {
|
||||
const userData = JSON.parse(localStorage.getItem(USER_DATA_KEY) || '{}');
|
||||
if (userData.username) {
|
||||
// Find user's home folder
|
||||
console.log("Buscando carpeta de usuario para", userData.username);
|
||||
await findUserHomeFolder(userData.username);
|
||||
}
|
||||
}
|
||||
|
||||
// Agregar timestamp para evitar caché
|
||||
const timestamp = new Date().getTime();
|
||||
let url;
|
||||
|
||||
// ALWAYS use the userHomeFolderId (current folder or home folder) to avoid showing root
|
||||
if (!app.currentPath || app.currentPath === '') {
|
||||
// If at root, force user to their home folder
|
||||
if (app.userHomeFolderId) {
|
||||
url = `/api/folders/${app.userHomeFolderId}/contents`;
|
||||
url = `/api/folders/${app.userHomeFolderId}/contents?t=${timestamp}`;
|
||||
app.currentPath = app.userHomeFolderId;
|
||||
ui.updateBreadcrumb(app.userHomeFolderName || 'Home');
|
||||
console.log(`Cargando carpeta del usuario: ${app.userHomeFolderName} (${app.userHomeFolderId})`);
|
||||
} else {
|
||||
// Emergency fallback - this should rarely happen but prevents errors
|
||||
url = '/api/folders';
|
||||
url = `/api/folders?t=${timestamp}`;
|
||||
console.warn("Emergency fallback to root folder - this should not normally happen");
|
||||
}
|
||||
} else {
|
||||
// Normal case - viewing subfolder contents
|
||||
url = `/api/folders/${app.currentPath}/contents`;
|
||||
url = `/api/folders/${app.currentPath}/contents?t=${timestamp}`;
|
||||
console.log(`Cargando contenido de subcarpeta: ${app.currentPath}`);
|
||||
}
|
||||
|
||||
const token = localStorage.getItem('oxicloud_token');
|
||||
const requestOptions = {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${token}`
|
||||
}
|
||||
'Authorization': `Bearer ${token}`,
|
||||
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
||||
'Pragma': 'no-cache'
|
||||
},
|
||||
cache: 'no-store' // Instruir al navegador a no usar caché
|
||||
};
|
||||
|
||||
// Si se especifica forceRefresh, agregar un parámetro adicional para evitar caché
|
||||
if (forceRefresh) {
|
||||
url += `&force_refresh=true`;
|
||||
requestOptions.headers['X-Force-Refresh'] = 'true';
|
||||
console.log('Forzando refresco completo ignorando caché');
|
||||
}
|
||||
|
||||
console.log(`Loading files from ${url}`);
|
||||
const response = await fetch(url, requestOptions);
|
||||
|
||||
@@ -490,10 +519,12 @@ async function loadFiles() {
|
||||
});
|
||||
|
||||
// Also load files in this folder
|
||||
let filesUrl = '/api/files';
|
||||
const cacheTimestamp = new Date().getTime();
|
||||
let filesUrl = `/api/files?t=${cacheTimestamp}`; // Agregar timestamp para evitar problemas de caché
|
||||
if (app.currentPath) {
|
||||
filesUrl += `?folder_id=${app.currentPath}`;
|
||||
filesUrl += `&folder_id=${app.currentPath}`;
|
||||
}
|
||||
console.log(`Cargando archivos desde: ${filesUrl}`);
|
||||
|
||||
try {
|
||||
console.log(`Fetching files from: ${filesUrl}`);
|
||||
@@ -532,6 +563,9 @@ async function loadFiles() {
|
||||
} catch (error) {
|
||||
console.error('Error loading folders:', error);
|
||||
ui.showNotification('Error', 'Could not load files and folders');
|
||||
} finally {
|
||||
// Marcar que ya no estamos cargando archivos para permitir solicitudes futuras
|
||||
window.isLoadingFiles = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,13 @@ const fileOps = {
|
||||
|
||||
const response = await fetch('/api/files/upload', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
body: formData,
|
||||
// Añadir cache: 'no-store' para evitar problemas de caché durante la subida
|
||||
cache: 'no-store',
|
||||
headers: {
|
||||
// Agregar este encabezado para forzar recargas frescas
|
||||
'Cache-Control': 'no-cache, no-store, must-revalidate'
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Respuesta del servidor:', {
|
||||
@@ -55,11 +61,57 @@ const fileOps = {
|
||||
if (response.ok) {
|
||||
const responseData = await response.json();
|
||||
console.log(`Successfully uploaded ${file.name}`, responseData);
|
||||
|
||||
// Agregar el archivo a la vista inmediatamente para mostrar retroalimentación instantánea
|
||||
// Esto permite que el usuario vea el archivo aunque el refresco posterior falle
|
||||
if (window.ui && window.ui.addFileToView) {
|
||||
console.log('Añadiendo archivo subido directamente a la vista:', responseData);
|
||||
window.ui.addFileToView(responseData);
|
||||
window.ui.updateFileIcons();
|
||||
}
|
||||
|
||||
if (i === totalFiles - 1) {
|
||||
// Last file uploaded
|
||||
console.log('Recargando lista de archivos después de subida');
|
||||
window.loadFiles();
|
||||
|
||||
try {
|
||||
// Esperar 1500ms para asegurar que los mapeos de ID se guarden
|
||||
// Tiempo aumentado significativamente para permitir al backend completar persistencia
|
||||
await new Promise(resolve => setTimeout(resolve, 1500));
|
||||
|
||||
// Forzar recarga de archivos con parámetro de bypass de caché
|
||||
const timestamp = new Date().getTime();
|
||||
const filesUrl = `/api/files?t=${timestamp}&folder_id=${window.app.currentPath || ''}`;
|
||||
|
||||
console.log(`Recargando lista de archivos desde: ${filesUrl}`);
|
||||
const filesResponse = await fetch(filesUrl, {
|
||||
cache: 'no-store',
|
||||
headers: {
|
||||
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
||||
'Pragma': 'no-cache'
|
||||
}
|
||||
});
|
||||
|
||||
if (filesResponse.ok) {
|
||||
const files = await filesResponse.json();
|
||||
console.log(`Recarga de archivos completada, obtenidos ${files.length} archivos`);
|
||||
}
|
||||
|
||||
// Esperar un momento más antes de la recarga final
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
|
||||
// Hacer una única recarga final forzando refresco completo
|
||||
await window.loadFiles({forceRefresh: true});
|
||||
|
||||
// Asegurarse de que no haya recargas adicionales o duplicados
|
||||
} catch (reloadError) {
|
||||
console.error("Error durante recarga de archivos:", reloadError);
|
||||
// Intentar recargar lista de nuevo en caso de error
|
||||
await window.loadFiles({forceRefresh: true});
|
||||
// Segundo intento con retraso y forzando refresco
|
||||
setTimeout(() => window.loadFiles({forceRefresh: true}), 500);
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
document.getElementById('dropzone').style.display = 'none';
|
||||
uploadProgressDiv.style.display = 'none';
|
||||
|
||||
@@ -15,6 +15,13 @@ class InlineViewer {
|
||||
return;
|
||||
}
|
||||
|
||||
// Verify document.body exists
|
||||
if (!document.body) {
|
||||
console.warn('Document body not available yet for inline viewer, will retry later');
|
||||
setTimeout(() => this.setupViewer(), 200);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create modal container
|
||||
const modal = document.createElement('div');
|
||||
modal.id = 'inline-viewer-modal';
|
||||
@@ -325,5 +332,21 @@ class InlineViewer {
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize viewer
|
||||
window.inlineViewer = new InlineViewer();
|
||||
// Initialize viewer when document is ready
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Check if it's already initialized
|
||||
if (!window.inlineViewer) {
|
||||
console.log('Initializing inline viewer on DOMContentLoaded');
|
||||
window.inlineViewer = new InlineViewer();
|
||||
}
|
||||
});
|
||||
|
||||
// Fallback initialization for cases where DOMContentLoaded already fired
|
||||
if (document.readyState === 'complete' || document.readyState === 'interactive') {
|
||||
if (!window.inlineViewer) {
|
||||
console.log('Fallback initialization for inline viewer');
|
||||
setTimeout(() => {
|
||||
window.inlineViewer = new InlineViewer();
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
@@ -518,6 +518,15 @@ const ui = {
|
||||
* @param {Object} folder - Folder object
|
||||
*/
|
||||
addFolderToView(folder) {
|
||||
// Verificar si la carpeta ya existe en la vista para evitar duplicados
|
||||
if (document.querySelector(`.file-card[data-folder-id="${folder.id}"]`) ||
|
||||
document.querySelector(`.file-item[data-folder-id="${folder.id}"]`)) {
|
||||
console.log(`Carpeta ${folder.name} (${folder.id}) ya existe en la vista, no duplicando`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Añadiendo carpeta a la vista: ${folder.name} (${folder.id})`);
|
||||
|
||||
// Grid view element
|
||||
const folderGridElement = document.createElement('div');
|
||||
folderGridElement.className = 'file-card';
|
||||
@@ -709,6 +718,15 @@ const ui = {
|
||||
* @param {Object} file - File object
|
||||
*/
|
||||
addFileToView(file) {
|
||||
// Verificar si el archivo ya existe en la vista para evitar duplicados
|
||||
if (document.querySelector(`.file-card[data-file-id="${file.id}"]`) ||
|
||||
document.querySelector(`.file-item[data-file-id="${file.id}"]`)) {
|
||||
console.log(`Archivo ${file.name} (${file.id}) ya existe en la vista, no duplicando`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Añadiendo archivo a la vista: ${file.name} (${file.id})`);
|
||||
|
||||
// Determine icon and type
|
||||
let iconClass = 'fas fa-file';
|
||||
let iconSpecialClass = '';
|
||||
|
||||
Reference in New Issue
Block a user