✨feature: Release first public version #release
Some checks failed
Build and Release / build-release (push) Failing after 6m35s
Some checks failed
Build and Release / build-release (push) Failing after 6m35s
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
node_modules/
|
||||
.vscode/
|
||||
notes/
|
||||
build/
|
||||
dist/
|
||||
|
||||
121
README.md
121
README.md
@@ -1,14 +1,119 @@
|
||||
# Open Directory Downloader
|
||||
|
||||
GUI downloader for open directory listings (Apache/Nginx autoindex). No extra software required; uses built-in HTTP and optionally `wget` if available.
|
||||
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.
|
||||
|
||||
## Getting started
|
||||
## Features
|
||||
|
||||
1. Install Node.js (LTS recommended).
|
||||
2. Run `npm install`.
|
||||
3. Run `npm start`.
|
||||
- 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
|
||||
|
||||
## Notes
|
||||
## Requirements
|
||||
|
||||
- The remote listing parser expects an autoindex HTML page (like Apache "Index of").
|
||||
- Folder downloads can use `wget` automatically if detected and the checkbox is enabled.
|
||||
- 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 `<pre>` 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 <destDir> <url>`
|
||||
- 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
|
||||
|
||||
15
assets/icon.svg
Normal file
15
assets/icon.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#3b5cff"/>
|
||||
<stop offset="100%" stop-color="#7ab8ff"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="folder" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#f7c25a"/>
|
||||
<stop offset="100%" stop-color="#e7a93e"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="64" y="64" width="896" height="896" rx="180" fill="url(#bg)"/>
|
||||
<path d="M252 346h200l40 54h280c44 0 80 36 80 80v220c0 44-36 80-80 80H252c-44 0-80-36-80-80V426c0-44 36-80 80-80z" fill="url(#folder)"/>
|
||||
<path d="M512 470c18 0 32 14 32 32v126l36-36c12-12 32-12 45 0s12 32 0 45l-92 92c-12 12-32 12-45 0l-92-92c-12-12-12-32 0-45s32-12 45 0l36 36V502c0-18 14-32 32-32z" fill="#1c2b4a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 866 B |
795
package-lock.json
generated
795
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
21
package.json
21
package.json
@@ -12,6 +12,25 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^30.0.0",
|
||||
"electron-builder": "^24.13.3"
|
||||
"electron-builder": "^24.13.3",
|
||||
"icon-gen": "^3.0.1"
|
||||
},
|
||||
"build": {
|
||||
"appId": "com.oddl.app",
|
||||
"productName": "OD-DL",
|
||||
"directories": {
|
||||
"output": "dist"
|
||||
},
|
||||
"files": [
|
||||
"src/**/*",
|
||||
"package.json"
|
||||
],
|
||||
"mac": {
|
||||
"icon": "build/icon.icns"
|
||||
},
|
||||
"win": {
|
||||
"icon": "build/icon.ico",
|
||||
"signAndEditExecutable": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>OD-DL</title>
|
||||
<title>Open Directory Downloader</title>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
Reference in New Issue
Block a user