# 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*