Files
Barış Keser db1d0e6b5c v1.6.0: paralel indirme (3 escanli) + responsive player bar
- Paralel indirme: tek tek yerine MAX_DL_CONCURRENT=3 escanli indirme havuzu.
  active_downloads {thread: yuzde}, download_done sayaci, _pump_downloads havuzu
  doldurur, _emit_dl_progress toplam ilerleme + "X/Y (N etkin)" pill. THREAD-GUVENLI:
  sinyaller QObject-bagli slotlara gider (self.sender() ile thread bulunur) -> tum
  kuyruk/havuz mutasyonu + QThread olusturma ana thread'de; 0 Qt cross-thread uyarisi.
  Dogrulandi: sahte-thread testi peak=3, dogru sayac + reset.
- Responsive player bar: ikincil kontroller (klip/karaoke/ambiyans/kuyruk/soz) varsayilan
  olarak ⋯ tasma menusune katlanir (>=1500px satir ici acilir). Kontrol GIZLENMEZ.
  Boylece bar her genislikte sigar, tasip sayfayi yatay kaydirip sol kenar cubugunu
  ekrandan itmez ("sapitmaz"). Dogrulandi: 1600/1100/820px'te overflowX=0, sidebarX=8,
  ⋯ toggle, 0 JS hatasi. #pHeroBtn eklenince (v1.5.0) bar tasmisti; bu onu cozer.
2026-09-20 19:55:53 +03:00

118 lines
6.5 KiB
HTML
Raw Permalink 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.
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Just Music</title>
<link rel="stylesheet" href="fontawesome/css/all.min.css">
<link rel="stylesheet" href="app.css">
<script src="qwebchannel.js"></script>
<script src="i18n.js"></script>
</head>
<body>
<div id="ambient" class="ambient"></div>
<div id="app">
<!-- ÜST BAR -->
<header class="topbar">
<div class="topbar-left">
<button id="sidebarToggle" class="round-btn" title="Kenar çubuğunu daralt/genişlet"><i class="fa-solid fa-bars"></i></button>
<button id="navBack" class="round-btn" title="Geri"><i class="fa-solid fa-chevron-left"></i></button>
<button id="navFwd" class="round-btn" title="İleri"><i class="fa-solid fa-chevron-right"></i></button>
</div>
<div class="search-wrap">
<button id="homeBtn" class="home-btn" title="Ana Sayfa"><i class="fa-solid fa-house"></i></button>
<div class="search-box">
<span class="search-ic"><i class="fa-solid fa-magnifying-glass"></i></span>
<input id="topSearch" type="text" placeholder="Ne çalmak istiyorsun?" autocomplete="off">
</div>
</div>
<div class="topbar-right">
<select id="langSel" class="mini-sel" title="Dil / Language"></select>
<select id="themeSel" class="mini-sel" title="Tema"></select>
<label class="accent-wrap" title="Özel vurgu rengi"><input type="color" id="accentPick" value="#1db954"></label>
<button id="scanBtn" class="chip-btn" title="Müzik klasörünü tara"><i class="fa-solid fa-rotate"></i> <span data-i18n="Tara">Tara</span></button>
<button id="statsBtn" class="chip-btn" title="İstatistikler"><i class="fa-solid fa-chart-simple"></i></button>
<button id="compactBtn" class="chip-btn" title="Kompakt mod (panelleri gizle)"><i class="fa-solid fa-compress"></i></button>
<button id="helpBtn" class="chip-btn" title="Klavye kısayolları (Ctrl+K komut paleti)"><i class="fa-solid fa-keyboard"></i></button>
<button id="backupBtn" class="chip-btn" title="Yedek al"><i class="fa-solid fa-floppy-disk"></i></button>
</div>
</header>
<!-- GÖVDE -->
<div class="body">
<aside class="sidebar">
<nav class="nav-links">
<button class="nav-link active" data-view="home"><i class="fa-solid fa-house"></i> <span data-i18n="Ana Sayfa">Ana Sayfa</span></button>
<button class="nav-link" data-view="search"><i class="fa-solid fa-magnifying-glass"></i> <span data-i18n="Ara">Ara</span></button>
<button class="nav-link" data-view="effects"><i class="fa-solid fa-sliders"></i> <span data-i18n="Efektler">Efektler</span></button>
</nav>
<div class="library">
<div class="library-head">
<span class="lib-title" data-i18n="📚 Kitaplığın">📚 Kitaplığın</span>
<div class="lib-actions">
<button id="importBtn" class="plus-btn" title="MP3 içe aktar"><i class="fa-solid fa-plus"></i> <span data-i18n="Ekle">Ekle</span></button>
<button id="createPlaylist" class="plus-btn" title="Çalma listesi oluştur"><i class="fa-solid fa-plus"></i></button>
</div>
</div>
<input id="libSearch" class="lib-search" type="text" placeholder="🔍 Kütüphanede ara">
<div id="playlistList" class="playlist-list"></div>
</div>
</aside>
<main class="main" id="view"></main>
<aside class="right-panel" id="rightPanel"></aside>
</div>
<!-- ALT PLAYER -->
<footer class="player">
<div class="p-left">
<img id="pCover" class="p-cover" alt="">
<div class="p-meta">
<div id="pTitle" class="p-title">Müzik Çalar Hazır</div>
<div class="p-sub-row"><span id="pArtist" class="p-artist"></span><span id="moodChip" class="mood-chip"></span></div>
</div>
<button id="pFav" class="icon-btn fav" title="Beğen"><i class="fa-regular fa-heart"></i></button>
<canvas id="playerViz" class="player-viz" title="Görselleştirici"></canvas>
</div>
<div class="p-center">
<div class="p-controls">
<button id="pShuffle" class="icon-btn" title="Karıştır"><i class="fa-solid fa-shuffle"></i></button>
<button id="pPrev" class="icon-btn" title="Önceki"><i class="fa-solid fa-backward-step"></i></button>
<button id="pPlay" class="play-btn" title="Oynat/Duraklat"><i class="fa-solid fa-play"></i></button>
<button id="pNext" class="icon-btn" title="Sonraki"><i class="fa-solid fa-forward-step"></i></button>
<button id="pRepeat" class="icon-btn" title="Tekrarla"><i class="fa-solid fa-repeat"></i></button>
</div>
<div class="p-seek">
<span id="pCur" class="time">0:00</span>
<div class="bar" id="seekBar"><div class="bar-fill" id="seekFill"></div><div class="bar-knob" id="seekKnob"></div></div>
<span id="pDur" class="time">0:00</span>
</div>
</div>
<div class="p-right">
<button id="pMore" class="icon-btn p-more-btn" title="Daha fazla"><i class="fa-solid fa-ellipsis"></i></button>
<div class="p-extra" id="pExtra">
<button id="pVideo" class="icon-btn" title="Klip izle (internetten akış — indirme yok)"><i class="fa-solid fa-film"></i></button>
<button id="pKaraoke" class="icon-btn" title="Karaoke — vokal azalt"><i class="fa-solid fa-microphone-slash"></i></button>
<button id="pAmbient" class="icon-btn" title="Ambiyans ışığı"><i class="fa-solid fa-lightbulb"></i></button>
<button id="pQueueBtn" class="icon-btn" title="Kuyruk (Sıradaki)"><i class="fa-solid fa-list-ol"></i></button>
<button id="pLyricsBtn" class="icon-btn" title="Şarkı Sözleri"><i class="fa-solid fa-align-left"></i></button>
</div>
<button id="pHeroBtn" class="icon-btn" title="Şimdi çalıyor (merkez)"><i class="fa-solid fa-record-vinyl"></i></button>
<button id="pFsBtn" class="icon-btn" title="Tam ekran"><i class="fa-solid fa-expand"></i></button>
<button id="pPanelBtn" class="icon-btn active" title="Çalınıyor paneli"><i class="fa-solid fa-table-columns"></i></button>
<select id="speedSel" class="mini-sel" title="Hız"></select>
<select id="sleepSel" class="mini-sel" title="Uyku zamanlayıcı"></select>
<button id="pMute" class="icon-btn" title="Sessize al"><i class="fa-solid fa-volume-high"></i></button>
<div class="vol" id="volBar" title="Ses (100+ = boost)"><div class="vol-fill" id="volFill"></div></div>
</div>
</footer>
</div>
<div id="toast" class="toast"></div>
<script src="app.js"></script>
</body>
</html>