# Open Directory Downloader Desktop GUI for browsing and downloading from open directory listings (Apache/Nginx autoindex). It works out of the box with built-in HTTP/HTTPS and can optionally use `wget` for faster folder pulls when available. ## Features - Remote directory browser with tree view and list view - Local folder browser with drag-and-drop targets - Download single files or entire folders - Optional `wget` mode for recursive folder downloads - Progress display for individual files and aggregate folder downloads - Light/dark themes with persistence ## Requirements - Node.js (LTS recommended) - npm (bundled with Node.js) - Optional: `wget` on your PATH to enable recursive folder downloads via `wget` ## Install ```bash npm install ``` ## Run ```bash npm start ``` ## Usage 1. Enter a remote URL that points to an autoindex listing (for example an "Index of" page). 2. Choose a local destination folder (prompted on first launch or via the Browse button). 3. Select a file or folder from the remote list: - Double-click a folder to enter it. - Drag a remote item onto a local folder to download there. - Or select an item and use "Download Selected". 4. Watch progress in the toolbar and logs in the Session Log panel. ## Screenshot Add a screenshot to show the UI. Suggested filename: `docs/screenshot.png`. ```text docs/screenshot.png ``` If you want to embed it: ```markdown  ``` ## How it works Open Directory Downloader is an Electron app with three layers: - Main process (`src/main.js`) handles HTTP/HTTPS, parsing directory listings, and performing downloads. - Preload (`src/preload.js`) exposes safe IPC APIs to the renderer. - Renderer (`src/renderer.js`) drives the UI, local/remote navigation, and progress display. Remote parsing supports common Apache autoindex layouts (table and `
` formats). Folder downloads are performed by recursively crawling the listing and downloading files, unless `wget` mode is enabled. ## Development - Main process: `src/main.js` - Renderer: `src/renderer.js` - Preload: `src/preload.js` - UI markup: `src/index.html` - Styling: `src/styles.css` Recommended workflow: 1. Run `npm start` to launch the Electron app. 2. Make changes to renderer assets (`src/index.html`, `src/renderer.js`, `src/styles.css`). 3. Restart the app to pick up main/preload changes; renderer changes may require a manual refresh or restart depending on Electron caching. ## Optional `wget` mode If `wget` is detected on the system, the "Use wget if available" toggle is enabled. - Folder downloads will use `wget -r -np -nH -P` - File downloads still use the built-in HTTP/HTTPS client ## Project scripts ```bash npm start # Launch the Electron app npm run pack npm run dist ``` ## Packaging This project uses `electron-builder` for packaging. - `npm run pack` builds unpacked artifacts - `npm run dist` builds platform installers See `package.json` for configuration defaults. You may need to add an `electron-builder` config if you want icons, signing, or platform-specific settings. ## Limitations and notes - The remote listing parser expects a standard autoindex HTML page. - If a server customizes its directory listing heavily, parsing may fail. - Aggregate progress for folder downloads requires size metadata from the listing; otherwise progress is indeterminate. - Some servers may block recursive downloading or throttle requests. ## Troubleshooting - "HTTP 403/404": The server may block listing or direct file access. - Empty list: Verify the URL ends with a trailing `/` and is an autoindex page. - `wget` toggle disabled: Install `wget` and ensure it is on your PATH, then restart the app. ## License MIT