Bug Analizi 24 Aralik 2025

Muzibu Queue Dongu Sorunu

Albumde ayni 3 sarki surekli tekrarlaniyor - Kok neden analizi ve cozum plani

Sorun

Basit Anlatim (Herkes Icin)

Erkin Koray albumunden bir sarki dinlediginde, kuyrukta (queue) ayni 3 sarki surekli tekrarlaniyor. "Saksidaki Cicekler", "Yalniz Kurt" ve "Cold Love" sarkilari 11 kez listeleniyor. Normalde album bitince farkli sarkalar gelmeli ama sistem ayni sarkilari donguye sokuyor.

Teknik Detaylar

  • b-html.txt - Queue overlay HTML dump
  • Album: 3 sarki (unique)
  • Queue: 11 sarki (ayni 3 sarki 3-4 kez tekrarlaniyor)

Mevcut Sistem Akisi

1

Sarki Tiklandiginda

Kullanici bir sarkiya tikliyor

playSong(id) cagriliyor
AUTO-CONTEXT: Album veya Genre otomatik set ediliyor
refillQueue(1, 15) cagriliyor (15 sarki istiyor)
this.queue = [song, ...nextSongs]
2

Backend Queue Refill

QueueRefillController sarki donduruyor

getAlbumSongs($albumId, $offset, $limit, $excludeSongIds)
Album'de 3 sarki var, 15 istenildi
inRandomOrder()->limit(15) = 3 sarki donuyor
$songs->isEmpty() = FALSE (3 sarki var)
3

SORUN: Transition Asla Olmuyor!

Album bitmeden Genre'ye gecis yapilamiyor

// Backend kontrolu:
if ($songs->isEmpty()) { // TRANSITION: Album → Genre }

// PROBLEM:
- Album'de 3 sarki var
- isEmpty() hic TRUE olmuyor
- TRANSITION asla tetiklenmiyor
- Ayni 3 sarki sonsuza kadar donuyor
4

Sarki Bittiginde

Crossfade veya nextTrack cagriliyor

onTrackEnded()nextTrack()
queueIndex++
Queue sonuna gelince repeatMode='all' veya b2bMode ile basa don
Veya yeni refillQueue cagriliyor → Ayni sarkalar tekrar ekleniyor

Kok Nedenler

Transition Mantigi Hatali

MEVCUT (Yanlis)

isEmpty() kontrolu: Album'de sarki varsa TRANSITION yok.
3 sarkili album → Hic bitmez → Sonsuz dongu

OLMASI GEREKEN

Exclude listesi album sarki sayisina esit/yakin olunca TRANSITION.
Veya offset toplam sarki sayisini gecince TRANSITION.

Random Selection Sorunu

inRandomOrder() her seferinde ayni 3 sarkiyi farkli sirada donduruyor. Exclude listesi cok buyuk olmadigi surece ayni sarkalar geliyor.

Refill 1: [Cold Love, Saksidaki, Yalniz] // 3 sarki
Refill 2: [Yalniz, Cold Love, Saksidaki] // ayni 3 sarki
Refill 3: [Saksidaki, Yalniz, Cold Love] // yine ayni!

Frontend Exclude Listesi Yetersiz

recentlyPlayed listesi gonderiliyor ama album kuculuk nedeniyle yetersiz kaliyor.

Album: 3 sarki
Exclude: [1, 2] // 2 sarki exclude
Kalan: 1 sarki → Cok az, ama isEmpty() yine FALSE

Cozum Plani

1. Backend: Akilli Transition Mantigi

Album/Playlist sarki sayisi az ise otomatik Genre'ye gec

// QueueRefillController.php - getAlbumSongs()

$totalSongs = $album->songs()->where('is_active', 1)->count();
$excludeCount = count($excludeSongIds);

// Eger tum sarkilar dinlendiyse → Genre'ye gec
if ($excludeCount >= $totalSongs || $songs->count() < 3) {
    // TRANSITION: Album → Genre
    return $this->getGenreSongs($genre_id, 0, $limit, []);
}

2. Frontend: Queue Duplicate Kontrolu

Queue'ya eklenmeden once ayni sarki var mi kontrol et

// player-core.js - playSong() icinde

// Mevcut queue'daki sarki ID'lerini al
const existingIds = new Set(this.queue.map(s => s.song_id));

// Sadece yeni sarkilari ekle
const newSongs = nextSongs.filter(s => !existingIds.has(s.song_id));
this.queue = [song, ...newSongs];

3. Backend: Transition Response ile Bildir

Album bittiginde frontend'e "Genre'ye gectim" bilgisi gonder

// Response
{
  "success": true,
  "songs": [...],
  "transition": {
    "type": "genre",
    "id": 5,
    "name": "Rock",
    "reason": "album_exhausted"
  }
}

Etkilenen Dosyalar

Dosya Degisiklik
Modules/Muzibu/app/Http/Controllers/Api/QueueRefillController.php Akilli transition mantigi ekle
public/themes/muzibu/js/player/core/player-core.js Duplicate kontrolu ekle
public/themes/muzibu/js/muzibu-store.js refillQueue transition handler

Beklenen Akis (Duzeltme Sonrasi)

Sarki Tikla
Album Sarkilari
Tumu Dinlendi?
Genre'ye Gec
Sonsuz Muzik