Kod satır 98: shuffle: false state var.
Kod satır 237: @click="shuffle = !shuffle" butonu var.
AMA: Shuffle toggle olduğunda queue'yu karıştıran FONKSİYON YOK!
Modern, etkili ve adil karıştırma algoritması. O(n) complexity.
// Fisher-Yates shuffle algorithm
shuffleArray(array) {
const arr = [...array]; // Shallow copy (orijinali korur)
for (let i = arr.length - 1; i > 0; i--) {
// 0 ile i arasında rastgele index
const j = Math.floor(Math.random() * (i + 1));
// Swap (yer değiştir)
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
// Shuffle toggle fonksiyonu
toggleShuffle() {
this.shuffle = !this.shuffle;
if (this.shuffle) {
// Shuffle AÇILDI - Queue'yu karıştır
// 1. Şu an çalan şarkıyı kaydet
const currentSong = this.queue[this.queueIndex];
// 2. Şu an çalan şarkıyı queue'dan çıkar
const restOfQueue = [
...this.queue.slice(0, this.queueIndex),
...this.queue.slice(this.queueIndex + 1)
];
// 3. Geri kalanları karıştır
const shuffled = this.shuffleArray(restOfQueue);
// 4. Şu an çalan şarkıyı başa koy
this.queue = [currentSong, ...shuffled];
// 5. Index'i 0'a çek (çalan şarkı başta)
this.queueIndex = 0;
// 6. Orijinal sırayı sakla (kapatınca geri döner)
this.originalQueue = [...this.queue];
console.log('🔀 Shuffle ON: Queue karıştırıldı');
this.showToast('Karışık çalma açık', 'success');
} else {
// Shuffle KAPANDI - Orijinal sıraya dön
if (this.originalQueue && this.originalQueue.length > 0) {
// Orijinal sıra varsa geri yükle
this.queue = [...this.originalQueue];
this.originalQueue = null;
console.log('🔀 Shuffle OFF: Orijinal sıra geri yüklendi');
this.showToast('Karışık çalma kapalı', 'info');
}
}
}
// Alpine.js data() içine ekle
data() {
return {
// ... mevcut state'ler
shuffle: false, // Shuffle aktif mi?
originalQueue: null, // Orijinal queue sırası (shuffle için)
// ... diğer state'ler
};
}
✅ Çalan şarkı başa alındı, geri kalanlar karıştırıldı!
// Smart Shuffle (aynı sanatçı peş peşe gelmez)
smartShuffle(array) {
let shuffled = this.shuffleArray(array);
// Aynı sanatçı peş peşe gelirse yeniden karıştır
for (let i = 0; i < shuffled.length - 1; i++) {
if (shuffled[i].artist_id === shuffled[i + 1].artist_id) {
// Sonraki farklı sanatçıyı bul
for (let j = i + 2; j < shuffled.length; j++) {
if (shuffled[j].artist_id !== shuffled[i].artist_id) {
// Swap
[shuffled[i + 1], shuffled[j]] = [shuffled[j], shuffled[i + 1]];
break;
}
}
}
}
return shuffled;
}
// Console'da test et
console.log('Orijinal queue:', this.queue.map(s => s.song_title));
// Shuffle aç
this.toggleShuffle();
console.log('Shuffled queue:', this.queue.map(s => s.song_title));
// Shuffle kapat
this.toggleShuffle();
console.log('Restored queue:', this.queue.map(s => s.song_title));
// Aynı mı kontrol et
console.log('Orijinal sıra geri döndü mü?', /* karşılaştırma */);