documentation for all JS files
This commit is contained in:
@@ -1,4 +1,23 @@
|
||||
/**
|
||||
* @fileoverview Manages file operations and state for the room interface.
|
||||
* This file handles:
|
||||
* - File fetching and state management
|
||||
* - File operations (delete, rename, move, download)
|
||||
* - File selection and batch operations
|
||||
* - Star/unstar functionality
|
||||
* - Navigation and path management
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class FileManager
|
||||
* @classdesc Manages all file-related operations and state in the room interface.
|
||||
* Handles file operations, selection, and navigation.
|
||||
*/
|
||||
export class FileManager {
|
||||
/**
|
||||
* Creates a new FileManager instance.
|
||||
* @param {RoomManager} roomManager - The parent RoomManager instance
|
||||
*/
|
||||
constructor(roomManager) {
|
||||
console.log('[FileManager] Initializing...');
|
||||
this.roomManager = roomManager;
|
||||
@@ -13,6 +32,12 @@ export class FileManager {
|
||||
console.log('[FileManager] Initialized with roomManager:', roomManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches files from the server for the current path.
|
||||
* @async
|
||||
* @returns {Promise<Array>} A promise that resolves with the array of files
|
||||
* @throws {Error} If the fetch operation fails
|
||||
*/
|
||||
async fetchFiles() {
|
||||
console.log('[FileManager] Fetching files...');
|
||||
try {
|
||||
@@ -44,6 +69,13 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a file from the server.
|
||||
* @async
|
||||
* @param {string} filename - The name of the file to delete
|
||||
* @param {string} [path=''] - The path of the file to delete
|
||||
* @throws {Error} If the delete operation fails
|
||||
*/
|
||||
async deleteFile(filename, path = '') {
|
||||
console.log('[FileManager] Deleting file:', { filename, path });
|
||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||
@@ -90,6 +122,14 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renames a file on the server.
|
||||
* @async
|
||||
* @param {string} fileId - The ID of the file to rename
|
||||
* @param {string} newName - The new name for the file
|
||||
* @returns {Promise<Object>} A promise that resolves with the result of the rename operation
|
||||
* @throws {Error} If the rename operation fails
|
||||
*/
|
||||
async renameFile(fileId, newName) {
|
||||
console.log('[FileManager] Renaming file:', { fileId, newName });
|
||||
try {
|
||||
@@ -127,6 +167,14 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a file to a new location.
|
||||
* @async
|
||||
* @param {string} fileId - The ID of the file to move
|
||||
* @param {string} targetPath - The target path to move the file to
|
||||
* @returns {Promise<Object>} A promise that resolves with the result of the move operation
|
||||
* @throws {Error} If the move operation fails
|
||||
*/
|
||||
async moveFile(fileId, targetPath) {
|
||||
console.log('[FileManager] Starting moveFile...');
|
||||
console.log('[FileManager] Parameters:', { fileId, targetPath });
|
||||
@@ -178,6 +226,11 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the confirmed move operation after user confirmation.
|
||||
* @async
|
||||
* @throws {Error} If the move operation fails
|
||||
*/
|
||||
async moveFileConfirmed() {
|
||||
console.log('[FileManager] Starting moveFileConfirmed...');
|
||||
console.log('[FileManager] Current state:', {
|
||||
@@ -258,6 +311,13 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggles the star status of a file.
|
||||
* @async
|
||||
* @param {string} filename - The name of the file to toggle star for
|
||||
* @param {string} path - The path of the file
|
||||
* @throws {Error} If the star toggle operation fails
|
||||
*/
|
||||
async toggleStar(filename, path) {
|
||||
console.log('[FileManager] Toggling star for:', filename, 'path:', path);
|
||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||
@@ -323,6 +383,13 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads a single file.
|
||||
* @async
|
||||
* @param {string} filename - The name of the file to download
|
||||
* @param {string} [path=''] - The path of the file
|
||||
* @throws {Error} If the download operation fails
|
||||
*/
|
||||
async downloadFile(filename, path = '') {
|
||||
console.log('[FileManager] Downloading file:', { filename, path });
|
||||
const url = `/api/rooms/${this.roomManager.roomId}/files/${encodeURIComponent(filename)}`;
|
||||
@@ -360,6 +427,11 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads multiple selected files as a zip archive.
|
||||
* @async
|
||||
* @throws {Error} If the download operation fails
|
||||
*/
|
||||
async downloadSelected() {
|
||||
console.log('[FileManager] Downloading selected files...');
|
||||
const selectedItems = this.getSelectedItems();
|
||||
@@ -414,6 +486,12 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the confirmed delete operation after user confirmation.
|
||||
* Supports both single file and batch deletion.
|
||||
* @async
|
||||
* @throws {Error} If the delete operation fails
|
||||
*/
|
||||
async deleteFileConfirmed() {
|
||||
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
|
||||
if (this.batchDeleteItems && this.batchDeleteItems.length) {
|
||||
@@ -476,6 +554,12 @@ export class FileManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the file selection based on user interaction.
|
||||
* Supports single selection, CTRL+click for multiple selection, and SHIFT+click for range selection.
|
||||
* @param {number} index - The index of the file being selected
|
||||
* @param {Event} event - The click event that triggered the selection
|
||||
*/
|
||||
updateSelection(index, event) {
|
||||
console.log('[FileManager] Updating selection:', { index, event });
|
||||
|
||||
@@ -521,11 +605,18 @@ export class FileManager {
|
||||
this.roomManager.viewManager.updateMultiSelectUI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an array of currently selected file objects.
|
||||
* @returns {Array<Object>} Array of selected file objects
|
||||
*/
|
||||
getSelectedItems() {
|
||||
console.log('[FileManager] Getting selected items');
|
||||
return Array.from(this.selectedItems).map(index => this.currentFiles[index]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears all file selections and updates the UI.
|
||||
*/
|
||||
clearSelection() {
|
||||
console.log('[FileManager] Clearing selection');
|
||||
this.selectedItems.clear();
|
||||
@@ -535,6 +626,9 @@ export class FileManager {
|
||||
this.roomManager.viewManager.updateMultiSelectUI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the parent folder of the current path.
|
||||
*/
|
||||
navigateToParent() {
|
||||
if (!this.roomManager.currentPath) return;
|
||||
const parts = this.roomManager.currentPath.split('/');
|
||||
|
||||
Reference in New Issue
Block a user