From 94e67c8ccf40e761c1afdf1bb9bc009011214afd Mon Sep 17 00:00:00 2001 From: wisecolt Date: Wed, 24 Dec 2025 19:23:14 +0300 Subject: [PATCH] docs: proje analizi raporunu ekle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Proje mimarisini, API uç noktalarını, teknoloji yığınını ve veri yapılarını içeren kapsamlı dokümantasyon eklendi. --- ANALYSIS.md | 290 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 ANALYSIS.md diff --git a/ANALYSIS.md b/ANALYSIS.md new file mode 100644 index 0000000..471a694 --- /dev/null +++ b/ANALYSIS.md @@ -0,0 +1,290 @@ +# 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*