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

7.8 KiB
Raw Blame History

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 ı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

  • .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)

{
  "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 öğ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

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