Files
dupe/ANALYSIS.md
wisecolt 94e67c8ccf docs: proje analizi raporunu ekle
Proje mimarisini, API uç noktalarını, teknoloji yığınını ve
veri yapılarını içeren kapsamlı dokümantasyon eklendi.
2025-12-24 19:23:14 +03:00

291 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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*