Shuffle the playlist before playing if "[random]" is in the rfid data.

This commit is contained in:
Fabian Schlenz 2022-08-22 13:59:00 +02:00
parent 15a65f7391
commit 13e62fea19
4 changed files with 13 additions and 4 deletions

View File

@ -19,13 +19,13 @@ class Controller {
unsigned long button_pressed_since = 0;
bool button_already_processed = false;
String read_rfid_data();
public:
void handle();
void next_track();
void prev_track();
void play();
void play(String rfid_id);
void play(String rfid_id, bool shuffle=false);
void stop();
void eof_mp3();
};

View File

@ -22,4 +22,5 @@ class Playlist {
void restart();
void set_current_time(uint32_t time);
uint32_t get_current_time();
void shuffle();
};

View File

@ -67,7 +67,7 @@ void Controller::handle_rfid() {
String data = read_rfid_data();
play(s_uid);
play(s_uid, data.indexOf("[random]")>=0);
}
rfid->PICC_HaltA();
}
@ -123,10 +123,14 @@ String Controller::read_rfid_data() {
return data;
}
void Controller::play(String rfid_id) {
void Controller::play(String rfid_id, bool shuffle) {
if (!rfid_id.equals(current_playlist.get_rfid_id())) {
if (pm->has_playlist(rfid_id)) {
current_playlist = pm->get_playlist(rfid_id);
if (shuffle) {
log_i("Shuffling the playlist.");
current_playlist.shuffle();
}
play();
} else {
Serial.printf("There is no playlist for rfid_id %s\n", rfid_id.c_str());

View File

@ -59,4 +59,8 @@ void Playlist::set_current_time(uint32_t pos) {
uint32_t Playlist::get_current_time() {
return current_time;
}
void Playlist::shuffle() {
std::random_shuffle(files.begin(), files.end());
}