Proje mimarisini, API uç noktalarını, teknoloji yığınını ve veri yapılarını içeren kapsamlı dokümantasyon eklendi.
291 lines
7.8 KiB
Markdown
291 lines
7.8 KiB
Markdown
# du.pe Proje Analiz Raporu
|
||
|
||
## 📋 Proje Özeti
|
||
|
||
**du.pe**, Put.io benzeri bir **self-hosted torrent tabanlı dosya yöneticisi ve medya oynatıcısıdır**. Kullanıcıların torrent dosyalarını eklemesine, indirmeleri yönetmesine ve videoları doğrudan tarayıcı üzerinden akışla (stream) izlemesine olanak tanır.
|
||
|
||
---
|
||
|
||
## 🏗️ Mimari Yapı
|
||
|
||
```
|
||
dupe/
|
||
├── client/ # Svelte + Vite Frontend
|
||
│ ├── src/
|
||
│ │ ├── components/ # Sidebar, Topbar, TorrentItem
|
||
│ │ ├── routes/ # Files, Movies, TV Shows, Music, Transfers, Trash, Profile, Settings
|
||
│ │ ├── stores/ # Svelte stores (movieStore, tvStore, musicStore, trashStore, avatarStore)
|
||
│ │ ├── styles/ # Ana CSS dosyası
|
||
│ │ └── utils/ # API yardımcı fonksiyonları
|
||
│ └── package.json
|
||
├── server/ # Node.js + Express Backend
|
||
│ ├── modules/ # auth.js, health.js, state.js, websocket.js
|
||
│ ├── utils/ # diskSpace.js
|
||
│ ├── data/ # users.json
|
||
│ └── server.js # Ana sunucu dosyası (~7100 satır)
|
||
├── docs/ # Dokümantasyon
|
||
└── docker-compose.yml
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Teknoloji Yığını
|
||
|
||
### Backend (Node.js)
|
||
- **Express** - REST API sunucusu
|
||
- **WebTorrent** - Torrent indirme yönetimi
|
||
- **WebSocket (ws)** - Gerçek zamanlı ilerleme güncellemeleri
|
||
- **Multer** - Dosya upload işlemleri
|
||
- **JWT (jsonwebtoken)** - Kimlik doğrulama
|
||
- **ffmpeg/ffprobe** - Video thumbnail oluşturma ve medya bilgisi çıkarma
|
||
- **TMDB API** - Film metadatası (poster, backdrop, özet)
|
||
- **TVDB API** - Dizi metadatası
|
||
- **Fanart.tv API** - Dizi backdrop görselleri
|
||
- **yt-dlp** - YouTube video indirme
|
||
|
||
### Frontend (Svelte)
|
||
- **Svelte 4** - UI framework
|
||
- **svelte-routing** - İstemci tarafı yönlendirme
|
||
- **Vite** - Build aracı
|
||
- **FontAwesome** - İkonlar
|
||
- **WebSocket** - Gerçek zamanlı güncellemeler
|
||
|
||
---
|
||
|
||
## 📡 API Endpoint'leri
|
||
|
||
| Method | Endpoint | Açıklama |
|
||
|--------|----------|-----------|
|
||
| `GET` | `/api/health` | Sağlık kontrolü |
|
||
| `GET` | `/api/profile` | Profil bilgileri |
|
||
| `POST` | `/api/profile/avatar` | Avatar yükleme |
|
||
| `GET` | `/api/torrents` | Aktif torrent listesi |
|
||
| `POST` | `/api/transfer` | Torrent/magnet ekleme |
|
||
| `POST` | `/api/youtube/download` | YouTube indirme |
|
||
| `POST` | `/api/torrents/:hash/select/:index` | Dosya seçimi |
|
||
| `DELETE` | `/api/torrents/:hash` | Torrent silme |
|
||
| `POST` | `/api/torrents/:hash/toggle` | Tek torrent durdur/devam |
|
||
| `POST` | `/api/torrents/toggle-all` | Tüm torrentleri durdur/devam |
|
||
| `GET` | `/api/files` | Dosya gezgini |
|
||
| `GET` | `/api/movies` | Film listesi |
|
||
| `GET` | `/api/tvshows` | Dizi listesi |
|
||
| `GET` | `/api/music` | Müzik listesi |
|
||
| `GET` | `/api/trash` | Çöp kutusu |
|
||
| `POST` | `/api/trash/restore` | Çöpten geri yükle |
|
||
| `DELETE` | `/api/trash` | Çöpten kalıcı sil |
|
||
| `POST` | `/api/file/move` | Dosya taşıma |
|
||
| `GET` | `/api/disk-space` | Disk alanı bilgisi |
|
||
| `GET` | `/api/search/metadata` | TMDB/TVDB arama |
|
||
| `GET` | `/stream/:hash` | Video akışı |
|
||
| `GET` | `/media/:path(*)` | Genel medya sunumu |
|
||
| `GET` | `/thumbnails/:path(*)` | Thumbnail sunumu |
|
||
| `WS` | `ws://host/?token=...` | WebSocket bağlantısı |
|
||
|
||
---
|
||
|
||
## 🔄 WebSocket Mesajları
|
||
|
||
```javascript
|
||
// İlerleme güncellemesi
|
||
{ type: "progress", torrents: [...] }
|
||
|
||
// Dosya güncellemesi
|
||
{ type: "fileUpdate", path: "rootFolder" }
|
||
|
||
// Disk alanı güncellemesi
|
||
{ type: "diskSpace", data: {...} }
|
||
|
||
// Medya tespiti
|
||
{ type: "mediaDetected", rootFolder, hasSeriesEpisodes, hasMovieMatch }
|
||
```
|
||
|
||
---
|
||
|
||
## 🎬 Temel Özellikler
|
||
|
||
### 1. Torrent Yönetimi
|
||
- `.torrent` dosyası veya magnet link ile ekleme
|
||
- Gerçek zamanlı indirme ilerleme takibi
|
||
- Tekil veya toplu durdurma/devam ettirme
|
||
- Dosya seçimi (birden fazla dosya içeren torrentler için)
|
||
|
||
### 2. YouTube İndirme
|
||
- YouTube URL'sinden video/ses indirme
|
||
- Çözünürlük seçimi (1080p, 720p, 480p, vb.)
|
||
- Sadece ses indirme seçeneği
|
||
- Cookie desteği
|
||
|
||
### 3. Medya Yönetimi
|
||
- **Filmler**: TMDB'den otomatik metadata çekme (poster, backdrop, özet)
|
||
- **Diziler**: TVDB'den sezon/bölüm bilgileri
|
||
- **Müzik**: YouTube indirmeleri için müzik kütüphanesi
|
||
- **Thumbnail**: Otomatik video/resim küçük resim oluşturma
|
||
|
||
### 4. Dosya Yönetimi
|
||
- Dosya gezgini
|
||
- Dosya taşıma
|
||
- Çöp kutusu (geri yükleme ve kalıcı silme)
|
||
- `.ignoreFiles` ile dosya filtreleme
|
||
|
||
### 5. Video Oynatıcı
|
||
- Özel modal video oynatıcı
|
||
- Altyazı desteği (.srt, .vtt)
|
||
- Ses kontrolü
|
||
- Tam ekran desteği
|
||
- İndirme butonu
|
||
|
||
### 6. Kimlik Doğrulama
|
||
- JWT tabanlı auth
|
||
- Token refresh mekanizması
|
||
- Profil yönetimi (avatar yükleme)
|
||
|
||
---
|
||
|
||
## 🗂️ Veri Yapısı
|
||
|
||
### info.json (Her torrent klasöründe)
|
||
```json
|
||
{
|
||
"infoHash": "...",
|
||
"name": "Torrent Adı",
|
||
"tracker": "...",
|
||
"added": 1234567890,
|
||
"folder": "klasor_adi",
|
||
"completedAt": 1234567890,
|
||
"type": "movie|tv|music|video",
|
||
"files": {
|
||
"dosya.mp4": {
|
||
"size": 123456789,
|
||
"extension": "mp4",
|
||
"mediaInfo": {...},
|
||
"type": "movie"
|
||
}
|
||
},
|
||
"primaryVideoPath": "dosya.mp4",
|
||
"primaryMediaInfo": {...},
|
||
"seriesEpisodes": {...}
|
||
}
|
||
```
|
||
|
||
### .trash (Çöp yönetimi)
|
||
```json
|
||
{
|
||
"updatedAt": 1234567890,
|
||
"items": [
|
||
{
|
||
"path": "dosya.mp4",
|
||
"originalPath": "klasor/dosya.mp4",
|
||
"deletedAt": 1234567890,
|
||
"isDirectory": false,
|
||
"type": "video/mp4"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Frontend Store Yapısı
|
||
|
||
### Svelte Stores
|
||
- `movieStore` - Film sayacı
|
||
- `tvStore` - Dizi sayacı
|
||
- `musicStore` - Müzik sayacı
|
||
- `trashStore` - Çöp öğeleri
|
||
- `avatarStore` - Avatar URL
|
||
- `searchStore` - Arama sorgusu
|
||
|
||
---
|
||
|
||
## 🚀 Çalışma Mantığı
|
||
|
||
1. **Başlangıç**: Sunucu başladığında mevcut torrentler diskten yüklenir
|
||
2. **Torrent Ekleme**: `.torrent` veya magnet → WebTorrent client'e ekle → WebSocket ile ilerleme bildirimi
|
||
3. **İndirme Tamamlandı**:
|
||
- Video thumbnail'ları oluşturulur
|
||
- Medya bilgisi (ffprobe) çıkarılır
|
||
- TMDB/TVDB'den metadata çekilir
|
||
- info.json güncellenir
|
||
4. **Frontend**: WebSocket üzerinden gerçek zamanlı güncellemeler alır, UI'yi günceller
|
||
5. **Video Oynatma**: `/stream/:hash` endpoint'i üzerinden video akışı sağlanır
|
||
|
||
---
|
||
|
||
## 🔐 Güvenlik
|
||
|
||
- JWT tabanlı kimlik doğrulama
|
||
- Token refresh mekanizması
|
||
- Path sanitization (traversal koruması)
|
||
- Dosya tipi ve boyut kısıtlamaları
|
||
- CORS yapılandırması
|
||
|
||
---
|
||
|
||
## 📦 Docker Entegrasyonu
|
||
|
||
```yaml
|
||
# docker-compose.yml
|
||
services:
|
||
dupe:
|
||
build: .
|
||
ports:
|
||
- "3001:3001"
|
||
volumes:
|
||
- ./server/downloads:/app/server/downloads
|
||
- ./server/cache:/app/server/cache
|
||
environment:
|
||
- TMDB_API_KEY
|
||
- TVDB_API_KEY
|
||
- YT_DLP_BIN
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 UI/UX Özellikleri
|
||
|
||
- Responsive tasarım (mobil uyumlu)
|
||
- Hamburger menü (mobile)
|
||
- Drag & drop torrent yükleme
|
||
- Modal video oynatıcı
|
||
- İlerleme çubukları
|
||
- Thumbnail önizlemeler
|
||
- Gerçek zamanlı hız göstergeleri
|
||
|
||
---
|
||
|
||
## 📂 Önemli Dosyalar
|
||
|
||
| Dosya | Açıklama |
|
||
|-------|----------|
|
||
| `server/server.js` | Ana backend sunucusu (~7100 satır) |
|
||
| `client/src/App.svelte` | Ana uygulama bileşeni |
|
||
| `client/src/routes/Transfers.svelte` | Torrent yönetim arayüzü |
|
||
| `client/src/utils/api.js` | API yardımcı fonksiyonları |
|
||
| `client/src/stores/*.js` | Svelte state yönetimi |
|
||
| `server/modules/auth.js` | Kimlik doğrulama modülü |
|
||
| `server/modules/websocket.js` | WebSocket sunucusu |
|
||
|
||
---
|
||
|
||
## 🔍 Geliştirme Notları
|
||
|
||
### Ortam Değişkenleri
|
||
```bash
|
||
PORT=3001
|
||
TMDB_API_KEY=...
|
||
TVDB_API_KEY=...
|
||
FANART_TV_API_KEY=...
|
||
YT_DLP_BIN=/usr/local/bin/yt-dlp
|
||
YT_DLP_COOKIES=/path/to/cookies.txt
|
||
VITE_API=http://localhost:3001
|
||
```
|
||
|
||
### Bağımlılıklar
|
||
- **ffmpeg** ve **ffprobe** kurulu olmalıdır
|
||
- **yt-dlp** (YouTube indirmeleri için)
|
||
- **Node.js** v18+
|
||
|
||
---
|
||
|
||
*Rapor oluşturma tarihi: 24 Aralık 2024*
|