Spaces:
Sleeping
Sleeping
| /** | |
| * Dropbox API utilities for file access | |
| * Privacy: Files are fetched via backend proxy, processed client-side | |
| */ | |
| import { getDropboxFile } from './client'; | |
| /** | |
| * Fetch file content from Dropbox via backend proxy | |
| */ | |
| export async function fetchFileContent(filePath, accessToken) { | |
| const result = await getDropboxFile(filePath, accessToken); | |
| if (result.error) { | |
| throw new Error(result.error); | |
| } | |
| return result.content; | |
| } | |
| /** | |
| * Process selected files from Dropbox picker | |
| * Fetches content for each file and returns array of {name, content} | |
| */ | |
| export async function processSelectedFiles(files, accessToken, onProgress) { | |
| const results = []; | |
| for (let i = 0; i < files.length; i++) { | |
| const file = files[i]; | |
| onProgress?.({ fileName: file.name, current: i + 1, total: files.length }); | |
| try { | |
| const content = await fetchFileContent(file.path_lower, accessToken); | |
| if (content) { | |
| results.push({ | |
| id: file.id, | |
| name: file.name, | |
| path: file.path_lower, // Store path for re-fetching at query time | |
| content: content | |
| }); | |
| } | |
| } catch (error) { | |
| console.error(`Failed to read ${file.name}:`, error); | |
| } | |
| } | |
| return results; | |
| } | |