Proje mimarisini, API uç noktalarını, teknoloji yığınını ve veri yapılarını içeren kapsamlı dokümantasyon eklendi.
7.8 KiB
7.8 KiB
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ı
// İ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
.torrentdosyası 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)
.ignoreFilesile 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)
{
"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)
{
"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 öğeleriavatarStore- Avatar URLsearchStore- Arama sorgusu
🚀 Çalışma Mantığı
- Başlangıç: Sunucu başladığında mevcut torrentler diskten yüklenir
- Torrent Ekleme:
.torrentveya magnet → WebTorrent client'e ekle → WebSocket ile ilerleme bildirimi - İndirme Tamamlandı:
- Video thumbnail'ları oluşturulur
- Medya bilgisi (ffprobe) çıkarılır
- TMDB/TVDB'den metadata çekilir
- info.json güncellenir
- Frontend: WebSocket üzerinden gerçek zamanlı güncellemeler alır, UI'yi günceller
- Video Oynatma:
/stream/:hashendpoint'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
# 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
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