#include "playlist_manager.h" #include "spi_master.h" #include PlaylistManager::PlaylistManager() { SPIMaster::enable_sd(); current_rfid_tag_id = String(""); if (!SD.exists("/_mapping.txt")) { Serial.println("WARNING: /_mapping.txt not found!"); } else { map.clear(); File f = SD.open("/_mapping.txt"); Serial.println(" Reading /_mapping.txt..."); while (f.available()) { char buffer[512]; size_t pos = f.readBytesUntil('\n', buffer, 511); buffer[pos] = '\0'; String data = buffer; uint8_t eq = data.indexOf('='); if (eq>0 && eq%s\n", rfid_id.c_str(), folder.c_str()); map[rfid_id] = folder; } } f.close(); } } Playlist PlaylistManager::get_playlist(String rfid_id) { if (rfid_id.equals(current_rfid_tag_id)) { return current_playlist; } else { if (map.count(rfid_id)==0) { Serial.printf("No known playlist for id %s.\n", rfid_id); return current_playlist; } else { current_playlist = Playlist(rfid_id); String path = map[rfid_id]; if (path.startsWith("/")) { File dir = SD.open(path); while(File entry = dir.openNextFile()) { String filename = entry.name(); String ext = filename.substring(filename.length()-4); if (!entry.isDirectory() && !filename.startsWith(".") && ext.equals(".mp3")) { Serial.printf("Adding %s to the list of files\n", (path + "/" + filename).c_str()); current_playlist.add_file(path + "/" + filename); } entry.close(); } dir.close(); } current_playlist.sort(); current_rfid_tag_id = rfid_id; return current_playlist; } } } void PlaylistManager::set_audio_current_time(uint32_t time) { audio_current_time = time; } bool PlaylistManager::has_playlist(String rfid_id) { return map.count(rfid_id) == 1; }