141 lines
4.3 KiB
Markdown
141 lines
4.3 KiB
Markdown
# Aniworld Download Manager
|
|
|
|
A web-based anime download manager with REST API, WebSocket real-time updates, and a modern web interface.
|
|
|
|
## Features
|
|
|
|
- Web interface for managing anime library
|
|
- REST API for programmatic access
|
|
- WebSocket real-time progress updates
|
|
- Download queue with priority management
|
|
- Automatic library scanning for missing episodes
|
|
- JWT-based authentication
|
|
- SQLite database for persistence
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.10+
|
|
- Conda (recommended) or virtualenv
|
|
|
|
### Installation
|
|
|
|
1. Clone the repository:
|
|
|
|
```bash
|
|
git clone https://github.com/your-repo/aniworld.git
|
|
cd aniworld
|
|
```
|
|
|
|
2. Create and activate conda environment:
|
|
|
|
```bash
|
|
conda create -n AniWorld python=3.10
|
|
conda activate AniWorld
|
|
```
|
|
|
|
3. Install dependencies:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
4. Start the server:
|
|
|
|
```bash
|
|
python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000
|
|
```
|
|
|
|
5. Open http://127.0.0.1:8000 in your browser
|
|
|
|
### First-Time Setup
|
|
|
|
1. Navigate to http://127.0.0.1:8000/setup
|
|
2. Set a master password (minimum 8 characters, mixed case, number, special character)
|
|
3. Configure your anime directory path
|
|
4. Login with your master password
|
|
|
|
## Documentation
|
|
|
|
| Document | Description |
|
|
| ---------------------------------------------- | -------------------------------- |
|
|
| [docs/API.md](docs/API.md) | REST API and WebSocket reference |
|
|
| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | System architecture and design |
|
|
| [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | Configuration options |
|
|
| [docs/DATABASE.md](docs/DATABASE.md) | Database schema |
|
|
| [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) | Developer setup guide |
|
|
| [docs/TESTING.md](docs/TESTING.md) | Testing guidelines |
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
src/
|
|
+-- cli/ # CLI interface (legacy)
|
|
+-- config/ # Application settings
|
|
+-- core/ # Domain logic
|
|
| +-- SeriesApp.py # Main application facade
|
|
| +-- SerieScanner.py # Directory scanning
|
|
| +-- entities/ # Domain entities
|
|
| +-- providers/ # External provider adapters
|
|
+-- server/ # FastAPI web server
|
|
+-- api/ # REST API endpoints
|
|
+-- services/ # Business logic
|
|
+-- models/ # Pydantic models
|
|
+-- database/ # SQLAlchemy ORM
|
|
+-- middleware/ # Auth, rate limiting
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
| Endpoint | Description |
|
|
| ------------------------------ | -------------------------------- |
|
|
| `POST /api/auth/login` | Authenticate and get JWT token |
|
|
| `GET /api/anime` | List anime with missing episodes |
|
|
| `GET /api/anime/search?query=` | Search for anime |
|
|
| `POST /api/queue/add` | Add episodes to download queue |
|
|
| `POST /api/queue/start` | Start queue processing |
|
|
| `GET /api/queue/status` | Get queue status |
|
|
| `WS /ws/connect` | WebSocket for real-time updates |
|
|
|
|
See [docs/API.md](docs/API.md) for complete API reference.
|
|
|
|
## Configuration
|
|
|
|
Environment variables (via `.env` file):
|
|
|
|
| Variable | Default | Description |
|
|
| ----------------- | ------------------------------ | ---------------------- |
|
|
| `JWT_SECRET_KEY` | (random) | Secret for JWT signing |
|
|
| `DATABASE_URL` | `sqlite:///./data/aniworld.db` | Database connection |
|
|
| `ANIME_DIRECTORY` | (empty) | Path to anime library |
|
|
| `LOG_LEVEL` | `INFO` | Logging level |
|
|
|
|
See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for all options.
|
|
|
|
## Running Tests
|
|
|
|
```bash
|
|
# Run all tests
|
|
conda run -n AniWorld python -m pytest tests/ -v
|
|
|
|
# Run unit tests only
|
|
conda run -n AniWorld python -m pytest tests/unit/ -v
|
|
|
|
# Run integration tests
|
|
conda run -n AniWorld python -m pytest tests/integration/ -v
|
|
```
|
|
|
|
## Technology Stack
|
|
|
|
- **Web Framework**: FastAPI 0.104.1
|
|
- **Database**: SQLite + SQLAlchemy 2.0
|
|
- **Auth**: JWT (python-jose) + passlib
|
|
- **Validation**: Pydantic 2.5
|
|
- **Logging**: structlog
|
|
- **Testing**: pytest + pytest-asyncio
|
|
|
|
## License
|
|
|
|
MIT License
|